【友盟+】开发者社区

【持续更新中】关于"消息推送"的误解

友盟PUSH 发表于 2017-4-1 10:46:17 |

友盟PUSH
友盟PUSH 发表于 2017-2-7 18:29:59 | 显示全部楼层 |阅读模式
结合产品运营过程中,开发者常见的一些问题,持续更新中。

Q: 消息“送达率”是100%的,如果做不到100%,那么服务就是有问题。
A: 其实不是的,即使是成功率非常高的短信(SMS),送达率也做不到100%,总有关机的用户吧?总有废弃的号码吧?消息推送的技术原理是要依赖于稳定的长连接通道,受网络、后台Service、系统以及厂商ROM等多重限制,很难做到100%。有经验的开发者伙伴一定知道,App的送达率其实是和App自身的日活正相关的,可以想想App自身是不可能有很高的日活用户比例(微信这类超高频App除外),所以App的送达率也是一样的道理。关于送达率的解释,请参考这个帖子: “谈谈消息推送的送达率”

Q: 我在服务器端发送了10W条消息,最终统计到的收到数是4W,那么送达率就是40%了?
A: 不是的,这里其实还是要看看送达率的概念,参照 “谈谈消息推送的送达率”,这里一个核心问题就是分母怎么定义。一般来说,开发者发送到友盟的设备,友盟服务器还要做有效性判定(比如device token是非法的,token发生了变化,旧token已经失效等),真正发送的对象是链接里面提到的“有效数/接收数”,分母要按照“接收数/有效数”来计算。

Q: 我手头两个机器测试,发现有1部手机总是收不到消息,那么送达率只有50%?
A: 样本太少了,任何XX率的计算,肯定要有一个非常大的样本集合。由于国内Android机型的碎片化现象,不同厂商上推送服务的表现可能区别会很大,经常会出现推送服务在某些机型上工作的比较正常,有某些机型表现不太好的现象,友盟+Push SDK要做的就是尽可能去适配各种机型,保证在大部分情况下均可以正常work。如果要评估送达率,最好是能灰度发布一批线上设备,针对这批灰度的量做一下实际测试,这样得到的结论会准确一些。

Q: 在三星手机上App退到后他是能收到消息的,但是在小米手机上App退到后台就收不到消息了,是不是push sdk有问题?
A: 不是的,这种情况下一般是用了小米系统的“一键清理”功能,把App进程清理了。MIUI上对推送服务做了限制,如果App被杀死了,是不允许收到消息的。这个是系统的限制,不是Push SDK的问题。常见特殊机型整理见这里


Q: 集成了友盟推送,测试了强杀App,断网恢复网络,发现消息有的时候收不到,是不是Push SDK有问题?
A: 不一定是Push SDK的问题,如上个问题所述,有的时候是系统或者厂商ROM自身会做一些限制,比如App被强杀掉,对应的push service也会被清理掉,有的时候是push SDK的一些策略,比如考虑到省电的因素,长连接的心跳探测不一定非常频繁,导致断网重连不一定能及时感知到。这里也建议开发者测试的时候,尽量先保证SDK能在正常情况下工作,之后再去测试像"强杀、一键清理、网络切换、开机重启"之类的测试用例,不同机型表现都不太一样,大家可以在我们文档或者论坛上多搜搜已归档的问题或者解决方案。


Q: 只要集成了友盟推送,在任何情况下均可以收到消息。
A: 不是的,如前面问题所述,推送是有送达率的概念的,以及在客户端上,系统、网络等多方面的影响因素均会影响到消息的成功接收。

Q: 我的设备是联网了,那就表示“设备在线”了,应该能收到推送消息吧?

A: 不是的,“设备长连接”在线是消息能顺利下发的前提,“设备长连接”在线的含义是: 1. 设备联网;2. 设备上的Push Service存在; 3.Push Service与服务器端已经建立起长连接通道。有了这3点保障,才算是“设备长连接在线”。设备联网只是其中一个必要条件。

Q: 服务器端调用推送API显示成功了,客户端也会同步收到消息。
A: 参考这个帖子: “调用服务器端API接口返回成功,为什么客户端没收到消息?”

Q: iOS推送和Android推送原理是一样的。A: 本质上,技术原理是一样的,都要用到长连接技术。实际在实现上,Android是友盟自建推送系统,iOS用的是苹果官方的APNs(Apple Push Notification Service)系统。

Q: Android平台的推送提供“收到”、“打开”和“忽略”数字,iOS平台也会提供。
A: 不是的,接上一个问题,因为苹果使用的是APNs推送,苹果只开放“打开”这个接口,所以iOS平台我们提供 “推送到APNs数”和“打开数”,iOS平台目前是统计不到消息送达的。


Q: Android推送平台,推送完消息后,过了3个小时设备才收到,这延迟太大了。。。
A: 不是的,目前系统能做到,在“设备在线(设备联网&长链接PushService存在&与服务器端建立了长连接通道)”的情况下,即发即到。 如果出现长时间的延迟,可能发消息的瞬间,设备的长连接Service不存在,或者存在的话,可能没有和服务器端建立通信连接,后来设备在线了,之前保存的离线消息又下发下去了。可以参照“设备状态离线排查”

Q: 调用服务器端API接口成功,但是实际上设备没收到消息,是不是友盟推送服务出问题了呢, 是延迟吗?A: 不是的,请参考“API返回接口成功,但是设备端没有收到消息原因排查”


Q: Android推送连续发送了好几条,发现客户端只收到了一条,是不是消息有丢失呢?
A: 不是的,我们在客户端做了体验优化,如果使用默认通知栏样式,同时送达多条消息的时候,默认是只展示最后一条通知。如果想要展示多条消息,请在SDK集成文档中找一下对应的设置方法。

Q: 单播能收到消息,广播收不到消息,是服务出问题了吗?
A: 不是的,可以参考这个帖子排查一下。




(未完待续)
欢迎关注友盟消息推送官方微博: http://weibo.com/umengpush
















上一篇:安卓程序集成推送崩溃
下一篇:onFailure s = 503.1 s1 = req data null


小小小小
小小小小 发表于 2017-2-15 11:31:36 | 显示全部楼层
收藏。。。。。。。。。。。。。。。。。。。。。。。。。。



嗨皮的小猴
嗨皮的小猴 发表于 2017-3-31 11:15:27 | 显示全部楼层
我有一个问题,APP全部杀死,为什么新浪微博、今日头条这些大厂的可以收到,而我们家的却要打开APP才可以收到?基于“长链保护机制”不是都可以收到吗?

友盟PUSH
友盟PUSH 发表于 2017-4-1 10:46:17 | 显示全部楼层
嗨皮的小猴 发表于 2017-3-31 11:15
我有一个问题,APP全部杀死,为什么新浪微博、今日头条这些大厂的可以收到,而我们家的却要打开APP才可以收 ...

一些大厂会与系统厂商谈加入系统白名单。
您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

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

关注我们

新浪微博
微信

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

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