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

推送功能在手机应用开发中愈来愈重要,已经成为手机开发的必须。在Android应用开发中,因为众所周知的缘由,Android消息推送咱们不得不大费周折。本文就是用来和你们共同探讨一种Android消息推送的完美解决方案。php

AD:2014WOT全球软件技术峰会北京站 课程视频发布html

推送功能在手机应用开发中愈来愈重要,已经成为手机开发的必须。在Android应用开发中,因为众所周知的缘由,Android消息推送咱们不得不大费周折。本文就是用来和你们共同探讨一种Android消息推送的完美解决方案。java

1、消息推送基础android

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

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

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

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

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

2、几种常见的解决方案实现原理性能

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

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

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

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

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、使用第三方平台

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

4、消息推送完美方案

综合以上论述,在创建Android消息推送方面可谓方案多多,但每一款方案都有其优缺点。但不管如何,仍是本身搭建一个推送平台是上策。由于你有、他有不如本身有。

举个例子,在搭建自有推送平台上建议使用《某某Android消息推送组件》。该组不只能够拿来即用,而且还能够提供源码以便扩展,实现本身的特殊需求。

A、推送原理

Android消息推送组件基于XMPP协议实现Android推送。XMPP(可扩展通信和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终容许因特网用户向因特网上的其余任何人发送即时消息。

Android消息推送组件实现原理见下图:

            a.JPG

图1-消息推送原理图

Android消息推送组件由服务器部分和客户端部分组成。每一部分都由XMPP协议组件和外部接口组件构成。XMPP协议组件负责服务器和Android客户端间的链接管理、消息通信,外部接口组件负责接收应用系统、客户端应用的命令,向应用系统发送接收到的通知消息。

Android消息组件提供基于Tomcat的服务器应用和Android开发jar包。其中基于Tomcat的服务器应用直接在Tomcat上部署便可,Android开发jar包引入Android项目便可。

B 集成方式

1)服务器部署

Android消息组件Tomcat的服务器应用直接部署在Tomcat中,端口号任意设定。

2)客户端jar包引用

在Android项目中创建libs目录,而后将提供的Android开发jar包复制到该目录便可。见下图:

b.JPG

图2-jar包引入图

3)Android项目AndroidManifest.xml文件修改

在该文件中增长如下权限:

  1. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
  2.  
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
  4.  
  5. <uses-permission android:name="android.permission.INTERNET" /> 
  6.  
  7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
  8.  
  9. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
  10.  
  11. <uses-permission android:name="android.permission.VIBRATE" /> 

在该文件中注册服务:

  1.  <service android:enabled="true" 
  2.  
  3.  android:name="com.bjjrs.server.NotificationService" 
  4.  
  5.  android:label="NotificationService"> 
  6.  
  7.       <intent-filter> 
  8.  
  9.          <action android:name="com.bjjrs.server.NotificationService" /> 
  10.  
  11.      </intent-filter> 
  12.  
  13. </service> 

至此,Android消息组件集成工做完成。

C、接口方式

1)服务器端接口采用基于http协议的访问方式,采用http协议从服务器中获取各类信息,实现通知消息的推送。

如使用如下方式和参数就能够实现各类用户消息的查询:

http://localhost:8080/user.do?action=getAllUser&isOnline=&userID=&userType=&deptID=&deptName=&realName=

使用以下方式就能够实现各类消息的推送:

http://localhost:8080/notification.do?action=pushNoti&userNames=&title=&content=

2)Android客户端接口采用广播机制。

消息接收:当XMPP协议组件接收到推送消息时,将按照必定格式广播该消息,通知客户端其余应用接收并处理该消息。

消息发送:客户端应用须要向服务器或者其余客户端发送即时消息时,只需按必定格式广播该消息,XMPP组件就会自动接收该消息并发送到指定的其余客户端。

D、优点特色

1)系统集成简单,无需复杂的设置。

2)Android客户端应用和Android消息推送组件彻底分离,经过接口相互调用,实现模块应用最优化。

3)客户端通信机制采用广播方式,给客户端应用带来极大的灵活性和可扩展性,能够自由处理接收到的推送消息。

4)Android消息推送组件在服务器端具有消息存储、消息重发、消息路由等功能,在客户端部分具有断线重连、、收到确认、阅读确认、消息发送、命令执行等功能,确保消息可以推送到客户端,同时也保证客户端可以收到、阅读消息。

E、 应用范围

Android消息推送组件可在如下场景中使用:

1)用于消息推送。如:通知下达、应急指挥等。

2)用户及时消息交互。如在线聊天、工做状况交互等。

3)用于远程控制。如控制远程客户端的状态、数据上报等。

最后,但愿转载的朋友可以尊重做者的劳动成果,加上转载地址。

http://bbs.hiapk.com/thread-4652657-1-1.html

相关文章
相关标签/搜索