Jan 2025【日本東北】溫泉三昧之旅⑤ 在大雪飄落的雪國,追尋秘湯之宿與極上美食(福島~被時光遺忘下的江戶原風景,日本三大茅葺聚落大內宿)

圖片
清晨的陽光穿過窗櫺,灑落在榻榻米上,為房間增添了一抹溫暖的光輝。窗外,白雪皚皚的山脈在晴朗的天空下閃閃發光,預示著美好的一天。我起身走到窗邊,深深吸了一口清新的冬日空氣,心中充滿了對即將到來的一天以及仙峽閣旅館美味早餐的期待。 旅館的餐廳瀰漫著舒適的氛圍。我坐在窗邊的座位上,渴望一邊欣賞迷人的雪景,一邊享用我的早餐。一個擺盤精美的早餐托盤送到了面前,上面擺滿了各種誘人的菜餚。 我的目光首先被一碗晶瑩剔透的白米飯吸引,它的香氣瀰漫在空氣中。旁邊是一份色彩繽紛的沙拉,新鮮的蔬菜搭配玉米粒,令人食慾大增。烤鮭魚散發著陣陣香味,魚皮烤得酥脆可口。溫泉蛋浸泡在清淡的高湯中,看起來既美味又暖胃。 其他幾道小菜也讓這份早餐更加豐富:燉菠菜、裙帶菜炒蒟蒻、山藥泥佐醬油,以及醃梅子和醃黃瓜。最後,一小杯香甜的芒果優格為這頓早餐畫上了完美的句點。 這份早餐不僅美味,而且營養均衡,為我在這個冬季仙境中探索一天提供了滿滿的能量。我細細品味著每一道菜餚,感受著旅館的用心和款待,心中充滿了感激之情,感謝這美好的一天有如此美好的開始。 飯後早晨,我踏出旅館的暖簾,迎接我的是一片銀白色的世界。蘆之牧溫泉街靜靜地沉睡在會津深山的懷抱中,厚厚的積雪覆蓋著屋頂、街道和樹木,彷彿時間也凍結在這一刻。 呼出的氣息在冰冷的空氣中凝結成白霧,我沿著溫泉街漫步,腳步聲在寂靜的早晨顯得格外清晰。偶爾,可以聽見屋簷上融雪滴落的聲音,或是遠處傳來的幾聲鳥鳴,更增添了這份寧靜的氛圍。 阿賀川靜靜地流淌在山谷間,河面上覆蓋著薄薄的冰層,在陽光的照射下閃閃發光。河岸邊的樹木披上了雪白的冬衣,枝椏交錯,形成一道道優美的弧線。溫泉旅館的屋頂冒著裊裊炊煙,為這寒冷的冬日增添了一絲溫暖。 漫步在空無一人的溫泉街上,我彷彿置身於一個與世隔絕的世外桃源。這份寂靜,這份純淨,洗滌了我的心靈,讓我感受到久違的平靜與祥和。 凛冬將群山染成了素雅的銀白,積雪在山坡上鋪陳開來,厚薄錯落,像是誰不經意間揮灑的筆墨,濃淡相宜。裸露的枝枒,在寒風中輕輕搖曳,仿佛在低聲訴說著冬日的故事。遠處的山巒,在霧氣的籠罩下,若隱若現,宛如仙境一般,讓人心生嚮往。 蘆之牧溫泉的冬日,沒有喧囂,沒有繁華,只有那份獨特的靜謐與安詳,像一首悠揚的樂曲,在山谷間輕輕回蕩,令人陶醉其中,忘卻了塵世的煩惱。 這山,這雪,這寧靜的溫泉小鎮,這氤氳的霧氣,交織成一幅絕美的冬日畫卷,...

【筆記】Sending Push Notifications from Rails back-end to an iOS App— To keep your user engaged with app

Apple Push Notification Service (簡稱 APNs) 是 Apple 公司在 2009 年的 iOS 3.0 版本時所發布的一項平台服務,透過這項服務,第三方應用程式的開發人員,只需要獲取憑證,並寫一些程式碼,就可以發送通知給 iOS 裝置上的 App 用戶!

要在 iOS client app 和 back-end server 之間實現 Push Notification,首先必須擁有一個付費的 Apple 開發人員帳號,以建立憑證 (Certificates)。 然後在 Xcode 開發環境中,授權
 Notification 權限給你的 App。最後是取得 .p12 憑證檔案 (這是一個包含私鑰的憑證,可以讓 Apple 解譯你的信息)。

首先,請按以下步驟來獲取 .p12 憑證檔案:

1. 登入 Apple developer account 並點選 Certificates, Identifiers and Profiles




2. 在頁面中選擇App所使用的AppID,然後點選 Edit 進入。裡面可以看到一些 Services 的狀態,找到 Push Notifications 項目並勾選它。接著點選 Create Certificate,之後你會看到一個上傳 .certSigningRequest 檔案的頁面。

這裡有兩種不同的憑證:Sandbox (Development) certificateDistribution (Production) certificate,我們可以在不同的環境下使用不同的憑證。



3. 請在 Mac 電腦上執行 Keychain Access 應用程式,選擇鑰匙圈授權 -> 憑證輔助程式 -> 從憑證授權要求憑證,在下一個視窗中,輸入你的 Email,並勾選儲存到磁碟,你的電腦上就會有 .certSigningRequest 這個檔案了。



4. 從電腦上選擇剛才產生的 .certSigningRequest 檔案並點選繼續,然後就能下載 Development Certificate 了。


之後再回到 Certificates 頁面查看,如果 Push Notifications 項目變成綠燈,就表示設定完成了!


產生APNS .p12 憑證

接下來我們要用剛才下載的開發憑證,來產生 .p12 certificate

1. 雙擊剛才下載的開發憑證,將它加入到 Keychain Access,選擇鑰匙圈存取應用程式左下方的我的憑證類別,然後選取你的開發憑證,右鍵點擊它並選取輸出



輸出過程中會要求你輸入一組用來保護憑證的密碼 (passphrase),以及 Mac 用戶的密碼。然後我們的 .p12 certificate 就產生完成了!接下來就能利用這個憑證來發送 Push Notification 信息了。

注意,Xcode 開發工具的 simulators 無法接收 push notifications,所以必須連接真正的 iOS 裝置來進行測試。

Enabling Push Notifications on iOS

接下來是設定 iOS 專案的部分。在 Xcode 裡面啟用 Notification 權限給你的 App (如下):


接著在 Xcode 專案的 AppDelegate.m 裡面,加入以下程式碼,讓 iOS 用戶授權我們的 App 可以接收 push notifications 信息。



在 didReceiveRemoteNotification 中,我們可以處理 JSON payload,並且它會被 pass 給一個叫 userInfo 的 NSDictionary 實體。下面是一個 iOS App 從 back-end server 接收到的 payload 範例。關於 payload 的詳細訊息,可以參考 Apple 官方文件



加入以上程式碼後,我們就可以 build project 將 App 傳送到開發用的 iOS 裝置上了。如果在 build project 時,出現「找不到應用程式的有效 “aps-environment” 授權字串」的錯誤訊息,請檢查確認以下項目:

  • 請確認在 Apple DeveloperIdentifiers > App IDs 中,有新增好一個專用的 App ID,並且這個 App ID 是對應到 Xcode 專案,並且 Enable Services 中有勾選 Push Notification 項目。
  • 在 Apple Developer 設定頁面中,Push Notifications 的狀態應該要是 Enabled 才對,如果狀態是 Configurable 的話,請點擊 Edit 進入編輯頁面,然後點選 Create Certificate 以產生專用的 SSL 憑證。
  • 產生一個新的 Provisioning Profile 給這個 App ID ,然後下載安裝至 Mac 上。
  • 確認在編譯 App 時,使用正確的 App ID 和 Provisioning Profile ,這樣在註冊推播通知時,就不會有問題了。

如果一切沒問題,那麼在 build 完 Xcode project,並且在 iOS 裝置上執行 App 時,就會看到下面這個熟悉的畫面,同時也會得到一串用來識別機器的 device token


Setup Rails back-end for Pusher

在 Rails back-end 的部分,我們將 iOS App 傳回來的 device token,存放在一個簡單的 Device Model 裡面,它的結構大概如下:



我們的內部系統,後台是基於 Ruby on Rails 及 MySQL 構建,而在 Rails 環境上,有很多 Ruby Gem 可以快速完成 push notifications 的部署(例如 HoustonGrocerrPush...等等),讓開發人員不需要浪費時間去 Reinventing the wheel。

這裡我們簡單測試使用 Houston 來發送 push notifications 給 iOS 裝置,首先在 Rails 專案裡加入這個 gem,然後執行 bundle install

gem 'houston'

接著開啟 Terminal,用 openssl 從 .p12 憑證產生 .pem 憑證,我們需要這個文件來發送 push notifications 訊息,command line tool 的命令如下:

$ openssl pkcs12 -in <你的 .p12 憑證檔案路徑> -out <產生的 .pem 憑證檔案路徑>

Houston 的說明文件中,有提供使用範例 (如下):



我們試著在 User Model 裡面,寫一個簡單的 Ruby method,然後在 Rails console 上面輸入一個簡單的信息,來測試一下行動裝置上能否收到通知:
User.send_notify_ios('大吉大利今晚吃雞')


很快的,我們的 iOS 行動裝置就接受到信息了 (如下圖)


Apple的文件建議開發者應該避免經常的對他們的server 做 connections/disconnections,所以如果需要頻繁發送通知,我們應該設定 persistent connection。在使用 Houston gem 的 Rails 專案上,可以這樣設定:



這篇文章只是作為備忘用,因此沒有牽涉到太多技術細節。基礎架構完成後,接下來要怎麼和現有的系統做整合 (例如什麼事件發生時,發送推播通知給特定用戶),這都只是流程上的串接,以及寫幾行程式罷了。對開發者來說,就像是拿積木去拼湊出想要的東西而已。

熱門文章

July 2024【台北士林】陽明山彼端的原始秘境|颱風後的鹿角坑生態保護區|循著疊石指引造訪楓林瀑布

Jan 2025【日本東北】溫泉三昧之旅② 在大雪飄落的雪國,追尋秘湯之宿與極上美食(仙台~品嚐極上米澤牛&奧羽的百年藥湯-鎌先溫泉)

Jan 2025【苗栗三義】富貴牡丹(三義館)人文藝術餐廳|預約制|在美術館裡吃無菜單料理

Jan 2025【日本東北】溫泉三昧之旅⑤ 在大雪飄落的雪國,追尋秘湯之宿與極上美食(福島~被時光遺忘下的江戶原風景,日本三大茅葺聚落大內宿)

Jan 2025【苗栗泰安】泰安警光山莊泡湯&彰化CP值極高的日本料理|沐藏料理所X海龍王|彰化板前料理 ♨️🍁🥢🍲

Feb 2023【台中和平】裡冷林道Off Road單車野營~順登谷關七雄之首八仙山!單車+野營+登山,三個願望一次滿足

May 2023【雲林古坑】 負離子濃度達都市40倍/漫步木馬古道/順訪雲嶺之丘/山合苑喝咖啡/秋田犬

日本の登山の歷史

Sep, 2021【苗栗南庄】蓬萊林道Off Road小試|雨後很爛很濕滑|二傳低底盤車勿輕易嘗試

Mar 2025【桃園楊梅】福人登山步道輕鬆行:探索綠意盎然的自然步道

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *