现象:客户反馈在向用户发放优惠券的时候,用户接受不到相关通知
解决步骤:
1. 检查友盟后台,发现大量用户的全部devicetoken显示为已失效,此时初步怀疑证书过期。
2. 检查推送证书,发现过期时间还有两个多月,可以确定不是证书的问题。但为了确保证书过期时不会异常,我们创建keys的推送证书,这个证书好像是永不过期的,而且只能下载一次。
3. 证书没有过期,但却出现baddevicetoken问题,怀疑是推送地址错误。(将生产环境的devicetoken推送到沙盒环境-gateway.sandbox.push.apple.com,或将开发环境的devicetoken推送到生产环境-gateway.push.apple.com,都会出现baddevicetoekn的问题)
4. 为了确定是推送地址的错误,我简单制作了本地推送程序,使用指定用户下的最新devicetoken向生产环境推送通知,我们的设备准确接收到了这条通知,这也就证明了我们对地址错误的怀疑。(python文件,网络上可以很方便的查到,简单易使用)
5. 经过一番面向百度和面向谷歌的解决BUG,我们否决了关于前端错误的怀疑,并决定向后端小伙伴推送这条BUG。
6. 首先建议后端小伙伴开启指定推送,使用4中的devicetoken指定发现,结果显示推送失败,检查友盟后台,毫无疑问baddevicetoken。此时,可以确定是后端出现的BUG,当然也有可能是友盟API的错误(但这种严重且极其普遍的bug,不应该在一个成熟运行的平台中出现)
7. 经过一番手忙脚乱的调试,问题终于出现了,后台小伙伴在使用友盟sdk时,将productmode设置为了false,导致通知推送到了沙盒环境。问题暴露出来就简单了,将productmode设置为true,重新打包部署,毫无疑问推送准确抵达!
网友评论