項目需求:在用戶收到推送的時候能和QQ或者是微信一樣能夠持續的震動和響鈴,至於如何實現這篇文章已經將的很詳細了https://oopsr.github.io/2016/06/20/voip/,所以關於實現這一塊就不再贅述了,主要是說一下這一塊遇到的問題。
問題一:就是VoIP的推送在測試環境下能夠收到推送,一切正常,但是在正式環境下就是收不到推送,證書配置代碼都一樣,但就是收不到。關於這一塊的問題建議從以下幾個方面去排查一下:
1、 移動端有沒有注冊推送,注冊完成后會有一個回調方法,
- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type
在回調方法里能夠獲取到pushToken,這個token是要上傳后台服務器的,后台如果采用的是socket連接的話,會直接那這個token給對應的設備去推。
后台使用的接口 開發接口:gateway.sandbox.push.apple.com:2195 發布接口:gateway.push.apple.com:2195 官網提供的是: 開發接口: api.development.push.apple.com:443 發布接口: api.push.apple.com:443 這兩個接口都能使用一個是Socket連接的方式,一個是采用Http的方式
推薦一個驗證推送的小工具:https://github.com/KnuffApp/Knuff (十分好用)
(驗證是否已經獲取到了:在本地存儲一個文件,將獲取到的token放在里面,然后打ADHoc的包,然后連接Xcode 在沙盒中查看token的值。注:發布環境和開發環境的token是不一樣的)
2、移動端獲取deviceToken的方式是否正確,后台有沒有獲取到。這一塊的原因主要在於token的上傳時機,是在客戶端登錄的時候上傳token還是在客戶端ping的時候上傳token這一塊要區分一下,最好和后台一起聯調看一下數據的上傳情況。
3、檢查VoIP證書是否有效,這個有效包括證書的過期時間,證書與包名是否匹配【這一點上很關鍵,也是很重要的,因為后台不會幫你區分包,只會根據你上傳的PushToken推送到你的設備,很有可能后台這邊的日志記錄已經推送成功了可是客戶端就是收不到,客戶端能怎么辦?很絕望啊!!!!】
4、App是否開啟了通知權限,這個也是一條容易忽略的一點吧,一開始要在AppDelegate里面注冊一下就可以了。然后在設置里查看一下當前的是否開啟,如果因為這個原因收不到推送真是很尷尬。。。。。
5、App在接收VoIP推送的那個回執處
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type
做一些能夠確定是否收到推送的邏輯,比如本地推送,寫入Document沙盒文件(iOS11可見)等,然后查看沙盒中對應的文件是否有數據
6、如果之前后台是VPNS都沒有問題,講道理只需要切換下VoIP證書就行。
最終我的正式環境收到了推送,感謝簡書的:CoderXLL幫忙分析。
相關VoIP的鏈接:做時可參考:
APNS ====VoIP相關 https://www.jianshu.com/p/edbfd8d515de https://www.jianshu.com/p/22ffe3816090 https://stackoverrun.com/cn/q/11836206/%E8%BF%81%E7%A7%BB%E5%88%B0ios-voip%E6%8E%A8%E9%80%81%E9%80%9A%E7%9F%A5 https://www.jianshu.com/p/22ffe3816090 https://www.jianshu.com/p/9afff11dd6af https://www.jianshu.com/p/f3e0e2f0b8e8 https://github.com/oopsr/VoIPPush/issues/4 通知橫幅 https://www.jianshu.com/p/9afff11dd6af // 論壇相關 https://forums.developer.apple.com/message/221601#221601 https://forums.developer.apple.com/message/93885#93885 // 遇到的問題 https://forums.developer.apple.com/message/234613#234613 // voip 開發文檔 https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html 400BadDeviceToken指定的設備令牌是壞的。驗證請求是否包含有效令牌並且令牌與環境匹配. // 驗證推送的軟件 Knuff https://github.com/KnuffApp/Knuff
