https://github.com/android-cn/topics/issues/4#issuecomment-223264673
来源:互联网 发布:数据库压力测试工具 编辑:程序博客网 时间:2024/05/16 11:45
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
Android端外推送到底有多烦?
如何对各家的推送平台进行技术选型;
在集成各家推送平台的SDK的时候,应该重点关注哪些问题。
为什么本文只讨论端外推送?
当App在前台运行的时候,这时的推送称为端内推送。端内推送一般是走App自己实现的一套推送系统:推送服务器是自己的,客户端维护一条长连接连到自己的推送服务器,不依赖任何第三方的推送系统。
当App从前台退到后台,在短时间内App未被杀死前,App自己的长连接仍然有效。这时的推送可以仍然走App自己的推送系统。所谓的“Android进程保活”,就是为了尽量延长这段在后台存活的时间。
当App在后台运行足够长的时间后,App进程由于被清理或者其它原因,App自己的长连接断开。这时的推送就称为端外推送了,只能走某个第三方推送平台了。
更快,是因为你交给第三方推送平台的推送消息要跟很多其它家App的消息一起排队。如果某家App突然在短时间内发送大量推送消息给推送平台(推广活动,或者程序bug),那么这个推送平台上的其它App就有可能受到牵连,推送延迟变得很大。这样的情况是很可能会发生的。比如,在某个推送平台的技术交流群里,不定期地就会看到有人在喊:“是不是推送又堵了啊......”
更有保障。大厂通常有专门的队伍维护推送相关的服务,有问题可以快速推进优化。
采用什么协议?XMPP还是MQTT还是自定义二进制协议?是否像微信一样,需要推送二进制数据(比如短语音和缩略图数据)?
如何保证后台长连接不死?涉及到“保活”的问题。
如何做才能真正保证不丢数据?涉及到系统的方方面面,比如消息的确认,客户端和服务器的数据同步,客户端的数据存储的事务保证,后台消息队列如何设计保证不丢数据。如果是IM,离线数据如何处理?
长连接的Keep Alive和连接状态的检测与维护。比如XMPP相当于一个永远解析不完的XML流,使用一个空格作为Keep Alive消息。
长连接的安全性。验证以及加密。
有哪些推送平台可以选择?
小米推送(MiPush)
华为推送(华为Push)
友盟推送(U-Push)
个推
极光推送
阿里云移动推送(Alibaba Cloud Channel Service)
腾讯信鸽推送
百度云推送
我们选的是哪家推送?选择标准是什么?
大手机厂商的推送:小米推送、华为推送。
专业的第三方推送:友盟推送、个推、极光推送
BAT大厂的平台推送:阿里云移动推送、腾讯信鸽推送、百度云推送。
端内使用微爱自己的推送;
端外在小米手机上使用小米推送;
端外在华为手机上使用华为推送;
端外在其它手机上统一使用一种推送,也就是上面推送平台列表中的某一个。具体是哪个就不说了,本文中我们称它为X-Push吧。
我们一直以来都认为对于这类第三方推送平台,“看护功能”是他们最基础的一个功能。我们在整个接入开发的过程中,没有从任何来源得到关于“看护功能”要单独收费的说明。他们官网上的公开价格表压根没有提到这个功能,接入的技术支持QQ群里也没有任何人提到过,官方的开发文档更是无处提及。
我们在整个接入和测试的过程中,以及后来上线之后运行的这段时期内,这个“看护功能”都是一直包含在SDK内的。等用了一段时间之后,却突然被告知这一基础功能要收费,实在让人措手不及。
如果明码标价,我们在最开始选型的时候就会把这一因素考虑进去。但是该平台却在开始的时候故意隐藏可能存在的收费陷阱。
对方称如果被关闭了“看护功能”,那么“消息触达效果”会有明显地降低。我们也能理解“免费+收费”的商业模式,但是通常来讲,这种模式是对于基础功能免费,而对于高级功能收费,很少见到以降低服务质量作为免费条件的。
你是否需要自己的端内推送?
使用通知栏消息还是透传消息?
推送的初始化和推送token的同步
在恰当的时机把推送SDK初始化起来。
初始化之后App会异步地收到一个推送token,那么接下来需要把这个推送token同步到App服务器。
小米推送要求在Application对象的onCreate中执行初始化操作。我们可以猜测一下,在这个初始化操作中小米推送的SDK可能需要在本地为我们修改配置,还可能需要联系小米推送的服务器来申请reg id(即推送token)。这个初始化过程是可能失败的,本地操作可能会受到系统的限制,网络更是可能出错。试想,如果初始化出错了,我们还会收到推送token吗?
假设我们成功收到了推送token(通常在一个BroadcastReceiver中),接下来把推送token发送到我们自己的服务器,这个工作需要我们自己来完成了。我们都知道在移动环境下网络很可能是弱网环境,这次同步如果失败了,那么下次要等到什么机会才能再次进行同步呢?
推送的送达率到底跟什么有关?
http://blog.umeng.com/%E5%B7%A5%E7%A8%8B%E6%8A%80%E6%9C%AF/4541.html
业务类型。比如你的App是个IM,那么可能通用送达率会比较高,因为IM来的消息比较重要,且需要接收的人尽快去阅读处理。而如果你的App只是来推送一些系统消息,那么很多人可能压根不会打开你的App去看,这样通用送达率自然就低。
推送的调用方式。这个和开发有关。比如,你的推送逻辑总给已经卸载了App的用户发送消息,那么对方肯定收不到了,造成通用送达率比较低。这种情况在群发的时候尤其显著。
拥抱变化
https://github.com/android-cn/topics/issues/4#issuecomment-223264673
- https://github.com/android-cn/topics/issues/4#issuecomment-223264673
- https://github.com/havlenapetr/FFMpeg/issues/30
- https://github.com/havlenapetr/android_frameworks_base/issues/2
- https://github.com/havlenapetr/android_frameworks_base/issues
- https://testerhome.com/topics/4695
- ReactNative might be related to https://github.com/facebook/react-native/issues/4968
- 【Github Issues】ffmpeg-android-java Issues
- https://github.com/roman10/android-ffmpeg-tutorial
- https://github.com/Trinea/android-open-project
- https://github.com/Trinea/android-open-project
- https://github.com/Trinea/android-open-project
- https://github.com/Trinea/android-open-project
- https://github.com/hehonghui/android-tech-frontier
- https://github.com/Trinea/android-open-project
- 完美解决android Studio打开报错 https://code.google.com/p/android/issues
- 完美解决android Studio打开报错 https://code.google.com/p/android/issues
- https://github.com/search
- https://github.com/mogutt
- JavaScript面向对象-继承
- 10091
- POJ2777线段树....
- 九月总结——我的丑态(2016.10.9)
- 环形缓冲区
- https://github.com/android-cn/topics/issues/4#issuecomment-223264673
- 优秀程序员必备技能大全
- Android_编码规范
- antlr入门实例——计算器
- web 页面加载速度优化实战-100% 的飞跃提升
- UVa 11374 - Airport Express
- 微信小程序开发官方文档
- linux下c/c++实例之十socket简单应用
- python print 不输出换行符