極光推送開(kāi)發(fā)環(huán)境可以收到,生產(chǎn)環(huán)境收不到推送
首先闡述一下我遇到的問(wèn)題
我們項(xiàng)目連通了極光推送,以前寫過(guò)的項(xiàng)目也是這樣 在開(kāi)發(fā)環(huán)境下測(cè)試 好使了? 但是打包ADHoc時(shí)候 就不好使了,當(dāng)時(shí)也沒(méi)在意? 因?yàn)榫W(wǎng)上好多人說(shuō) 只要測(cè)試好使了 證書顯示配置成功了(綠燈)? 那就沒(méi)問(wèn)題了
so 上線 然后上線以后 發(fā)現(xiàn)推送功能完全不好使!這就尷尬了 趕緊下架
因?yàn)槲覀冺?xiàng)目使用的是別名推送
使用極光網(wǎng)站推送時(shí)候 我使用了廣播,別名推送,regID推送,結(jié)果 都能收到(開(kāi)發(fā)環(huán)境)
然后我在生產(chǎn)環(huán)境 再次發(fā)送 廣播,別名,regID
結(jié)果 很顯然 別名收不到 這就糾結(jié)了 開(kāi)始查看問(wèn)題吧
經(jīng)過(guò)兩天的爬坑,終于找到了問(wèn)題所在? 也正在積極解決
在這里再次感謝極光官方兩位大牛,如果沒(méi)有你們的幫忙 我想我還會(huì)糾結(jié)好久Lris12Helperhaps
好了 廢話少說(shuō) 闡述問(wèn)題跟代碼
————————我是分割線———————————
初次發(fā)現(xiàn)這個(gè)問(wèn)題的時(shí)候 首先排查的就是證書配置
這里再次建議大家好好仔細(xì)的看看開(kāi)發(fā)文檔,因?yàn)楹芏噱e(cuò)誤都是細(xì)節(jié)處不注意造成的,
https://docs.jiguang.cn/jpush/client/iOS/ios_sdk/
附上開(kāi)發(fā)文檔地址。
因?yàn)檫@個(gè)項(xiàng)目是接手別人已經(jīng)做得差不多的 我就負(fù)責(zé)收尾? 所以 證書這方面我會(huì)優(yōu)先查看 是否錯(cuò)誤,
在
developer.apple.com 中 我已經(jīng)看到

很明顯? 開(kāi)發(fā)環(huán)境的證書跟生產(chǎn)環(huán)境的證書 都已經(jīng)配置完成,
那么證書是沒(méi)有問(wèn)題的 下面我們看看極光官網(wǎng)的配置

也是已驗(yàn)證,
這就奇怪了? 到這 我表示 可能是代碼出錯(cuò)了 好吧 我們來(lái)看代碼。

別名設(shè)置 相信在官方文檔中大家都明白怎么寫
反復(fù)查看文檔? 我發(fā)現(xiàn)并沒(méi)有任何問(wèn)題這么寫。
經(jīng)過(guò)跟? Lris12 大神的交流
覺(jué)得很可能是因?yàn)榫W(wǎng)絡(luò)原因 在注冊(cè)極光還沒(méi)有返回成功的時(shí)候 就綁定別名 導(dǎo)致 regID跟別名沒(méi)有綁定成功
解決方法:添加5個(gè)監(jiān)聽(tīng),在監(jiān)聽(tīng)到extern NSString * const kJPFNetworkDidLoginNotification; // 登錄成功之后再設(shè)置別名
https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/#jpush-sdk1

Ps。這里強(qiáng)烈建議這么寫,安全第一 安全第一!?。?!
這里附上代碼
```
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidLoginNotification object:nil];
[JPUSHService registerDeviceToken:deviceToken];
}
//通知方法
- (void)networkDidReceiveMessage:(NSNotification *)notification {
[JPUSHService setTags:nil aliasInbackground:[OpenUDID value]];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[JPUSHService setTags:nil alias:[OpenUDID value] fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias)
{
}];
});
//注銷通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:kJPFNetworkDidLoginNotification object:nil];
}
```
然而 問(wèn)題依舊沒(méi)有解決,但是這個(gè)時(shí)候 我們登錄極光官網(wǎng)推送
我在生產(chǎn)環(huán)境 再次發(fā)送 廣播,別名,regID
結(jié)果? 都收到了??!
正當(dāng)我高興的時(shí)候? 發(fā)現(xiàn) api推送依舊收不到!!收不到!!
絕望??!
繼續(xù)排查
按照開(kāi)發(fā)文檔 設(shè)置xcode配置, 嗯 依舊沒(méi)用
這里我重點(diǎn)說(shuō)一下 :iOS9 之后 卸載重裝后會(huì)改變token,所以registrationID會(huì)改變,如果你沒(méi)有用到idfa
如果你的項(xiàng)目使用的是regID推送 那么你要注意 每次更新app 新用戶下載app? 重新下載app等一系列狀況下 regID改變的問(wèn)題
還有如果注冊(cè)成功后 會(huì)返回 設(shè)置成功,有callback為0
這個(gè)也要注意下
好 回歸正題,
這時(shí)候時(shí)間已經(jīng)過(guò)去一天半了, 最后我覺(jué)得 我所有的代碼 配置 證書 環(huán)境 都沒(méi)有問(wèn)題!
再去極光官網(wǎng)看看 到底咋回事
好嗎 這一看 終于發(fā)現(xiàn)了問(wèn)題所在!


大家看沒(méi)看到 這里寫的是 推送平臺(tái)? iOS-dev?
臥槽?。『笈_(tái)給我推送的居然是 開(kāi)發(fā)環(huán)境?。?/p>
果斷找后臺(tái)理論?。?!
Lris大神告訴我
「發(fā)布版本后無(wú)法有效推送」 or 「生產(chǎn)環(huán)境下收不到消息」 按以下步驟排查問(wèn)題: 客戶端 客戶端是否打包證書 檢查當(dāng)前環(huán)境是否正確 設(shè)備里面的手機(jī)應(yīng)用有沒(méi)有 添加/配置 這個(gè)tag/ 別名 服務(wù)端注意改變環(huán)境參數(shù),option的apns_production的值(true:生產(chǎn))(false開(kāi)發(fā))。根據(jù)客戶端環(huán)境改變服務(wù)端推送環(huán)境。環(huán)境要一致才能收到推送。
然后我們后臺(tái)給我發(fā)送了一段代碼 堵住了我的嘴
$platform = 'android,ios' ;
$msg_content = json_encode(array('n_builder_id'=>0, 'n_title'=>$n_title, 'n_content'=>$n_content,'content-available'=>1,'apns_production'=>1));
$obj = new jpush($masterSecret,$appkeys);
我標(biāo)紅的位置 人家已經(jīng)設(shè)置了1 為什么還不好用?
經(jīng)過(guò)Helperhaps 大神的解釋 好吧 我懂了
我們后臺(tái)使用的 過(guò)期的V2 api
特別提示:建議不要在客戶端里寫代碼直接調(diào)用此 API。因?yàn)?Android apk 比較容易破解,別人很容易從客戶端代碼里找出來(lái)調(diào)用 JPush Remote API 所需要的保密信息,從而可以模擬到你的身份來(lái)發(fā)起惡意的推送。
建議的使用方式是:調(diào)用 JPush Remote API 的代碼放在你自己的應(yīng)用服務(wù)器上。你自己的應(yīng)用服務(wù)器對(duì)自己的客戶端提供接口來(lái)推送消息。具體請(qǐng)參考推聊的作法:示例與代碼。
升級(jí)到 v3 Push API:建議開(kāi)發(fā)者升級(jí)到 v3 版本。此版本會(huì)繼續(xù)支持到 2015 年。
至此? 這個(gè)問(wèn)題才算是解決(至少對(duì)前端來(lái)說(shuō))
第一次發(fā)這樣的帖子感覺(jué)有點(diǎn)亂 嗯。。。
下次大家在推送上有問(wèn)題的話。。先看開(kāi)發(fā)文檔走一遍流程 然后看看極光個(gè)人推送 廣播能否收到 然后就可以考慮跟服務(wù)端干一仗了!!
最后祝大家 永無(wú)BUG?。。。。。。。。。。。?!