1. 推送失败原因
1.1. 设备注册失败
新创建的app会有一分钟左右的数据同步过程,在此期间注册可能返回20错误码,稍后重试即可。其他情况返回20错误码,请检查access id和access key是否正确配置,常见错误是误用secret key或者access key头尾有空格。
1.1.1. 帐号和设备未绑定
对于希望根据帐号进行推送的用户,首先需要将账号与token进行绑定,否则将无法推送成功。
注意:
Android Token长度为40位
iOS Token长度为64位
账号,又称别名,指带有账号登录功能的APP的用户账号,这里不仅仅是QQ或微信,只要是用户的账号都支持,比如手机QQ的账号就是QQ号码,gmail的账号就是邮箱,中国移动的账号就是手机号码。
Android绑定账号在注册时绑定,即:registerPush(context,account)接口,ios通过setAccount设置。
选择帐号推送时,提示token not found,check registration,说明账号没和token关联上,这种情况有两种可能:
(1)账号或别名注销了,不一定是app调用,某些情况下可能会自动触发注销的
(2)该设备注册了别的账号或别名,这样会自动与原来的解绑。(一个设备只能对应一个别名如果当前别名下没有设备了,就not found了)
绑定账号后,可以通过指定别名(账号)下发通知。通常情况下,这个账号最近登陆过的设备都可以收到通知。用户账号退出时,调用registerPush(context,"*")解除当前账号的绑定。
账号(别名)不允许单字符,一个token只能绑定一个账号,多次绑定时,以最后一次为准。
注意:一个帐号(即别名,account)下面最多可以绑定15台设备,当绑定满后,最新绑定的设备会随机顶掉之前绑定的一台设备token。1.1.2. Service被终止
service被终止后,由系统、安全软件和用户操作限定是否能够再次启动。
信鸽SDK通过唯一的service与信鸽后台保持通讯,在android中,service被杀死后在没有被系统/安全软件禁止的条件下是能够自启动的,具体可自行网上搜索“android service onstartcommand START_STICKY”
目前,在某些定制的系统(如MIUI)或被安全软件禁止自启动后,只有用户再次打开APP才能重启信鸽service
信鸽service何时能够启动由系统调度确定
在锁屏触屏、网络切换、安装APP、系统重启等条件,信鸽会主动尝试启动service
1.1.3. iOS证书问题
iOS推送提示failed to load certificate,check your APNS certificate,对应环境的apns证书没提交。 证书做得不对,请参照官方指南进行制作。
推送环境是否选择正确,测试预览请选择开发环境。
推送环境是否选择正确,开发证书对应测试环境,生产证书对应正式环境。
证书有效期判断
查看连接APNS测试证书是否合法
开发环境
生产环境
1.1.4. 消息延时
在Android平台下,推送服务和大多数互联网服务一样,受限于包括网络服务质量、运营商政策或用户需求差异等因素的影响,所以有可能出现延时。另外,如果终端上信鸽service被系统或者安全软件杀死,也会有收不到或延时情况。
在iOS平台下,信鸽负责将消息成功转发给APNS,但APNS是否会成功下发给用户,具体下发多少,折损多少,都受限于包括网络服务质量、运营商政策等因素的影响。
注意:APNS只为离线终端保存一条消息,所以离线终端上线后仅能收到离线期间最新的一条消息。
1.1.5. 排查方法
(1)设备是否正常联网?
(2)accessId、accessKey设置是否与前台注册的一致?
(3)当前APP包名是否与前台注册的一致?如果不一致,请在前台选中“使用多包名”选项。
(4)设备是否注册成功?
(5)前台下发通知时,“时段控制”选项里的时间段是否符合终端设备当前时间?
(6)请检查xml的receiver和service标签是否匹配,强烈建议请直接复制demo的例子再修改。
(7)请检查是否没有加“android.permission.GET_TASKS”权限的问题