iOS JPush + 環(huán)信 推送失敗

前言

這兩天被極光推送折磨慘了!所以特此記錄一下,望遇到同樣問題的童鞋不會重蹈我的覆轍...

問題描述

Not get deviceToken yet. Maybe: your certificate not configured APNs? or current network is not so good so APNs registration failed? or there is no APNs register code? Please refer to JPush docs.

一、先貼上官方處理方法:極光推薦處理流程(來自極光官網(wǎng))

如果出現(xiàn)上述日志,則說明一段時間內(nèi)都無法獲取device token,那么:

1、確認(rèn)你的app配置了apns權(quán)限,如果未配置apns權(quán)限,則應(yīng)該會出現(xiàn)此錯誤提示。

2、確認(rèn)你的app運(yùn)行在ios真機(jī)而非模擬器上,且通知中心中對應(yīng)app的通知權(quán)限沒有完全關(guān)閉(alert/sound/badge至少有一個權(quán)限是打開的)。

3、確認(rèn)你的網(wǎng)絡(luò)狀況,與apple的服務(wù)器的連接是通過tcp的 5223端口連接,確認(rèn)你網(wǎng)絡(luò)的對應(yīng)端口是否可用,可通過下列命令來確認(rèn)這點(diǎn):

telnet 1-courier.push.apple.com 5223

在代碼中可在以下兩個函數(shù)中斷點(diǎn)以確認(rèn)device token的獲取狀態(tài)。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;

如果app運(yùn)行進(jìn)入 didFailToRegisterForRemoteNotificationsWithError 則說明app的APNS權(quán)限問題或者app運(yùn)行在模擬器。

如果app運(yùn)行進(jìn)入 didRegisterForRemoteNotificationsWithDeviceToken 則說明運(yùn)行正常,請確認(rèn)你在此函數(shù)中的代碼中有將token傳遞給jpush的調(diào)用:

[APService registerDeviceToken:deviceToken];

如果以上兩個 registerRemoteNotification 的函數(shù)都未進(jìn)入, 請確認(rèn)你的代碼中有注冊申請apns的函數(shù)調(diào)用:

[APService registerForRemoteNotificationTypes:];

如果上述情況都已確認(rèn)且未進(jìn)入第4步的任意回調(diào)函數(shù),則可以判斷無法獲取token的原因在于設(shè)備與apple的網(wǎng)絡(luò)連通性問題(注:一個設(shè)備只有在未申請過token的情況下才會需要與apple的網(wǎng)絡(luò)交互來獲取token,已經(jīng)獲取過某一環(huán)境token的設(shè)備在無網(wǎng)絡(luò)的情況下也能獲取到對應(yīng)環(huán)境的token(環(huán)境分為 開發(fā)/生產(chǎn))),這種情況下切換網(wǎng)絡(luò)能夠在大部分情況下解決此問題。

二、自己的原因及處理方法

原因

首先我們的項(xiàng)目是兩個人合作完成的,極光這塊是我負(fù)責(zé)的,另一個人負(fù)責(zé)的環(huán)信模塊,然后環(huán)信是二期加的,一期的時候極光是沒問題的,然后加了環(huán)信,也一直沒有測試,擋在統(tǒng)一測試的時候發(fā)現(xiàn)極光推送不管事了,因?yàn)橹虚g換過項(xiàng)目名稱相應(yīng)的極光也換過key和重新傳的證書,所以沒有想過是環(huán)信的問題??。

然后,環(huán)信的注冊推送注冊獲取token的回調(diào)是在AppDelegate的分類寫的,極光推送的是在AppDelegate內(nèi)部寫的,苦的我一遍又一遍的按照官網(wǎng)的來查原因,甚至都換了個極光賬號和新的證書,╮(╯▽╰)╭。

解決方法

將APPDelegate中以下內(nèi)部的代碼復(fù)制到環(huán)信AppDelegate+EaseMob.m中

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;

如下,為改后的AppDelegate+EaseMob.m中的注冊Token的函數(shù)

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    [[EaseMob sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
    
    [APService setTags:nil alias:[OpenUDID value] callbackSelector:nil object:nil];
    [APService registerDeviceToken:deviceToken];
}

三、完事!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,874評論 10 16
  • 版本記錄 前言 前一篇已經(jīng)對ios的SDK進(jìn)行了研究,這一篇則對iOS SDK 常見問題進(jìn)行說明。1. 極光推送集...
    刀客傳奇閱讀 1,330評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,996評論 25 709
  • 前言 我們在實(shí)現(xiàn)推送功能的時候,更需要了解下推送的原理機(jī)制,這樣我們在發(fā)現(xiàn)問題時候才好定位到問題的解決辦法。 推送...
    進(jìn)無盡閱讀 3,985評論 0 5
  • 我只想找一個讓彼此變的更好的人! H小姐是我的大學(xué)舍友,關(guān)系很好。H小姐在大家眼中家境殷實(shí),待人接物大方得體,氣質(zhì)...
    似水年華兔閱讀 2,920評論 1 1

友情鏈接更多精彩內(nèi)容