手机推送会遇到存在两种情况:
- app在界面或后台运行(端内)
- app从后台被移除(端外)
端内推送
- 轮询:定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。(适合小型) 【h5的新api web worker单独开一个新的线程很适合用于这个任务】
- 长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。(服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。)
- 长连接(iframe):在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。 (优点:消息即时到达,不发无用请求;管理起来也相对便。 缺点:服务器维护一个长连接会增加开销。)
- 长连接(Websocket):
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。
端外推送
- 可以使用IOS以及Android自带的长连接服务器,分为别APNs(苹果的)以及GCM(安卓的)。这两个服务器主要负责推送系统服务,所以只要手机联网就保持链接—— 但是因为国内无法使用谷歌,所以GCM没法用,手机商也将相应的功能去掉了。
- 第三方平台(友盟协议):app之间共享推送通道
- 小米推送(MiPush)
- 华为推送(华为Push)
- 友盟推送(U-Push)
- 个推
- 极光推送
- 阿里云移动推送(Alibaba Cloud Channel Service)
- 腾讯信鸽推送
- 百度云推送
分类:
- 大手机厂商的推送:小米推送、华为推送。
- 专业的第三方推送:友盟推送、个推、极光推送
- BAT大厂的平台推送:阿里云移动推送、腾讯信鸽推送、百度云推送。
通知栏消息与透传消息的选择
通知栏消息:在被送达用户的设备后,直接以系统通知的形式展示给用户。它不会继续被传递到App。
透传消息:在被送达用户的设备后,还会继续路由到App,通过回调App的某个BroadcastReceiver的形式将消息传递到App内部。然后由App决定如何处理和显示这个消息。
透传消息增加了被系统限制的概率,通知栏消息有更好的送达率(建议尽量采用通知栏提醒的方式推送消息)