2013年5月25日

用node.js實作Apple APNS推撥服務server


node.js正夯
在github發現一個有趣的套件
用這個套件就可以直接以node.js架設簡單的APNS server



iOS的推撥通知服務是啥?
在行動裝置開發上,開發者可以利用推撥通知服務(iOS:APNS, Android:GCM)
送訊息給裝在客戶手機的App...

簡單的說,就是這個



以水果提供的APNS服務來說,串接方法可以先看完這篇文章...
然後你就會串惹~


上面那篇文章如果懶得看的話,歸納出實作推撥通知的需求如下
1. SSL handshake的憑證跟私密金鑰
2. 使用者裝置的device token
3. 欲送出給行動裝置的訊息

然後只要以水果規定的推撥通知的封包格式,組出一個封包
之後透過SSL憑證建立SSL連線,送出封包就可以射後不理惹~

憑證跟私密金鑰的申請方式網路上已經很多了,自己去google就好
拿到憑證跟私密金鑰後,必須把它匯出成憑證檔跟金鑰檔


步驟如下

1. 匯出憑證





2. 匯出憑證所對應的私鑰







這組密碼是類似sudo的動作,系統跟你要root權限用的



這邊要注意一下
匯出私鑰時,必須指定一組密碼來保護私鑰
可以隨便設個qwe123之類的,不必跟系統的密碼一樣...


3. 用openssl把憑證與私鑰轉換成.pem並測試
$ openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem
$ openssl pkcs12 -in key.p12 -out key.pem -nodes
Enter Import Password: (輸入你剛剛匯出私鑰的密碼)

接著,先用這些轉好的pem測試跟水果攤server的SSL connection是否正常
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 
-cert cert.pem -key key.pem

如果收到類似下圖一樣的東西,就表示憑證與key可以用了。



憑證跟金鑰準備好之後,就開始寫程式了

1. 先用npm安裝套件
$ npm install apn

2. coding... 10行解決XD
var apn = require('apn');
var notify = new apn.Notification();
notify.device = new apn.Device(""); // ""裡面放欲推撥裝置的token
notify.badge = 100;     // App icon上面的數字badge
notify.alert = "測試XD";    // 推撥顯示文字
new apn.Connection({ 
    cert:'cert.pem',
    key:'key.pem',
    gateway:'gateway.sandbox.push.apple.com'
   }).sendNotification(notify);


3. 測試...
把剛剛的code存檔成test.js
然後key下面的指令
$ node test.js 


之後可能要稍微等個幾秒鐘


如果沒有意外的話,就可以在手機上面看到推撥訊息了。

沒有留言:

張貼留言