推送常见问题
为什么成功设备数小于目标设备数?
「目标设备数」是指符合本次推送查询条件的有效设备数量,「成功设备数」是指这次推送成功到达的设备数量。没有到达设备一般有以下几种情况:
- Android 设备中的应用被杀掉,在网络中处于离线状态。对于这种情况,稍等一段时间待设备上线后,成功设备数就会逐渐增加。同时推荐集成 混合推送 来提升推送到达率。
- Android 用户删掉或重装应用生成了新的设备数据 ,之前的无效数据被包含到了「目标设备数」中。
- iOS 用户删掉或重装了应用,之前的无效数据被包含到了「目标设备数」中,这些数量就是 invalidTokens 数量。
为什么只能给三个月内活跃过的设备发消息?能否发全量设备?
我们只允许开发者给 _Installation 表中 updatedAt 值为最近三个月以内的设备推送消息。原因如下:
- 三个月没有活跃过的设备,用户打开推送的概率已经非常小了,我们将这些不活跃的设备视为无效设备。
- 成本原因。全量推送需要处理的无效设备数量会成倍增长,因而会消耗大量云端资源,其中一个能被用户感知到的影响就是推送时间,目标设备数成倍增长也意味着单次全量推送的时间也成倍增长。
基于以上考虑,我们默认只能向三个月以内活跃过的设备发消息。如果您确实需要给全量设备发消息,可以联系我们升级为企业版服务,我们将为您的应用创建独立集群来提供推送服务。
为什么推送记录的目标设备数为 0?
在控制台的推送记录中,「目标设备数」是指符合本次推送查询条件的有效设备数量。该值为 0 时请检查推送查询条件及目标设备是否有 效。
为什么推送记录的内容为空?
在控制台的推送记录中,当针对不同目标设备类型设置了不同消息内容时,「内容」一栏会显示为空,需要点击消息的「ID」打开推送详情来查看具体的内容。
推送的到达率如何
关于到达率这个概念,业界并没有统一的标准。我们测试过,在线用户消息的到达率基本达到 100%。我们的 SDK 做了心跳和重连等功能,尽量维持对推送服务器的长连接存活,提升消息到达用户手机的实时性和可靠性。
使用 iOS 的 Token Authentication 证书推送是否区分测试环境和生产环境?
使用 Token Authentication 也是区分生产和测试环境的,是使用 prod 参数用来区分。同一个 key 可以给测试环境发消息,也能给正式环境发消息。
但是同一个设备的 deviceToken 只能成功发送一个环境。要么是正式环境,要么是测试环境。现象是给一个 deviceToken 推送,如果 dev 成功了,prod 就会报 invalid Tokens,不会在两个环境同时发送成功。
有一些 iOS 设备收不到推送,到控制台查看推送记录,发现 invalidTokens 的数量大于 0,是怎么回事?
invalidTokens 的数量由以下两部分组成:
- 选择的设备与选择的证书不匹配时,会增加 invalidTokens 的数量,例如使用开发证书给生产证书的设备推送。请检查 APNS 证书是否过期,并检查是否使用了正确的证书类型。
- 目标设备移除或重装了对应的 App。
- 保存 DeviceToken 时没有上传 team ID 也会报错 invalidTokens。
- 使用 Token Authentication 的方式在控制台上传证书时,TeamID 或者 Topics 输入错误(Topics 是 App 的 Bundle ID)也会报错 invalidTokens。
Android 消息接收能不能自定义 Receiver 不弹出通知。
可以。请参考 消息推送开发指南。
如果要自定义 receiver,必须在消息的 data 里带上自定义的 action。客户端在接收到消息后,将广播 action 为您定义的值的 intent 事件,您的 receiver 里也必须带上 intent-filter 来捕获该 action 值的 intent 事件。