用過環信的知道,環信在APP掛在後臺超過3分鐘或者被kill之後,是不會收到消息了的,如果想要能繼續接受消息,需要註冊apns離線推送。在調試期間遇到一些棘手問題,現總結如下:
先附上環信社區配置apns的問題詳解:http://www.imgeek.org/article/825307548
1、添加推送證書
首先我們需要從開發者網站生成推送證書,開發環境和生產環境,兩個,安裝好之後鑰匙串中應該可以看到,這裏不多說證書製作的問題,環信文檔裏面有。
如果你之前就有保存,確保他們是正確的證書,也就是與你的APP bundle id 對應。
2、獲取不到deviceToken
按照集成文檔,代碼裏面注意填寫apnsCertName,並註冊apns推送,這時候問題來了,deviceToken拿不到!
排查:
看是否你的APP裏接入了多個需要獲取deviceToken的SDK,比如極光推送和環信,如果你是用兩個分類來處理極光和環信的話(AppDelegate+JPush,AppDelegate+EaseMob),這兩個分類裏都有實現didRegisterForRemoteNotificationsWithDeviceToken此方法,那可能有一個方法不走,被後執行的那個覆蓋掉了,就會出現一個分類裏面拿不到deviceToken的情況。
解決:
在能夠拿到的那個分類裏面,綁定相應的deviceToken。我這裏是在極光的分類裏,獲取deviceToken的方法下,同時調用極光和環信的綁定deviceToken方法!
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"deviceToken = %@",deviceToken);
[JPUSHService registerDeviceToken:deviceToken];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[EMClient sharedClient] bindDeviceToken:deviceToken];
});
}
(環信3.0和之前版本的方法不一樣,注意)
只要綁定了deviceToken,在環信後臺即可看到對應賬號後面顯示了證書名稱。
3、綁定了token,收不到通知
綁定了token,環信後臺也看到賬號後面顯示了證書名稱,在殺掉APP後還是收不到消息通知。
1)首先確定你的證書是否與你的APP對應(從鑰匙串導出p12證書的時候有沒有點錯證書,代碼中寫的證書名與環信後臺的證書名是否對應);
2)如果對應,可以把證書以及證書密碼,bundle id發給環信,讓他們幫助看看該證書是否可收到通知(其實還是確定你的證書有沒有添加對,如果環信那邊測試也不能收到,您還是重新生成一次證書吧);
3)如果確定證書是對的,再看看targets->capabilities下的兩個開關有沒有打開,如果沒打開,打開再試試。(我就是這一步沒操作導致收不到,環信說Xcode8要注意打開,可我用的Xcode7也要打開!)
好了,暫時遇到這麼些問題,離線推送配置也是挺煩的。。。