总结起来就是:证书->初始化方法->后台
记录一下这次的问题啊,当时给我吓出一身冷汗啊,感觉如果上线的版本再收不到推送的话,老板得砍死我啊!!!
首先阐述一下我的问题
先来说一下我的项目:定位是餐厅服务员的辅助app,受众面比较少,公司的新项目,一边推广一边开发
项目用的是极光推送,第一次用嘛,有点生疏。费了九牛二毛之力才把生产证书
和开发证书
都弄好了,测试的时候也收到通知推送了,安心地上架了。
然而问题才刚刚开始,办公室偶尔会有同事说收不到头部通知,但是包括我在内的大多数人都说收到通知,这些问题就被认为是特别事件,被当做个人手机原因而不了了解了(后来发现办公室里为什么能收到顶部通知呢?因为都是我给他们装的测试)
陆续有客户反映了,问题也就暴露了,原来所有从App Store
下载的都收不到顶部推送
,但是能收到自定义推送
,我也懵逼了,脑子里不停地遍历可能的原因,证书?后台?
先从证书的原因开始找
总结一下证书怎么找原因:
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,建议大家建个字段,在测试和上线两个版本来回切换
好了,满心期待地发布新版本,再上架,过两天再看看
修正初始化方法后,革命仍不能成功
这就是我开始奔溃的源头,一波三折,损心劳力,又看了一遍网上的文章
这位博主(侵权删)和我遇到一模一样的问题,不过他家的后台是PHP写的,而我家是Java写的后台。通篇看下来,我的矛头直指后台
问题出来了,原来后台一直给我发的顶部通知都发去了开发环境ios-dev中去了,而我们的目标是ios-product,这里,后台的apns_production字段必须为true
找后台理论后,后台给我发了一段代码
后台也和我一样是一个新人,他的意思是他是根据官方文档做得platform.all()
这个方法就是默认给全部机器发送通知
后来经过产品经理的一番调试,发现了,原来platform.all()
这个方法,默认发送全部机器,但是,默认的iOS端是生产环境,这就是全部问题的由来.....
记得全局搜索,全部都要改
PS:这个apns_production置1和0手机端和后台必须保持一致
好了,终于松了好几口气
网友评论