出处:https://www.jianshu.com/p/969e83d10680

定义

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

作用

产品的角度:功能需要,比如说资讯类产品的新闻推送、工具类产品的公告推送等等
运营的角度:活动运营需要,比如说电商类产品的促销活动;召回用户 / 提高活跃度等等
作为开发者,不要有需求就接,应该多思考、多理解用户 / 功能的使用场景,有助于我们更好地去选择合适的开发方式

储备知识

操作系统有自身的消息推送功能(系统级别)

系统级别:任何时候都可以推送给用户,且不会被系统杀死
Android的消息推送服务称为:C2DM(Cloudto Device Messaging)

推送的本质与原理

消息推送的本质是:App将服务器更新的信息推送给用户,即App获取服务器信息,再推送给用户
App从服务器获取最新消息的基本方式(原理)有3种:Push、Pull 和 SMS

解决方案

经总结,Android中实现消息推送的有7种主流解决方案,接下来将一一介绍。

C2DM

定义:Cloud to Device Messaging,云端推送
Android系统级别的消息推送服务-Google出品
原理:基于Push方式,C2DM服务负责处理诸如消息排队等事务,并向运行于目标设备上的应用程序分发这些消息。如下图:

  • 优点:C2DM提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。
  • 缺点:
    1. 依赖于Google官方提供的C2DM服务器,但在国内使用Google服务需要翻墙,成本较大;
    2. 需要用户手机安装Google服务。但由于Android机型、系统的碎片化 & 国内环境,国内的Android系统都自动去除Google服务,假如要使用C2DM服务,这意味着用户还得去安装Google服务,成本较大。

轮询

  • 原理:基于Pull方式,应用程序隔固定时间主动与服务器进行连接并查询是否有新的消息
  • 缺点:
    1.成本大,需要自己实现与服务器之间的通信,例如消息排队等;
    2.到达率不确定,考虑轮询的频率:太低可能导致消息的延迟;太高,更费客户端的资源(CPU资源、网络流量、系统电量)和服务器资源(网络带宽)

SMS

  • 定义:短信发送
  • 原理:基于Push方式,通过拦截SMS消息并且解析消息内容来了解服务器的意图,并获取其显示内容进行处理。
  • 优点:可实现完全的实时操作
  • 缺点:成本相对较高。因为目前来说,很难找到免费的短消息发送网关来实现这种方案,只能通过向运营商缴纳相应的短信费用

MQTT协议

定义:轻量级的消息发布/订阅协议
原理:基于Push方式,wmqtt.jar 是IBM提供的MQTT协议的实现,原理如下图:

XMPP协议

  • 定义:Extensible Messaging And Presence protocol,可扩展消息与存在协议,是基于可扩展标记语言(XML)的协议,是目前主流的四种协议之一。

其他三种:

  • 即时信息和空间协议(IMPP)

  • 空间和即时信息协议(PRIM)

  • 即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)

  • 原理:XMPP定义三种角色,分别是客户端、服务器和网关

客户端

  1. 通过TCP/IP与XMPP服务器连接,然后在之上传输与即时通讯相关的指令(XML);
  2. 解析组织好的XML信息包
  3. 理解消息数据类型
  1. XMPP的核心:XML流传输协议(在网络上分片断发送XML的流协议),也是即时通讯指令的传递基础,即XMPP用TCP传的是XML流
  2. 与即时通讯相关的指令,在以前要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。
  3. XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。

服务器

  1. 监听客户端连接,并直接与客户端应用程序通信(客户端信息记录)
  2. 与其他 XMPP 服务器通信;
    网关:与异构即时通信系统进行通信

异构系统包括SMS(短信),MSN,ICQ等

通信能够在这三者的任意两个之间双向发生。

原理流程

  • 优点:

    1. 开源:可通过修改其源代码来适应我们的应用程序。

    2. 简单:XML易于解析和阅读;将复杂性从客户端转移到了服务器端

    3. 可拓展性强:继承了在XML环境中灵活的发展性,可进一步对协议进行扩展,实现更为完善的功能。

    GTalk、QQ、IM等都用这个协议

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

  • 源码实例:有一个很棒的基于XMPP协议的java开源Android push notification:Androidpn项目地址,大家有兴趣可以去看看

更多关于XMPP协议更加详细请点击

使用第三方平台

现今主流的推送平台分为

手机厂商类:小米推送、华为推送。
第三方平台类:友盟推送、极光推送、云巴(基于MQTT)
BAT大厂的平台推送:阿里云移动推送、腾讯信鸽推送、百度云推送

作者:badcyc
链接:https://www.jianshu.com/p/969e83d10680
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Android消息推送原理相关推荐

  1. Android 消息推送

    Android 消息推送 那位大哥做过啊 android是用服务做吧? pushsharp 雲推送 你要有服務器來服務 不是云推送吧 去搜這個,有server,有client,有demo 自己做的话, ...

  2. Android消息推送 解决方案

    前言 鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见 如电商的活动宣传.资讯类产品进行新闻推送等等 推送消息截图 今天,我将全面介绍Android中实现消息推送的7种主流解 ...

  3. Android 消息推送OnePush

    Android 消息推送 1.实现原理 1.消息推送的实质 实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App再发送给用户 推送的消息一般是用户需要的或app希望用户知道的消息 ...

  4. Carson带你学Android:全面解析Android消息推送解决方案

    前言 鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见 如电商的活动宣传.资讯类产品进行新闻推送等等 今天,我将全面介绍Android中实现消息推送的7种主流解决方案 Car ...

  5. MobPush的消息推送原理是什么?

    MobPush智能多通道推送系统作为Mob重磅推出的一款消息推送明星产品,目前已在电商.游戏.新零售.金融等行业广泛应用,它支持多种推送消息类型,全链路数据统计分析助力开发者用户增长,毫秒级触达用户, ...

  6. iOS 消息推送原理及实现总结

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图: 1. Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Prov ...

  7. Android消息推送完美解决方案全析

    Android消息推送完美解决方案全析 参考文章: (1)Android消息推送完美解决方案全析 (2)https://www.cnblogs.com/xueshui20/p/4151405.html ...

  8. iOS 消息推送原理及实现Demo

    为什么80%的码农都做不了架构师?>>>    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供 ...

  9. android 消息推送方法,一种基于Android系统的消息推送方法技术方案

    [技术实现步骤摘要] 本专利技术涉及一种基于Android系统的消息推送方法,属于计算机 技术介绍 推送功能在手机应用开发中越来越重要,已经成为手机开发的必选项.消息推送,就是在互联网上通过定期传送用 ...

最新文章

  1. CVPR2021|CenterPoint :基于点云数据的3D目标检测与跟踪
  2. Unity3D笔记 GUI 二 、实现选项卡一窗口
  3. c语言 activemq,activemq概念介绍
  4. 我为什么觉得数据产品经理更吃香了?
  5. 文献记录(part61)--基于不完备数据聚类的缺失数据填补方法
  6. Visio 安装后提示 Dos 共享冲突
  7. html弹窗代码大全定时弹窗,js点击弹窗弹出表单框代码
  8. SQL 数据库清理数据库日志
  9. 优家益购——JavaWeb项目(Jsp+Servlet+MySQL+tomcat)
  10. 可集成到APP的车架号识别sdk
  11. mysql 回归分析_统计科学之多元回归分析
  12. C/C++中文帮助手册
  13. 绿地智创金融谷项目成功举办第六届西安建筑业绿色施工示范工程观摩会
  14. 周鸿祎给360员工的一份信:不做打工者
  15. Boosting, Online Boosting,adaboost
  16. Leetcode5238 找出给定方程的正整数解
  17. SMR磁盘学习3---caveat-scriptor
  18. idea子模块使用父模块变量properties in parent definition are prohibited
  19. PPT技巧,帮助你更好的制作PPT
  20. 栈(模拟栈,表达式求值)

热门文章

  1. matlab RGB颜色转16进制颜色
  2. web协议-接口测试-Python自动化面试题
  3. C# Convert方法:数据类型转换
  4. mysql CONVERT 类型转换
  5. ubuntu 更换pip源
  6. 【微信授权】极其简单的实现方法
  7. Web3j如何在ETH智能合约调用请求发出前获取到转账Hash
  8. 最快解决Microsoft Edge、Chrome浏览器被2345绑架问题
  9. html代码在线优化工具,HTML代码优化工具-WordPress编辑器增强功能插件
  10. zabbix通过snmp监控带外管理ping不可用的问题