【南投信義】丹大林道與消失的省道台16線|可徒步深入中央山脈的經典長程林道

圖片
布農族人有這麼一句話:「濁水溪的上游,不是終點,是我們布農文化的起源」,這句話揭開 丹大林道 的旅行序幕。下面是幾年前,丹大林道還沒被媒體大肆報導前,我曾在某個冬季前往安靜的丹大林道徒步健行和野營,以及在工寮過夜的三天兩夜重裝健行紀錄。 2024.01.31更新:合流坪的鋼便橋已於今日被台電撤除了 連結: 台電施工後丹大林道「恢復」通行! 拆橋挖巨溝「車輛恐無法通過」 丹大地區 位於臺灣本島中部之濁水溪上游,行政區隸屬於南投縣信義鄉,為全國面積第二大的鄉鎮。丹大地區也是濁水溪的發源處。東側翻過中央山脈可達花蓮,南鄰玉山國家公園,西接日月潭國家風景區,北側則與仁愛鄉相接。 潭南、雙龍、地利及人和四村等區域皆位於信義鄉,著名的 丹大(孫海)林道 便位於地利村中,沿著步道往東至花蓮邊界處可與七彩湖相接。其中地利村及雙龍村面積最大,合佔本區約七成面積,人和村次之,面積最小者為潭南村 。 丹大林道周邊地圖 丹大林道路徑示意圖 日治時期西元1943年,原本預計將東部花蓮木瓜溪流域附近的水力發電廠所生產的剩餘電力運輸到西部,但因為日本在1945年戰敗後,計畫就宣告中止,1948年台灣工業急速發展,用電量大增,直到1950年獲得美國援助執行了能高路線全長45公里的69kV東西向輸電計畫。 之後為了解決花東地區電力供應問題,台電於1985年開始研究新東西輸電之路線,最後決定自南投明潭發電廠與大觀第二發電廠輸送電力至花蓮鳳林超高壓變電所,此新東西輸電線於1990年開始辦理路線中心測量,1998年完工,全長72.4公里。 沿線共有196座電塔,線路橫跨中央山脈海拔2925公尺的崇山峻嶺,並在「 七彩湖 」附近的越嶺處設有「 光華復旦 」紀念碑,西以 丹大林道 、東以 萬榮林道 為維修保線道路。 丹大林道是深入丹大地區的重要通道,1958年(民國47年),出生於現今雲林縣口湖鄉的孫海,標得林務局巒丹大事業區第八林班地檜木原始林採伐權及伐木後的重新造林權,為了進入深林,孫海沿著原本的山徑開闢出可以卡車通行的丹大林道,因此丹大林道也被稱為「 孫海林道 」。 當年為了闢築林道與運輸需要,孫海建造了一座木橋於合流坪橫跨濁水溪,之後改為水泥橋,這座橋就是著名的「 孫海橋 」。 為了伐木業而開闢的丹大林道,其終點一開始並不是在七彩湖,後半段到光華復旦碑約12公里路段,是台電為了興建東西線輸電工程,才於

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



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

熱門文章

[轉載] 洛克菲勒寫給兒子的38封信(全文)

May 2023【台中南屯】地雷店食記|森鐵板燒|用餐體驗差,價格超貴卻豪無價值。小心別踩雷!!!

【美國加州】加州一號公路自駕遊~Half Moon Bay、17 Mile Drive、Bixby Greek Bridge、Big Sur、McWay Falls、Elephant Seal Rookery

【南投信義】丹大林道與消失的省道台16線|可徒步深入中央山脈的經典長程林道

Aug, 2023【桃園大溪】桃園小百岳編號23-溪洲山步道|適合訓練腳力、還能觀賞石門水庫的山水景色

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

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

Mar, 2024【桃園龍潭】石門山景春步道、小粗坑古道隨意走走|順遊石門水庫、黃大目豆干

Apr 7, 2024【屏東高樹鄉】南臺灣小百岳|尾寮山登山步道| 可以眺望高樹、六龜、美濃的鄉村風景

Feb, 2024【台中西區】桃太郎日本料理|隱身巷弄裡的39年老字號無菜單料理|食材新鮮、自然美味

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *