iOS远程推送出现BadDeviceToken问题或者 部分推送消息设备可收到有部分收不到的奇葩问题
最近在测试项目时出现奇怪的现象,在配置的测试host上都可以及时收到推送消息,但在正式host环境下出现部分推送消息收不到的现象,并且友盟后台显示BadDeviceToken,对接了这么多年(大姑娘上花轿)—— 头一回。
友盟控制台BadDeviceToken查服务后台日志反馈都是SUCCESS让我们移动端开发人员很无奈,在纠结下测试了无数遍得出的结论是:肯定是后台配置的问题。
参考了友盟的关于推送消息收不到排查步骤文档更加确定了就是服务端环境配置的问题
问题原因
服务端发送PUSH的HOST配置的有问题
DEBUG包苹果认定的都是测试环境,都往apple测试环境发送推送,所以DEBUG包都可以收到推送;但是苹果认为RELEASE包/AppStore包应该走的是正式环境,但是服务端环境配置错误(production_mode)还往测试环境发PUSH,而设备注册的devicetoken都是正式环境的,所以苹果那边不识别这个deviceToken,所以就是BadDeviceToken无效的。
再次强调iOS是严格区分生产和开发环境的,device_token在不同环境下是不一样的,需要开发者自己确定使用的环境,到具体的环境下去发送消息,后台服务端也需要根据当前应用环境配置production_mode到正确的模式
production_mode:
true为正式消息(对应RELEASE包)
false是测试消息(对应DEBUG包)
推送成功或者是失败苹果服务器会给我们服务器回调,成功的回调码是200,失败的对应一个列表,上面有具体的说明是什么原因,如下所示
推送失败回调说明
网友评论