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通道的复用等。
Android推送机制的实现原理相关推荐
- Android端消息推送总结:实现原理、心跳保活、遇到的问题等
前言 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些东西偏底层硬件和通信行业, 我对这些一窍不通, 只能说说自己的理解. 为什 ...
- android系统下消息推送机制
一.推送方式简介: 当前随着移动互联网的不断加速,消息推送的功能越来越普遍,不仅仅是应用在邮件推送上了,更多的体现在手机的APP上.当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数 ...
- Android推送原理
推送的本质 App将服务器更新的信息推送给用户,即App获取服务器信息,再推送给用户 Android的推送实现方式 PULL 应用程序开启定时的轮询,不停地向服务器请求数据 缺点: a. 轮询频率过高 ...
- Android推送原理。
Android推送原理. 1.什么是推送? 消息推送最简单的方法就是使用第三方的,比如现在使用比较多的是极光推送,机关推送的技术原理是:移动无线网络长连接 移动互联网络的现状: 因为手机平台本身.电量 ...
- ios消息推送机制原理与实现(转)
今天给无线事业部的同事开发苹果客户端的推送接口.无线事业部就是我们公司专门开发各种终端的app的部门啦! 无线事业部的同事做事还是很体贴的,同时发给了我参考文档地址和需要的开发需要的pl2文件. 提供 ...
- android开发 app消息提醒功能,Android中利用App实现消息推送机制的代码
1.消息推送机制 服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭. 我想到了一句话:don't call me,i will call you! qq今 ...
- Android消息推送机制
1.推送方式基础知识: 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器 上不定时更新的信息一般 ...
- Android推送分析
cpu多核利用能够实现Android推送的吞吐量. 讲明白这点,我们需要了解Android推送的基本原理了.如果实现C(客户端)与server(客户端)实时通讯了.这里有两种思路了: 1.一种是定时 ...
- 移动手机消息推送机制
由于公司要做一个android的消息推送功能,让我进行了一个调研,发现网上没有一个集中说明的地方,自己在网上搜罗了一些资料并且自己总结了一下. 对于消息的提醒方式可以分为四种:固定窗口.弹出窗口.手机 ...
最新文章
- 实例变量的访问及数据封装
- 【每日一算法】什么是二分图?
- Brian Kelly:比特币现金发展基金是大利好,现在正是买入时机
- Linux下基于官方源代码RPM包构建自定义MySQL RPM包
- CVPR 2018 论文解读 | 基于GAN和CNN的图像盲去噪
- 利用js实现popup弹窗
- __stdcall和__cdecl的区别
- Linux 使用root用户登录系统,并查看当前的路径。 查看当前目录下面的所有文件(包括隐藏文件)。 在当前目录下,查看根目录中的目录结构。
- 卡耐基梅隆大学计算机工程录取率,热点:卡内基梅隆大学爆出2020年新生数据,计算机学院录取率堪比藤校...
- 控制物体沿椭圆轨迹运动
- buuctf——(HDCTF2019)Maze
- 神武授权位置服务器,《神武3》X诸葛八卦村 多益网络第二个大型文创项目即将开启...
- Windows客户端开发--获取系统mac地址(使用WMI)
- 单词数 HDU - 2072 纯字典树个人理解
- 母爱成就新科诺贝尔奖得主马里奥#183;卡佩奇
- 似然函数、最大似然估计简单理解
- Android---RecyclerView网络请求图片加载
- google地图测距原码
- JAVA分布式医疗云平台系统开发实战第一节 open-his系统介绍
- vs code中使用vscode-fileheader