Titanium:實做Ios app的Push notification功能

以下是使用Mac實做Ios app的push notification功能:

step1.註冊Ios開發者帳號,一年要$99美元
由於開發Ios app一定要有開發者帳號,否則無法在實機上測試。註冊完開發者帳號後可以進入第二個步驟。

step2.製作certificate
螢幕快照 2014-02-09 上午9.11.48

點選Mac>應用程式->工具程式(資料夾)->鑰匙圈存取
進去之後上方bar的鑰匙圈存取->憑證輔助程式->從憑證授權要求憑證
之後輸入電子郵件,一般名稱與下方選儲存至硬碟。
之後儲存至桌面push.certSigningRequest
#注意:上面的檔名為你在titanium的project name,例如你的Titanium的id可能是com.companyname.push

螢幕快照 2014-02-09 上午9.20.52
之後下方點鑰匙,會發現剛剛已經儲存的push.certSigningRequest
點選右鍵並輸出成.p12檔至桌面

此時你應該有兩個檔案push.certSigningRequest與push.p12

ste3.設定AppleId
螢幕快照 2014-02-09 上午9.28.42
至https://developer.apple.com/account/overview.action點選Certificates
進去之後點右方App Ids,會進入下方畫面

螢幕快照 2014-02-09 上午9.26.01
接著name就是剛剛的push(記得改成你的),bundle id就是你在titanium的id(kuo.companyname.push),最後下方記得點選push notification,之後點continue後submit。

step4.設定push notification螢幕快照 2014-02-09 上午9.42.26
開完App Id後點選它,會發現push notifications還在configurable的狀態,點下方edit進去設定。
進去之後會看到下方的畫面。
螢幕快照 2014-02-09 上午9.44.36
Development是你在開發時用的,在你要上架至app store之前需要重新設定一次,步驟跟development一樣。
這裡點development的create certificate,接著會至下方頁面。
螢幕快照 2014-02-09 上午9.46.54
點選continue就可以了,或是你也可以看一下上方的敘述,那是在教你如何產生CSR,不過我們在稍早的步驟都已經做完了,這裡就略過不看了。
螢幕快照 2014-02-09 上午9.49.29
接著把剛剛的push.certSigningRequest上傳上去就可以了。上傳完會進去下方畫面。
螢幕快照 2014-02-09 上午9.52.02
接下來把上方的檔案下載至桌面aps_development.cer,之後點開匯入你的鑰匙。這時可以回去剛剛的鑰匙圈存取,
會發現多了一個憑證。

此時你桌面應該有三個檔案push.certSigningRequest,push.p12,aps_development.cer。

step4.製作.pem檔案
打開終端機然後cd到桌面

cd ~/Desktop/

將.cer檔轉成.pem檔案

openssl x509 -in aps_development.cer -inform der -out pushCert.pem

將.p12轉成.pem檔,輸入密碼後必須再輸入passphrase,直接以push當passphrase就可以了,這在之後發push的後端server會用到,記得pass phrase要改成你自己的。

openssl pkcs12 -nocerts -out pushKey.pem -in push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

接著將剛剛產生的pushCert.pem與pushKey.pem轉成ck.pem

cat pushCert.pem pushKey.pem > ck.pem

step5.測試appale的Apns

$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.

如果看到上方訊息就表示可以連到Apple的APNS server。

接著使用private key測試

openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert pushCert.pem -key pushKey.pem

如果成功了,你應該要可以看到一大堆輸出訊息。並且可以輸入一些文字,然後按enter之後就會中斷連線了。

step6.設定你的provisioning profile
螢幕快照 2014-02-09 上午10.11.50
之後一路設定下去就可以了。再選device的時候它會要求你輸入你iphone的UDID,查一下並輸入就可以了。
螢幕快照 2014-02-09 上午10.14.40

接下來把它下載下來,並且點開。

step7.設定titainium
進入titanium,你的專案應該要寫好了,然後點專案右鍵的run configuration,再點ios device。
select device:你的iphone手機
select development certificate:剛剛建立的certificates下載下來點右鍵匯入鑰匙,所以這裡應該要可以看到。
select provisioning profile:剛剛已經下載並點開了,所以這應該要可以看到你剛剛建立的。

完成以上步驟應該已經可以看到app在自己手機上run起來了。

step8.撰寫後端功能。
後端程式下載:https://github.com/MR-SC/documents/tree/master/scripts/php/ios-push
ck.pem要用你自己的,另外裡面程式碼也要修改,passphrase要改成你的,另外deviceToken是收集使用者手機的device token。以上完成應該可以成功發送push至手機上了。

以上僅供參考。

參考文章:
1.http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
2.http://www.ralfebert.de/archive/ios/tutorial_iosdev/run_app/
3.https://developer.apple.com/library/ios/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG41
4.http://docs.appcelerator.com/titanium/latest/#!/guide/Deploying_to_iOS_devices