一、消息推送基础

消息推送,就是在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息。

当我们开发需要和服务器交互的移动应用时,基本上都需要和服务器进行交互,包括上传数据到服务器,同时从服务器上获取数据。

一般情况下,客户端与服务器之间通讯客户端是主动的,但这就存在一个问题就是一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的时候才能实现。这种方式使消息失去了实时性。

如何使客户端能够实时的收到服务器的消息和通知,总体来说有两种方式,第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现。第二种就是服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。这样,客户端就能自动的接收到消息。 

虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push方式比Pull方式更优越。因为Pull方式更费客户端的网络流量,更主要的是费电量,还需要我们的程序不停地去监测服务端的变化。  

二、几种常见的解决方案实现原理

1)轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。

2)SMS(Push)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,但这种方式一般用户在经济上很难承受。

3)持久连接(Push)方式:客户端和服务器之间建立长久连接,这样就可以实现消息的及时行和实时性。

三、消息推送解决方案概述

A、C2DM云端推送方案

在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务。Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。

该方案存在的主要问题是C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用。

B、MQTT协议实现Android推送

采用MQTT协议实现Android推送功能也是一种解决方案。MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。
wmqtt.jar 是IBM提供的MQTT协议的实现。我们可以从这里(https://github.com/tokudu/AndroidPushNotificationsDemo)下载该项目的实例代码,并且可以找到一个采用PHP书写的服务器端实现(https://github.com/tokudu/PhpMQTTClient)。

C、RSMB实现推送功能

Really Small Message Broker (RSMB) ,是一个简单的MQTT代理,同样由IBM提供,其查看地址是:http://www.alphaworks.ibm.com/tech/rsmb。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。SAM是一个针对MQTT写的PHP库。我们可以从这个http://pecl.php.net/package/sam/download/0.2.0地址下载它。

D、XMPP协议实现Android推送

Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。但也存在一些不足之处:
1) 比如时间过长时,就再也收不到推送的信息了。
2)性能上也不够稳定。
3)如果将消息从服务器上推送出去,就不再管理了,不管消息是否成功到达客户端手机上。
如果我们要使用androidpn,则还需要做大量的工作,需要理解XMPP协议、理解Androidpn的实现机制,需要调试内部存在的BUG。

E、使用第三方平台

目前国内、国外有一些推送平台可供使用,但是涉及到收费问题、保密问题、服务质量问题、扩展问题等等,又不得不是我们望而却步。

如何实现服务器给android客户端主动推送消息相关推荐

  1. 服务器主动推送消息数据给客户端

    1 引言 这个问题第一次是我在实现一个导师的方案的时候所发现的,一开始我需要实现服务器与客户端的密钥协商和数据传递,服务器需要主动分发(推送)密钥给客户端,因为以前没有做过相关编码,后来只能想到用反向 ...

  2. 公众号向特定用户主动推送消息_SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据...

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上: https://blogs ...

  3. PHP实现微信公众号主动推送消息

    这篇文章主要介绍了php实现微信公众号主动推送消息的方法,PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制,需要的朋友可以参考下. 通过学习借鉴朋友的实现方法进行整理,实现了PHP ...

  4. php 主动推送消息,php实现微信公众号主动推送消息

    通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下 此方法是通过模拟登录微信公共平台的方法来实现的. 代码如下: 一.登录接口部分代码 / ...

  5. web应用从服务器主动推送消息到客户端到方式

    总结帖 为什么需要服务端向客户端推送消息? 在某些应用功能中,例如定位,游戏,社交消息的推送等,用户都是被动接受u消息的,为了处理这类问题,需要服务端向客户端推送消息. 引言: 普通情况下,有客户端向 ...

  6. 服务器推送小程序,小程序之主动推送消息(订阅消息)

    微信的东西,第一次玩,记录下全过程,略过申请小程序步骤 1:配置类目,建议在申请小程序的时候多选几个类目,类目越多,可选的消息模版越多,修改地址(传送门 路径: 设置-基本设置-服务类目) 2:设置推 ...

  7. php socket主动推送消息,PHP使用WebSocket主动推送【微信小程序接收】

    WebSocket.jpeg Websocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能. 这里我们用TP5.1框架结合Wo ...

  8. 服务器如何向前端页面推送消息,后端向前端推送消息

    SpringBoot+WebSocket集成 什么是WebSocket? 为什么需要 WebSocket? 前言 maven依赖 WebSocketConfig WebSocketServer 消息推 ...

  9. 极光推送:java后台向APP推送消息(android,ios极光推送消息)

    Maven添加依赖 <!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifact ...

最新文章

  1. python array 语法_Python基本语法
  2. js基础---object对象
  3. JPA J2SE 桌面应用范例
  4. Curses 中的 noecho() 函数
  5. 页式存储管理程序模拟_ADAS/AD开发12 - 数据存储管理
  6. linux 网络设备 安装,Linux_Linux系统配置网络详解,一.安装和配置网络设备- phpStudy...
  7. python批量打印word_Python使用扩展库pywin32实现批量文档打印实例
  8. 苹果叒要开发布会了!多款新机曝光,Intel不淡定了
  9. 简单的C语言程序示例
  10. Java用itext工具根据模板生成PDF
  11. 电容电感充放电时间计算
  12. sou.php,phpsou RiSearchPHP是一个高效 联合开发网 - pudn.com
  13. Python获取对象所占内存大小方法
  14. idea 商业版 社区版_idea社区版和商业版的区别
  15. python有理数_Python3标准库:fractions有理数
  16. 一个移动开发老码农的书单
  17. 网络打印机安装教程:HP LaserJet Pro MFP M226dw,Windows解决外网无法使用打印机问题
  18. 论文复现-1:Perturbation CheckLists for Evaluating NLG Evaluation Metrics
  19. 苹果电池显示维修_安装第三方电池的iPhone也可享受苹果官方维修
  20. EXP6 信息搜索与漏洞扫描 20154310

热门文章

  1. css3 实现 太极图
  2. Arm 使用 Cortex-X2 CPU 挑战英特尔和 AMD 在笔记本电脑领域的领先地位
  3. 如何批量生成GS1-128条码
  4. 基于flask+vue的模拟股票交易系统
  5. 安装.net4.6.2的方法
  6. 天线发射功率计算公式_如何计算5G NR基站的总发射功率|小区最大发射功率|参考信号功率...
  7. 解决rotatedRectangleIntersection计算目标检测旋转框IOU不准确问题C++、opencv
  8. ucos II与ucos III的区别
  9. 吞吐量达到瓶颈后下降_TD-HSDPA空口吞吐量或成瓶颈-通信/网络-与非网
  10. 大航海时代中国企业如何找到新机会,听听他们怎么说