Android—消息推送机制

知识点:

  • 长连接与短连接
  • 端内与端外推送
  • 通知与透传消息
  • 服务保活(心跳机制)

长连接和短连接

消息推送需要客户端与服务端进行连接,因此分为两种方式

  • 长连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方主动断开连接,此过程称为一次完整的长连接。HTTP 1.1相对于1.0最重要的新特性就是引入了长连接。比如现在的即时通讯,基于XMPP、MQTT协议的消息推送。

  • 短连接,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。注:短连接也是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议的无连接。实现的过程是android开机启动服务,使用HTTP轮循方式,定时访问服务器,服务器json形式返回数据,客户端再解析数据,把内容显示通知栏栏。

端内与端外推送

端指的是客户端,当App的推送服务在运行的时候,这时的推送称为端内推送。当App推送服务没有运行,或者被系统干掉的时候,就需要进行端外推送。

端内推送一般是走App自己实现的一套推送系统:推送服务器是自己的,客户端维护一条长连接连到自己的推送服务器,不依赖任何第三方的推送系统,长连接与短连接就是端内推送的实现方式。

端外推送,在iOS上只要使用APNS就行了,在Android上,跟APNS对应的服务是谷歌的GCM (Google Cloud Messaging),但是谷歌的网络我们用不了,所以我们必须依赖第三方的推送平台

第三方推送,Android手机有非常多的厂商,各厂商推送没有统一的问题,导致Android消息推送难以同IOS一样。

我们可以到各厂商开发者平台注册应用,然后进行集成,开启对应推送功能获取对应的key和secret,也可以采用个推,极光推送,BAT大厂推送等,但是要钱。

通知与透传消息

  • 透传消息是指第三方推送消息给客户端SDK,直接把消息通过回调方法发送给应用,不做任何处理,应用可以自己选择如何展示,在通知栏或者在应用右上角显示红点等方式。
  • 通知消息是指在设备接收到消息之后,直接弹出标准安卓通知栏通知

如果自己没有实现端内推送,也可以全部都通过第三方推送来实现,不过应该采用透传的方式。

Android端实现消息推送的几种方式

  1. 轮询:客户端定时向服务器请求数据。伪推送。缺点:费电,费流量。

  2. 拦截短信消息。服务器需要向客户端发通知时,发送一条短信,客户端收到特定短信之后,先获取信息,然后拦截短信。伪推送。缺点:贵而且短信可能被安全软件拦截

  3. 持久连接(Push)方式:客户端和服务器之间建立长久连接。真正的推送。

    • Google的C2DM(Cloudto Device Messaging)。需要科学上网,国内大多数用户无法使用。

    • XMPP。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议。androidpn一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。

    • MQTT。MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。

关于服务保活,为什么长连接还需要保活,就是因为安卓8.0后Service后台服务随时可能被干掉,还有TCP在一段时间内没有消息传递就会断开连接等等,就不在此展开。

关于MQTT知识:

https://www.runoob.com/w3cnote/mqtt-intro.html

 

 

 

 


 

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...