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推送机制的实现原理相关推荐

  1. Android端消息推送总结:实现原理、心跳保活、遇到的问题等

    前言 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些东西偏底层硬件和通信行业, 我对这些一窍不通, 只能说说自己的理解. 为什 ...

  2. android系统下消息推送机制

    一.推送方式简介: 当前随着移动互联网的不断加速,消息推送的功能越来越普遍,不仅仅是应用在邮件推送上了,更多的体现在手机的APP上.当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数 ...

  3. Android推送原理

    推送的本质 App将服务器更新的信息推送给用户,即App获取服务器信息,再推送给用户 Android的推送实现方式 PULL 应用程序开启定时的轮询,不停地向服务器请求数据 缺点: a. 轮询频率过高 ...

  4. Android推送原理。

    Android推送原理. 1.什么是推送? 消息推送最简单的方法就是使用第三方的,比如现在使用比较多的是极光推送,机关推送的技术原理是:移动无线网络长连接 移动互联网络的现状: 因为手机平台本身.电量 ...

  5. ios消息推送机制原理与实现(转)

    今天给无线事业部的同事开发苹果客户端的推送接口.无线事业部就是我们公司专门开发各种终端的app的部门啦! 无线事业部的同事做事还是很体贴的,同时发给了我参考文档地址和需要的开发需要的pl2文件. 提供 ...

  6. android开发 app消息提醒功能,Android中利用App实现消息推送机制的代码

    1.消息推送机制 服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭. 我想到了一句话:don't call me,i will call you! qq今 ...

  7. Android消息推送机制

    1.推送方式基础知识: 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器 上不定时更新的信息一般 ...

  8. Android推送分析

     cpu多核利用能够实现Android推送的吞吐量. 讲明白这点,我们需要了解Android推送的基本原理了.如果实现C(客户端)与server(客户端)实时通讯了.这里有两种思路了: 1.一种是定时 ...

  9. 移动手机消息推送机制

    由于公司要做一个android的消息推送功能,让我进行了一个调研,发现网上没有一个集中说明的地方,自己在网上搜罗了一些资料并且自己总结了一下. 对于消息的提醒方式可以分为四种:固定窗口.弹出窗口.手机 ...

最新文章

  1. 实例变量的访问及数据封装
  2. 【每日一算法】什么是二分图?
  3. Brian Kelly:比特币现金发展基金是大利好,现在正是买入时机
  4. Linux下基于官方源代码RPM包构建自定义MySQL RPM包
  5. CVPR 2018 论文解读 | 基于GAN和CNN的图像盲去噪
  6. 利用js实现popup弹窗
  7. __stdcall和__cdecl的区别
  8. Linux 使用root用户登录系统,并查看当前的路径。 查看当前目录下面的所有文件(包括隐藏文件)。 在当前目录下,查看根目录中的目录结构。
  9. 卡耐基梅隆大学计算机工程录取率,热点:卡内基梅隆大学爆出2020年新生数据,计算机学院录取率堪比藤校...
  10. 控制物体沿椭圆轨迹运动
  11. buuctf——(HDCTF2019)Maze
  12. 神武授权位置服务器,《神武3》X诸葛八卦村 多益网络第二个大型文创项目即将开启...
  13. Windows客户端开发--获取系统mac地址(使用WMI)
  14. 单词数 HDU - 2072 纯字典树个人理解
  15. 母爱成就新科诺贝尔奖得主马里奥#183;卡佩奇
  16. 似然函数、最大似然估计简单理解
  17. Android---RecyclerView网络请求图片加载
  18. google地图测距原码
  19. JAVA分布式医疗云平台系统开发实战第一节 open-his系统介绍
  20. vs code中使用vscode-fileheader

热门文章

  1. mysql提高性能 硬件_高性能MySQL–操作系统和硬件优化
  2. 电容式8键触摸按键模块
  3. 算命程序源码 实现一对多的网络算命发展趋势 python编写的,测算的精准度 页面的布局 欢迎业内人士指导改进
  4. 外国程序员发帖求助:快四十岁了,不知道以后该怎么办
  5. 淘宝难做,不会英语也可以做亚马逊
  6. OECD:欧美十大全屋家具定制品牌排名
  7. 从0到1实现python基于RPC协议的接口自动化测试
  8. fre 更新了,框架设计重思考……
  9. 使用mpvue开发小程序教程(五)
  10. 2022孕婴童|婴儿用品|母婴玩具11月份|在北京欢迎你