iOS端极光推送开发环境收到,生产环境收不到推送

总结起来就是:证书->初始化方法->后台

记录一下这次的问题啊,当时给我吓出一身冷汗啊,感觉如果上线的版本再收不到推送的话,老板得砍死我啊!!!

首先阐述一下我的问题

先来说一下我的项目:定位是餐厅服务员的辅助app,受众面比较少,公司的新项目,一边推广一边开发

项目用的是极光推送,第一次用嘛,有点生疏。费了九牛二毛之力才把生产证书开发证书都弄好了,测试的时候也收到通知推送了,安心地上架了。

然而问题才刚刚开始,办公室偶尔会有同事说收不到头部通知,但是包括我在内的大多数人都说收到通知,这些问题就被认为是特别事件,被当做个人手机原因而不了了解了(后来发现办公室里为什么能收到顶部通知呢?因为都是我给他们装的测试)

陆续有客户反映了,问题也就暴露了,原来所有从App Store下载的都收不到顶部推送,但是能收到自定义推送,我也懵逼了,脑子里不停地遍历可能的原因,证书?后台?

先从证书的原因开始找

总结一下证书怎么找原因:

iOS端极光推送开发环境收到,生产环境收不到推送_第1张图片

PS:在极光的初始文档中,我们都有设置过别名,忘了就得花点时间翻翻代码(或者发所有人,记住别影响到客户),记得,开发环境生产环境都发一下看看

经过排查,我两个环境都能被准确地识别啊,证书没问题,那哪里还有问题呢?博主也上网找了不少的文章去了解

极光的初始设置方法

在AppDelegate.m的initJPush方法中

[JPUSHService setupWithOption:launchOptions appKey:JPushAppKey channel:@"App Store" apsForProduction:versionFlag];
/*
     apsForProduction
     1.3.1版本新增,用于标识当前应用所使用的APNs证书环境。
     0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
     注:此字段的值要与Build Settings的Code Signing配置的证书环境一致。
     */
     

这里其实项目之初就弄好了,但是后来反而忘了更改这个0,建议大家建个字段,在测试和上线两个版本来回切换

iOS端极光推送开发环境收到,生产环境收不到推送_第2张图片

好了,满心期待地发布新版本,再上架,过两天再看看

修正初始化方法后,革命仍不能成功

这就是我开始奔溃的源头,一波三折,损心劳力,又看了一遍网上的文章

极光推送开发环境可以收到,生产环境收不到推送 (爬坑笔记)

这位博主(侵权删)和我遇到一模一样的问题,不过他家的后台是PHP写的,而我家是Java写的后台。通篇看下来,我的矛头直指后台

iOS端极光推送开发环境收到,生产环境收不到推送_第3张图片

问题出来了,原来后台一直给我发的顶部通知都发去了开发环境ios-dev中去了,而我们的目标是ios-product,这里,后台的apns_production字段必须为true

找后台理论后,后台给我发了一段代码

后台也和我一样是一个新人,他的意思是他是根据官方文档做得platform.all()这个方法就是默认给全部机器发送通知

后来经过产品经理的一番调试,发现了,原来platform.all()这个方法,默认发送全部机器,但是,默认的iOS端是生产环境,这就是全部问题的由来.....

记得全局搜索,全部都要改

iOS端极光推送开发环境收到,生产环境收不到推送_第4张图片

PS:这个apns_production置1和0手机端和后台必须保持一致

好了,终于松了好几口气

你可能感兴趣的:(iOS端极光推送开发环境收到,生产环境收不到推送)