關於ios 推送功能的終極解決
剛剛做了一個使用推送功能的應用 遇到了一些問題整的很鬱悶 搞了兩天總算是弄明白了 特此分享給大家
本帖 主要是針對產品發布版本的一些問題 綜合了網上一些資料根據自己實踐寫的 不過測試也可以看看
首先要感謝那些富有分享精神的大牛們所作的貢獻 讓我這個新手可以從零把推送功能整上線。
至於推送功能的原理什麼的我就不說了 網上關於推送的資料很多 不過有很多一部分都寫的不知所以然 不過原理還是可以弄明白的
這裡附上一篇英文文章連結 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
中文翻譯 http://article.ityran.com/archives/194
我第一次就是看的英文原帖 中文翻譯的也很好 不過感覺作者沒有親自試過 我可是實現了哦 。
這裡我說我認為比較關鍵的地方
1產生鑰匙串請求問題 在你做一個新的帶推送的功能的應用的時候最好重建一次鑰匙串請求 省的亂
在你產生鑰匙串請求的時候 那個CRS檔案一定要留著 還有更重要的是你在產生這個鑰匙串請求的時候 在鑰匙串裡邊會出來一對密鑰 這個一定要注意那一對是剛剛出現的
文章裡邊說的匯出那個.p12檔案就是指剛才那對密鑰的私密金鑰的匯出檔案
(這個不知道怎麼把圖貼出來 大家可以參考那兩個文章裡邊的圖)
2 必須唯一的標示符App ID 不能用萬用字元 這個沒商量。不過同一個應用測試和發布可以用同一個標示符。
3 APNS地址
測試地址gateway.sandbox.push.apple.com:2195
發布地址 gateway.push.apple.com:2195
這兩個是有區別的 當然認證也是
4 順序 我就是被這個順序搞的鬱悶了
產生鑰匙串請求 》》下載開發認證和發布認證(最好都一起下了)》》 配置App ID 把development SSL 和 production SSL 都配置好 下載SSL認證 》》 最後下載Provisioning認證
一定要這個順序 密鑰 CRS檔案 必須匹配 在下載發布認證一定先把 發布的SSL認證下好了 否則就會出現推送成功 用戶端收不到問題。
5 真機測試
開發的時候一般我們都是用Xcode直接灌到裝置裡 這個時候development認證是可以推送成功的 但是production認證卻推送不了
不過蘋果給我們提供了Ad Hoc測試方式 它使用的是發布認證 如果你不知道Ad Hoc模式可以搜一下 很簡單的
這裡有一個關鍵的地方 development和production得到的Token的不一樣的
使用Ad Hoc方式裝到裝置上得到的就是production Token 所以你在用Ad Hoc方式測試的要使用production Token
如果使用Ad Hoc方式測試沒問題 這個發布也就沒問題了
還有一個問題就是Token會更新 這個在官方文檔中有提到 就是在一定的時間或者刷機某些不經常出現的情況下 蘋果公司的伺服器可能會更新裝置的Token
這裡你需要的一個機制來解決這個問題
我的解決辦法是更新應用版本 然後定期刪掉伺服器就時間比較久的Token
這樣肯定會造成部分沒有更新使用者收不到推送的問題 不過只要他即時更新就沒問題了 這是一個懶辦法
因為我的應用程式只在程式第一次開啟的時候上傳一次以後就不傳了 這樣可以減少服務端的負荷
不過你是一個推送很頻繁應用那就頻繁擷取頻繁的更新服務端記錄 這個就根據情況來了
簡單的幾點就寫到這裡 可能有些地方描述的不夠清楚 請大家原諒 如果需要協助可聯絡我的新浪微博 @一顆有思想的白菜