Android消息推送解决方案

    |     2016年3月7日   |   Android经验   |     0 条评论   |    1197

前几天和朋友去餐馆吃饭刚坐下手机就收到一条消息,打开手机一看原来是一款打折优惠App发来的优惠信息,内容为通过此APP消费可享受8折优惠,看到这里是即惊喜又好奇,好奇的是这款APP怎么知道我来这家餐馆消费,手机没有打开APP怎么收到的消息。
这里给大家介绍下,餐馆信息如GPS坐标,名称等早已被该APP公司员工收集储入公司数据库,当我们进入餐馆手机APP获取我们当前GPS坐标发送给服务端,服务端从数据库查找匹配信息推送给手机客户端APP,然后提示用户。

怎么定位GPS坐标占时不考虑,我们来分析下服务端打折优惠信息是怎么推送给手机客户端的。

一、消息推送基础

消息推送,就是在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息当我们开发需要和服务器交互的移动应用时,基本上都需要和服务器进行交互,包括上传数据到服务器,同时从服务器上获取数据。
一般情况下,客户端与服务器之间通讯客户端是主动的,但这就存在一个问题就是一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的时候才能实现。这种方式使消息失去了实时性。

如何使客户端能够实时的收到服务器的消息和通知,总体来说有两种方式,

第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现。

第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。这样,客户端就能自动的接收到消息。

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

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

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

2.SMS(pull)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,一旦服务器有变化则立即同步消息。这种方式一般用户在经济上很难承受。需要短信平台配合。

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

4.C2DM云端推送方案

在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务。Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。
该方案存在的主要问题是C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用。

5.XMPP协议实现Android推送

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

6.使用第三方平台

目前国内、国外有一些推送平台可供使用,但是涉及到收费问题、保密问题、服务质量问题、扩展问题等等,又不得不是我们望而却步。
注:(百度云推送可参考这篇博客:Android推送 百度云推送 入门篇)

转载请注明来源:Android消息推送解决方案
回复 取消