Android推送机制的实现原理

Android 推送机制实现原理

APP传统获取服务端信息途径:Pull模式–这种模式客户端和服务器端维持的是短连接。当然也存在由服务器端主动向客户端主动发送消息的通信模式,称为Push模式,即为推送–此时需要移动端和服务器端保持一个长连接通道。
也有APP基于Pull模式通过轮询的方式实现类似推送的功能,即客户端启动一个定时器,每隔一段时间向服务器端发起Pull请求,也称伪推送。真是的推送是基于TCP长连接实现的,并通过间隔性发送心跳包来放止NAT超时,同时判断服务器端和客户端是否断开,最终保证通道的畅通。

自己实现推送功能

在Android中想要建立Tcp长连接,就不能使用HttpUrlConnection或者HttpClient等网络请求API,因为他们属于HTTP协议,Java为开发者提供了网络套接字Socket,它封装了很多TCP的操作,对于移动端来说,一个推送的基本框架需要包含:

  • 和服务端建立连接
  • 发送数据给服务器
  • 从服务器接收推送数据的功能
  • 心跳包的实现
    代码中,每个功能会分别封装为独立的线程,然后通过一个管理器统筹连接的建立和管理。

长连接的建立(TCPConnectThread)

长连接的建立主要通过Socket类的connect方法实现的,其中TCP_URL表示地址,TCP_PORT表示端口号,SOCKET_CONNECT_TIMEOUT表示超时时间,它的setKeepAlive表示这次连接是长连接。
实际中,还要考虑连接是否已经建立,是否需要重新建立,手机网络不可用时,需要增加延时重试机制,在建立Socket连接的过程中出现异常,需要重新建立连接等。

数据的发送(TCPSendThread)

长连接建立后,我们需要保存返回的Socket实例–代表长连接的通道,Socket通信发送的是字节数据,通常情况下,一个完整的消息至少包含协议头 + 协议主体内容 + 校验码

数据的接收(TCPReceiveThread)

推送数据的接收和数据的发送流程类似,只不过一个是从DataInputStream中读取数据,一个是写数据

心跳包的实现(TCPHeartBeatThread)

心跳包就是一个遵循某个自定义协议的数据,处理可以使用心跳包实现长连接保活之外,根据具体需求,也可以往心跳包中怎家一个其他信息。在Android中心跳包的间隔性发送可以通过定时器AlarmManager实现,也可通过while循环+Thread.sleep方式实现。
通过四个步骤一个SDK雏形就有了,当然想要形成一个完整的SDK需要考虑推送SDK服务的保活,SDK和服务端通信的安全性保证,SDK耗费的电量和网络流量等性能指标的优化。同一个手机多个APP使用的推送SDK服务和Socket通道的复用等。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值