一、消息推送定义

在用户未打开App时,App主动向用户推送服务器最新消息。如下图:

二、App从服务器获取最新消息有两种基本方式

1、主动获取方式(Pull) 客户端隔固定时间主动向服务器获取信息,看是否有更新的信息;若有更新信息,则发送到客户端

2、被动接受方式(Push) 当服务器有更新信息时主动发送到客户端

对比:Push方式比Pull方式更优越。因为采用Pull方式时客户端需要不停地去监测服务器的变化,更费客户端的资源(CPU资源、网络流量、系统电量)

三、解决方案

1、C2DM

(1)、原理:
基于Push方式,C2DM服务负责处理诸如消息排队等事务,并向运行于目标设备上的应用程序分发这些消息。如下图:

(2)、优点:
C2DM提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。

(3)、缺点:

  • 依赖于Google官方提供的C2DM服务器,但在国内使用Google服务需要翻墙,成本较大;
  • 需要用户手机安装Google服务。但由于Android机型、系统的碎片化 & 国内环境,国内的Android系统都自动去除Google服务,假如要使用C2DM服务,这意味着用户还得去安装Google服务,成本较大。
2、轮询

(1)、原理:基于Pull方式,应用程序隔固定时间主动与服务器进行连接并查询是否有新的消息

(2)、缺点:

  • 成本大,需要自己实现与服务器之间的通信,例如消息排队等;
  • 到达率不确定,考虑轮询的频率:太低可能导致消息的延迟;太高,更费客户端的资源(CPU资源、网络流量、系统电量)和服务器资源(网络带宽)
3、XMPP协议

(1)、定义:
Extensible Messageing and Presence Protocol,可扩展消息与存在协议,是基于可扩展标记语言(XML)的协议,是目前主流的四种IM协议之一。
(2)、原理:
XMPP中定义了三个角色,分别是客户端、服务器和网关 客户端

  • 通过 TCP/IP与XMPP 服务器连接,然后在之上传输与即时通讯相关的指令(XML);
  • 解析组织好的 XML 信息包;
  • 理解消息数据类型。

(3)、核心

  • XML流传输协议(在网络上分片断发送XML的流协议),也是即时通讯指令的传递基础,即XMPP用TCP传的是XML流
  • 与即时通讯相关的指令,在以前要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。
  • XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。

(4)优点:

  • 开源:可通过修改其源代码来适应我们的应用程序。
  • 简单:XML易于解析和阅读;将复杂性从客户端转移到了服务器端
  • 可拓展性强:继承了在XML环境中灵活的发展性,可进一步对协议进行扩展,实现更为完善的功能。
    GTalk、QQ、IM等都用这个协议

(5)、缺点:
如果将消息从服务器上推送出去,则不管消息是否成功到达客户端手机上。

Android push原理相关推荐

  1. [业务知识]push原理总结(包含iOS,Android,极光,厂商)

    Push在产品运营的作用 定期的推送,可以让更多的用户看到并使用app,对于app运营是很有效果的.可提升产品活跃度.带动功能模块使用率.带来有效的订单以及增加产品粘性.唤醒沉睡用户等. 目的: 在用 ...

  2. 【转】Android Activity原理以及其子类描述,androidactivity

        Android Activity原理以及其子类描述,androidactivity 简介 Activity是Android应用程序组件,实现一个用户交互窗口,我们可以实现布局填充屏幕,也可以实 ...

  3. Android测试原理(三)——使用Eclipse的ADT进行测试

    原文链接:http://developer.android.com/tools/testing/testing_eclipse.html 1.使用Eclipse的ADT进行测试 这次的主题介绍了怎么使 ...

  4. 3 分钟搞定 Android Push

    在 Android 上,要实现 Push 功能可没有那么简单! 众所周知的原因是,Android 官方的推送服务 GCM 在国内手机上用不了.所以很多国内的开发者,不得不去使用 AndroidPN 这 ...

  5. android 开发art,Android应用开发之Android 系统启动原理(art 虚拟机)

    本文将带你了解Android应用开发之Android 系统启动原理(art 虚拟机),希望本文对大家学Android有所帮助. Android   系统启动原理(art 虚拟机) 一.虚拟机的启动 A ...

  6. android 实例源码解释,Android Handler 原理分析及实例代码

    Android Handler 原理分析 Handler一个让无数android开发者头疼的东西,希望我今天这边文章能为您彻底根治这个问题 今天就为大家详细剖析下Handler的原理 Handler使 ...

  7. Android布局原理与优化

    Android布局原理与优化 目录: 绘制原理 CPU与GPU Android 图形系统的整体架构 RenderThread 硬件加速和软件绘制 invalidate软件绘制流程 invalidate ...

  8. jpush android 离线推送,JPush极光推送3分钟搞定Android Push

    在 Android 上,要实现 Push 功能可没有那么简单! 众所周知的原因是,Android 官方的推送服务 GCM 在国内手机上用不了.所以很多国内的开发者,不得不去使用 AndroidPN 这 ...

  9. android view交替动画,Android View原理(View树遍历,View重绘,View动画)

    一.屏幕绘图基础 Android中的GUI系统是客户端和服务端配合的窗口系统,即后台运行了一个绘制服务,每个应用程序都是该服务端的一个客户端,当客户端需要绘制时,首先请求服务端创建一个窗口,然后在窗口 ...

最新文章

  1. 企业项目学习准备阶段——Rhel6.5版本无图形虚拟机封装过程及相关配置
  2. java如何导入和导出ex_SpringBoot中关于Excel的导入和导出
  3. LeetCode(349)——两个数组的交集(JavaScript)
  4. 21天Jmeter打卡day7了解项目
  5. 欧拉线性筛 与 欧拉函数 + 几道例题
  6. C++ vector和set的区别
  7. 页面编码和js文件不同导致的IE6下脚本错误
  8. xCat 批量安装系统
  9. qq象棋辅助 android,QQ象棋自动下棋
  10. 【测试】一步步教你写一份优秀的软件测试简历
  11. 三菱plc pwm指令_三菱PLC常用指令汇总,含用法与注释
  12. qlikview 地图插件制作教程
  13. 通信原理及系统系列7—— 什么是码间串扰
  14. 灭霸一个响指,开源众包出现在开源中国的社区APP里,一键接单从此无忧。
  15. java界面加入图片_JAVA界面设计怎么插入背景图片。
  16. android流量卡信息,Android 双卡获取当前使用流量在线卡的信息
  17. Python float基本用法
  18. 日均5亿查询量,京东到家订单中心ES架构演进
  19. 概率统计Python计算:样本数据的经验分布函数
  20. 2018冬令营模拟测试赛(一)

热门文章

  1. 把Firfox的缓冲设置到内存盘
  2. 验证码的OCR方式识别
  3. 今日头条2018校园招聘后端开发工程师(第三批)编程题 - 题解
  4. 51单片机模拟电子琴+Proteus仿真
  5. 成功解决微信屏蔽网页跳转到app(apk)下载
  6. phpmailer 私密抄送_使用PHPMailer发送邮件实例
  7. JavaScript String对象中属性的使用方法
  8. 移动端携程网首页制作
  9. “让你更值钱”的八个项目管理习惯
  10. Xcode 打开总是无法响应问题