如果你剛開始集成、使用JPush iOS SDK智厌,你可能會(huì)遇到各種各樣的問題粟判,下面就羅列幾個(gè)注意事項(xiàng),給大家作為參考:
1峦剔、
從iOS9系統(tǒng)開始档礁,使用通配證書也能成功獲取到Token,但是無法收到推送的通知(APNs)吝沫;
注:
JPush iOS SDK 從2.1.7版本開始呻澜,如果當(dāng)前應(yīng)用不具備推送功能會(huì)打印:PUSH | W - [JPUSHClientController] APNs is not available,please check your provisioning profile and certification
2惨险、
運(yùn)行安裝項(xiàng)目到測(cè)試設(shè)備羹幸,假設(shè)你的Provisioning Profile選擇自動(dòng),如果測(cè)試設(shè)備是iOS9系統(tǒng)辫愉,且本地的Provisioning Profile不含此設(shè)備栅受,仍能正常運(yùn)行安裝到測(cè)試設(shè)備并獲取到Token!其實(shí)你這時(shí)安裝的是通配證書的應(yīng)用,你將無法收到APNs推送屏镊;請(qǐng)參考JPush的教程文檔配置項(xiàng)目證書:XCode的證書配置教程
注:
JPush iOS SDK 從2.1.7版本開始依疼,如果當(dāng)前應(yīng)用不具備推送功能會(huì)打印:PUSH | W - [JPUSHClientController] APNs is not available,please check your provisioning profile and certification
3而芥、
從iOS9系統(tǒng)開始律罢,每次卸載安裝都會(huì)獲取到新的Token。如果你沒有使用傳IDFA的JPush初始化接口棍丐,那JPush會(huì)認(rèn)為你當(dāng)前是一個(gè)新的設(shè)備误辑,RegistrationId會(huì)隨之改變,之前設(shè)置的tag歌逢、alias需要重新設(shè)置巾钉;
4、
從iOS9系統(tǒng)開始秘案,新安裝某個(gè)調(diào)用apns注冊(cè)接口的應(yīng)用睛琳,彈出[“xxx”想給您發(fā)送推送通知]的提示時(shí),無論你是否允許踏烙,應(yīng)用都能獲取到Token师骗;
5、
JPush沒有提供開關(guān)推送的接口讨惩,但是可以調(diào)用apple的注冊(cè)APNs接口和反注冊(cè)APNs接口來設(shè)置是否有通知提醒辟癌!
注:從iOS9.3系統(tǒng)開始,調(diào)用代碼注冊(cè)APNs荐捻,再調(diào)用反注冊(cè)APNs接口黍少,再調(diào)用注冊(cè)APNs接口,需要把應(yīng)用進(jìn)程殺掉处面,重新開啟才能恢復(fù)APNs提示厂置;
6、
JPush iOS SDK從2.1.8版本開始支持https魂角,如集成的SDK 版本低于2.1.8昵济,請(qǐng)到xxx-info.plist里面配置下http,否則無法統(tǒng)計(jì)通知點(diǎn)擊和調(diào)用JPUSHService setBadge:<#(NSInteger)#>來上報(bào)badge野揪,具體配置看文檔:https解決方式
7访忿、
如果你是直接運(yùn)行安裝到測(cè)試設(shè)備(運(yùn)行調(diào)試狀態(tài)),那你的安裝的應(yīng)用的證書環(huán)境只有可能是開發(fā)環(huán)境或者通配的斯稳。向該設(shè)備(RegistrationID)推送開發(fā)環(huán)境的通知海铆,如果能收到(目標(biāo)和成功為:1/1),則說明是當(dāng)前安裝的應(yīng)用是開發(fā)環(huán)境的證書挣惰;如果目標(biāo)和成功為(0/0)卧斟,則可能是通配證書殴边。應(yīng)用證書環(huán)境具體以Code Signing配置為準(zhǔn):
8、
如果你想內(nèi)部測(cè)試生產(chǎn)環(huán)境的推送珍语,請(qǐng)去apple上面為該appid創(chuàng)建一個(gè)AD-Hoc的Provisioning Profile锤岸,下載添加到XCode,Archive項(xiàng)目廊酣,導(dǎo)出ipa文件能耻,把該ipa拖到iTunes赏枚,再同步到測(cè)試設(shè)備亡驰。
導(dǎo)出的時(shí)候下圖標(biāo)注的Profile必須是你所創(chuàng)建的AD-Hoc Profile:
9、
第7饿幅、8點(diǎn)說到安裝應(yīng)用證書環(huán)境的判斷依據(jù)凡辱,那這里再說明下:推送的時(shí)候如何指定iOS通知的推送環(huán)境。
進(jìn)入官方控制臺(tái)的發(fā)送通知頁(yè)面栗恩,可通過如下選項(xiàng)指定iOS通知的推送環(huán)境:
如果你通過api推送,則需要注意options下面的apns_production字段透乾。官網(wǎng)發(fā)送通知的
對(duì)應(yīng)的"apns_production":flase和"apns_production":true(請(qǐng)看:推送api文檔、 java示例代碼)
iOS Push SDK的初始化接口:
+ (void)setupWithOption:(NSDictionary *)launchingOption
appKey:(NSString *)appKey
channel:(NSString *)channel
apsForProduction:(BOOL)isProduction;
注:
項(xiàng)目中配置的證書環(huán)境決定你的app能收到來自哪個(gè)環(huán)境的通知(APNs)磕秤;
初始化接口的isProduction字段需要與你應(yīng)用配置的證書環(huán)境一致乳乌。
即:
如果按照第7點(diǎn)的配置證書,isProduction的值應(yīng)該是false市咆;
如果按照第8點(diǎn)的配置證書汉操,isProduction的值應(yīng)該是true;
如果發(fā)布到App Store蒙兰,磷瘤,isProduction的值應(yīng)該是true。
10搜变、
請(qǐng)不要在初始化應(yīng)用的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
}
里面設(shè)置tag采缚、alias和獲取registrationID ,如果你在這里設(shè)置tag挠他、alias和獲取registrationID扳抽,你將無法獲取到registrationID,設(shè)置tag殖侵、alias會(huì)打铀だ丁:E - [JPUSHService] app not registed, give up set tag:xxx,alias:xxx
建議如下:
注:想了解集成文檔的[五個(gè)監(jiān)聽]請(qǐng)戳我
如不知道該如何添加監(jiān)聽,請(qǐng)參考官方 demo的:RootViewController.m愉耙;
11贮尉、
應(yīng)用前臺(tái)運(yùn)行的時(shí)候收到APNs不會(huì)有提示(橫幅、sound)朴沿,只會(huì)調(diào)用apple提供的APNs獲取接口:獲取 APNs(通知) 推送內(nèi)容猜谚,如果想彈出提示請(qǐng)自己在獲取接口里面寫代碼處理败砂;
12、
后臺(tái)收到普通APNs魏铅,點(diǎn)擊icon進(jìn)入應(yīng)用并不會(huì)觸發(fā)APNs獲取接口昌犹,只有點(diǎn)擊APNs才會(huì)觸發(fā)獲取接口;
13览芳、
從JPush下的發(fā)iOS自定義消息斜姥,只有在前臺(tái)運(yùn)行的時(shí)候才能收到(不會(huì)有apns提示),如果想要獲取由JPush 下發(fā)的自定義消息,請(qǐng)看:獲取自定義消息推送內(nèi)容
注:如果想了解通知和自定義消息的區(qū)別請(qǐng)看:常見問題 的[通知與自定義消息有什么區(qū)別沧竟?]
14铸敏、
建議在AppDelegate.m的applicationWillResignActive方法寫代碼調(diào)整本地的badge顯示和重置JPush服務(wù)器上面Badge值,示例代碼如下:
- (void)applicationWillResignActive:(UIApplication *)application {
[JPUSHService setBadge:0];//重置JPush服務(wù)器上面的badge值悟泵。如果下次服務(wù)端推送badge傳"+1",則會(huì)在你當(dāng)時(shí)JPush服務(wù)器上該設(shè)備的badge值的基礎(chǔ)上+1杈笔;
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//apple自己的接口,變更應(yīng)用本地(icon)的badge值糕非;
}
注:
1)JPush的badge上報(bào)接口可根據(jù)實(shí)際使用場(chǎng)景計(jì)算再調(diào)用接口上報(bào)蒙具;
2)應(yīng)用icon上顯示的badge最好在applicationWillResignActive方法里面設(shè)為最終計(jì)算所得的值。
15朽肥、
如果你之前能正常推送iOS通知禁筏,忽然所有推送記錄的結(jié)果都變成了:0/0。這個(gè)時(shí)候你需要去到JPush控制臺(tái)衡招,進(jìn)入該應(yīng)用的 [應(yīng)用設(shè)置]頁(yè)面篱昔,檢查證書的有效期,如果沒有過期蚁吝,則去到apple賬號(hào)檢查該證書是否還在(以appid+有效期來看)
注:無論是上述何種原因旱爆,你都需要在apple賬號(hào)上下載該bundle id的有效APNs證書,添加到本地窘茁,導(dǎo)出p12文件怀伦,上傳到JPush官網(wǎng)