【友盟+】开发者社区

友盟iOS推送为什么有时会出现生产环境下收不到的情况?

zhaoheng 发表于 2016-5-12 11:04:40 | |阅读模式

zhaoheng
zhaoheng 发表于 2016-5-12 11:04:40 | 显示全部楼层 |阅读模式
在使用友盟iOS推送的时候,有时会出现生产环境下收不到推送的情况,那么这种情况是什么原因导致的呢?针对这种情况,友盟是否提供了可供开发者进行排查的查询工具呢?本篇文章就为大家说明一下这方面的问题。
在说明问题之前,还是得从APNs(Apple Push Notification Service)推送说起,APNs是苹果的官方推送系统,任何第三方的推送都避免不了和APNs打交道,上图:
903ca6f8e9d72883240ff209d233a075_b.png
图中下半部分是从APNs官方文档抓下来的,大概步骤就是Provider(开发者的服务器或者第三方推送平台,如友盟)把要推送的“设备号(device-token)”和“发送内容(payload)”投递到APNs服务器,APNs负责维护设备端与苹果服务器(图中就是APNs)之间的长连接,用于保证消息的顺利下发。 如果Provider成功把“设备号”和“发送内容”投递到APNs后,那么APNs会负责把消息内容发送到设备上,这样通知内容就可以显示在通知栏里面了。那么从这里就可以看到,对于开发者或者第三方平台来讲,实际可控的就是Provider到APNs这个投递环节,如果投递环节成功了,那么理论上APNs是可以把消息顺利下发到设备上的(我们也碰到过APNs虽然投递成功了,但是设备却没有收到消息的case)。 当然作为第三方推送平台来讲,还会有一些业务逻辑,这就是图中左上部分所列出来逻辑,我们详细展开一下:

首先是开发者通过友盟推送平台的的Open API来发消息(当然也可以直接通过Web网站后台来发),友盟平台收到推送指令后,会进行如下几个业务处理流程:
  • 1. 筛选出当次指令所覆盖的设备, 比如是给“所有用户”发,还是给类似“某个版本”、“某个区域”等符合特定筛选条件的用户来发。注意: 在这个过程中,可能有些新设备还没来得及入库,导致当次筛选有可能没有筛选出该条设备(目前我们的实时筛选库用的是阿里云提供的Garuda引擎,支持亿级数据,毫秒级出结果,性能非常强劲,为的是满足我们的发送速度),实时数据的入库,目前是有一定时间的延迟。
  • 2. 筛选出来的设备号,会再经过一层无效设备的清理逻辑。 无效设备是APNs对设备的判定,一般来说,App卸载了,或者卸载重装/系统升级后,导致token发生变化,老的token就失效了。 我们会定期从APNs服务器同步无效设备列表(对应APNs的feedback接口),这些无效设备我们会保存下来,存储到Invalid Token DB。步骤1筛选出来的设备,会经过步骤2的清理,保证本次投递到APNs的设备,尽可能的有效(不是完全有效,因为步骤4投递APNs可能仍会失败)。 注意: 很多开发者反馈收不到消息,大部分都是因为token已经无效了。
  • 3. 经过步骤1,2之后,这些设备将会从APNs-Proxy逐一投递到APNs。
  • 4. 在逐条投递到APNs过程中,苹果有可能会返回失败,那么该device-token就投递失败了。 我们服务器会详尽记录每一条成功与失败的记录,便于后续复盘排查问题。注意: 有些设备收不到消息,就是因为在投递这个环节发生了失败。

经过上面的分析,那么设备收不到消息的几种情况就可以总结出来了:
  • 1. 在筛选环节,可能没有筛选出来。
  • 2. 被判定成无效设备了。
  • 3. APNs投递环节发生了失败。
  • 4. APNs投递成功了,但是最终设备没有收到消息。

前3种情况一般能覆盖绝大部分的case,第4种情况,如果发生了,一般是没有太好的排查手段,只能通过一定的现象去猜测APNs服务器做了什么事情,比如频繁给同一个设备发送消息,APNs可能会判定为攻击。

那么既然前3中情况都可能导致消息收不到,那么友盟能否为开发者提供这样的工具,方便开发者DIY排查问题呢? 当然了,友盟就是为开发者服务的平台,能为开发者提供便捷一直都是我们的追求,和大家说下当前网站提供的排查工具吧,部分功能虽然不可用,但是都已经在紧锣密鼓的开发中了:)

2. 无效设备的判定:  这个功能我们很快就会在网站为大家提供,届时Android平台也会开放出来。
1. 设备没有筛选出来; 3. APNs投递环节发生了失败。目前这部分的日志量非常大,经过长期的技术方案调研,我们已经确定了我们的日志排查系统了,预计在6月份能开放出来给大家使用。

最后提一下,iOS推送任务,只要在友盟后台的报表里面有出现统计数字,那么就证明友盟平台投递到APNs这个环节是没有问题的,当然现阶段如果开发者碰到这样的问题需要我们协助排查的话,需要提供 appkey,msg-id,device-token这几个关键的信息,我们会人肉帮助大家定位问题。

最后,欢迎你使用和关注友盟推送(友盟消息推送|app推送), 有问题也可以在我们的论坛查找经验帖(友盟+论坛_友盟+开发者社区), 或者关注我们的官方微博(友盟推送的微博)获取最新的更新信息。








上一篇:项目引用PushSDK时报错 v2.8.0
下一篇:客户端集成推送后,怎样重置devicetoken

您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

友盟启动初始化报错
版本更新后启动一直报这个错误
微信分享音乐类型失败
近期微信官方对音乐类型的分享增加了白名单限制,会导致不在白名单内的APP分享音乐类型失败 出现这种情
运行报错java.lang.NoClassDefFoundError:有人遇到过吗?
在项目中集成友盟分享功能,只加了微信、qq、微博,都是精简版。按照友盟官方的方法操作的。 签名用的友盟

关注我们

新浪微博
微信

欢迎关注友盟官方微博微信!

在线客服
返回顶部 返回列表