Oct 21~24, 2023【晚秋の贅沢な山旅 PART②】黒部峽谷♡下之廊下|日本北阿爾卑斯山秘境健行+野營+秘湯溫泉 DAY 1(黒部水壩〜下之廊下〜阿曾原溫泉)

圖片
今天是這趟四天三夜秋季山旅的第二天,昨天在信濃大町悠閒度過了半天,今天終於要進入黑部峽谷山區了。原本是預計早上6點15分,要從信濃大町車站前,乘坐第一班巴士前往 扇沢 ,但是旅館客房太溫暖,不小心睡過頭,等到自然醒時,看了手機已經早上6點了。 這時就算再怎麼快速收拾背包衝到車站也趕不上6點15分的巴士了。雖然還有下一班巴士可以搭,但是今天的路程有點遠,得走上20公里,加上紅葉季節,如果太晚抵達露營場,可能會找不到位置紮營,所以我想還是儘早出發比較好。幸好車站前有計程車可以利用,只是必須多花幾千塊日幣消災就是了。 在觀光季節,最早一班由 扇沢 開往 黒部ダム ( 黑部水壩 )的巴士是早上7點30分發車,所以只要需抓個50分鐘的乘車跟買票時間,大概早上6點40分左右,從大町車站前搭上計程車就沒問題了。 洗漱完畢,整理好背包後,將房間鑰匙放回旅館櫃檯的籃子裡,然後走路到車站前面,叫一輛計程車前往 扇沢 (車資大約8000日幣上下)。走在路上可以看見遠處三千公尺級的高山,都已經覆上了新雪,預告著今年的雪季即將到來。 早上7點左右抵達 扇沢 ,買了一張前往 黑部水壩 的單程電氣巴士車票(1,800日幣),然後將登山計畫書投遞進箱子裡,走上二樓排隊等待搭車。果然不愧是紅葉季節,車站二樓裡面,整整四排的排隊區,已經排滿了登山客和觀光客。 扇沢 其實就是 立山黑部阿爾卑斯路線 的長野側起點,是觀光客很喜歡造訪的地方,只是一般觀光客不會曉得,站在黑部水壩頂部欣賞放水時,在那 日本規模第一 的水壩後方之溪谷深處,竟然隱藏著一條少為人知的登山步道。 相關參考連結 下ノ廊下を含む活動日記一覧(YAMAP) 登山ルート情報 - 阿曽原温泉小屋 立山黒部アルペンルート|公式サイト アルピコ交通|路線バス 扇沢線 くろよん(黒部ダム)ーその手に未来をー|関西電力 2021年の番組~最後の秘境・黒部源流紀行【小椋久美子が黒部川の“最初の一滴”を目指す旅】 【下の廊下】黒部峡谷の断崖絶壁を命懸けで歩く(前編) 【下の廊下】落ちたら終わりの絶景登山道(後編) 【テント泊登山】断崖絶壁30kmの道、黒部峡谷の歴史を歩く|旧日電歩道-下ノ廊下-水平歩道 黒部源流と大峡谷( 圖片來源 ) 雖然排隊人潮很多,但是早上7點半準時檢票上車,群眾也非常有秩序和效率的往前進,似乎連一點時間也沒有耽誤到就準時發車了,日...

【筆記】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 專案上,可以這樣設定:



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

熱門文章

Mar 2025【桃園大溪】金面山(小百岳 No.021)、金山面山健行|阮家土雞城起登

Sep 2024 晚夏的黑部源流4泊5日山旅 PART ①【溪流登攀&溫泉三昧】赤木沢~五郎沢~祖父沢遡行&雲ノ平~高天原~裏銀座縱走(旅途的開始)

Oct 21~24, 2023【晚秋の贅沢な山旅 PART②】黒部峽谷♡下之廊下|日本北阿爾卑斯山秘境健行+野營+秘湯溫泉 DAY 1(黒部水壩〜下之廊下〜阿曾原溫泉)

2019 Aug 16~18【福建南平】中國世界遺產~福建武夷山遊記。登天遊峰、臨九曲溪、品大紅袍

2019, July 7~8【中國山東】老司機帶你攀登72位古代帝王曾登臨朝拜,以五嶽獨尊名揚天下的泰山(歷史典故+遊覽路線+遊記+照片)

Sep 2025【新北雙溪】蝙蝠山、苕谷瀑布、百二階古道O形|山頂有360度展望,但之後的路線蜘蛛絲有點多

Mar 12, 2022【重機一日遊】走北橫至宜蘭,經梨山、武嶺下埔里,再走台三線回桃園|16小時的半圈環島

日本の登山の歷史

Aug 2025【新北金山】循竹子山古道(前段)造訪阿里磅瀑布|陽明山第一大瀑布|冷門山徑

2019.10.9~13【令和元年の紅葉の山旅へ PART①】秋の贅沢、黒部川の源流へ北アルプス深部を縦走5日間!Day0、Day1(前泊、折立~藥師岳山莊)

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *