转载请注明链接:https://blog.youkuaiyun.com/feather_wch/article/details/81605356
推送方案
修改版本:2018/8/13-1(23:25)
1、推送方案有哪些?
- 轮询
- 长连接
- SMS通知
- XMPP/MQTT
2、长连接的方案
- 目前最佳方案
- 客户端主动和服务器建立TCP长连接
- 客户端定期向服务端发送心跳包
- 有消息时,服务端会通过该TCP连接去通知客户端
3、NAT是什么?
- IPv4地址不足或者想通过无线路由器上网,设备就会处于一个NAT设备的后面。
- NAT设备会在IP封包通过设备时修改源/目的IP地址.
- 家用路由器使用的是网络地址端口转换(NAPT), 它不仅改IP, 还修改TCP和UDP协议的端口号, 这样就能让内网中的设备共用同一个外网IP.
4、NAT超时
- 内网IP和外网IP之间的映射因为某些原因被NAT设备所淘汰,从而导致外部设备无法继续和 内网的设备通信(只能找到路由器的外网IP,却已经不知道该和哪个内网设备通信)。
- 国内移动无线网络运营商在一段时间内没有数据通讯后, 会淘汰NAT表中的对应项, 造成链路中断。
5、长连接为什么要发送心跳包
- TCP本身是长连接的,即使过去几个小时也依旧可以通信。
- 心跳包是为了解决NAT超时问题。
保活技术
1、利用系统广播拉活(某些5.0以下机型上有用)
2、利用 JobScheduler 机制拉活,只在5.0及5.1手机上有用。
3、利用闹钟广播拉活,在4.4及以下部分手机上有效
4、采用aidl双进程守护互相监听,一个被杀后立即拉活,在5.0以下绝大部分手机上有效
5、锁屏单像素Activity
结果
1、通过1000条数据涵盖了Android5.0-Android8.0,小米,华为,三星,oppo/vivo,金立等各种机型的测试结果。
- Android 6.0以下大部分机型是有效的。
- Android 7.0/8.0 绝大部分机型都是无效的,且后台进程无法活过20分钟。
- oppo/vivo这两家厂商进程保活最困难,小米和三星比较宽松。其他的机型居中。
- 除了厂商加入白名单,没有其他真正可行的办法。
- 这些办法只能是一种优化。