網上關於ios消息推送機制(APNS)的實現、原理介紹很多,但都零零散散。
昨天經過自己的多番嘗試,終於成功實現了推送過程。
在此,貼上自己整理的印象筆記內容,包括自己實現過程中受益的內容鏈接,和遇到點呃問題及解決方法。
php下的推送實現參見另一篇博文:【正在撰寫中】
1.APNS原理、配置開發者賬戶以開啟APNS服務、獲取發送消息的認證證書的實現。(文章末尾的鏈接質量低劣,不建議閱讀)
2.手機端獲取token的代碼實例下載【在此之前,需要參照上文步驟,激活appid的apns功能】
實現過程中,屢屢遇到Error:
Error: Error Domain=NSCocoaErrorDomain Code=3000 UserInfo=0x1179f0 "未找到應用程序的“aps-environment”的權利字符串"
原因是工程中的profile不正確。
解決辦法:
確認你在apple dev portal裡面把相應appid做成類似com.company.appname這樣子(如果是xxxx.*則可能匹配錯誤等),激活pans功能後,再revoke這個profile,並下載安裝到手機和xcode裡面去(這裡要注意,一定要先把push的功能在configure裡面配置好了然後再download這個profile,更新手機和Xcode,如果你記不清楚了到底是先download還是先configure的,那麼一個最保險的辦法就是先configure好了,然後到profile那裡點擊modify,把profile改成一個新的名字,把這個新的profile安裝到手機和Xcode裡面,這樣就沒有問題了)
筆者在這個問題上花了大半天時間,根據後來成功實現後的總結,原因在於沒有一個干淨的測試環境。如果你覺得自己按照以上方法執行後,問題依舊,很大的可能性是並沒有完全的依照以上步驟來執行。
3.消息發送端的代碼實例 PushMeBaby:【需要參照上文步驟,在開發機生成鑰匙對,並獲得APNS的證書,置於消息發送的工程中】
記得將制作證書時生成的.cer文件替換到項目中(當然要替換下代碼中.cer的文件名啦~),並替換代碼中的devicetoken為之前手機獲得的token。
筆者的電腦裝的是Mount Lion 10.8.2, 64位機。運行如上程序時,報錯:
The run destination My Mac 64-bit is not valid for Running the scheme 'PushMeBaby'.
解決辦法:
修改項目的PROJECT和TARGET的BUILD SETTING中的architecture為64位,base sdk為10.8,clean後重新運行,則OK。