• Android中的消息推送(转载)


    转载于Android中的消息推送

             前段时间做了一个应用,需要用到服务器端向Android或者是Iphone终端主动发送命令。随后客户端做出相应的反应。当时没有找到最佳的方案,一直搁置着。今天看到网上有关于Android推送的介绍,先学习一下,以便以后用到了不至于不知道。

    什么是推送呢?  

      所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息。举个例子,大家有用过百度新闻客户端的应该知道,我们会每隔一段时间收到一条或者多条通知,这就是从百度新闻服务器端传来的推送消息。

    Google Android中内置的推送框架

      说道消息推送,不得不提起google的android系统中自带的推送框架,就是C2DM。全称就是Cloud to Device Messaging。从字面可以看出来就是向终端发送消息用的。但是这种机制在Android2.2以及以后的Android版本系统中才有,而且必须依赖Google服务器。由于这两个致命的约束,很少中国人会使用C2DM。但是其原理还是值得研究的。

    消息推送的替代方案

      既然Google这么不靠谱,那么要想实现消息的推送就得我们自己想办法寻找替代方案了。参考网上资料找到了以下方案

      1). 通过SMS进行服务器端和客户端的交流通信。

      这种方法依赖于运营商,资费明显成本过高,不到万不得已绝不用这种方案。

      2). 循环主动定时获取

      这种方法需要客户端来做一个定时或者周期性的访问服务器端接口,以获得最新的消息。显然这种方法有两个弊端,一个是客户端对电池的消耗显而易见,另一个是消息的获取不够及时,如果是地震消息(大家笑了吧)。

      3).长连接方式

      这种方案和Google的C2DM的方案是一样的,同时大名鼎鼎的苹果用的也是这样的机制。这种机制的弊端也是显而易见的:我们需要开一个服务来保持和服务器端的持久连接。But ANdroid系统的特点我也不说了。当系统可用资源较低,系统会强制关闭我们的服务或者是应用,这样的话我们的连接中断就悲剧了。

    最佳方案

      虽然三条方案都有弊端,相比之下第三种还是最可行的,But我们必须做点优化。那么下面我们就来谈谈两种牛X的协议--MQTT&XMPP。

      MQTT不说了,可以上网搜搜。看到XMPP立刻想到了XML对吧。其实XMPP中文叫可扩展通讯和表示协议。百度百科是这样介绍的

      【MPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。】

      补充: XMPP传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。

    基于XMPP的开源框架

      说到这里估计大家都想问,有没有现成的可用的基于XMPP的开源框架。答案是有的,而且很简单,很容易上手使用--AndroidPN

      源码中这样介绍的

      This is an open source project to provide push notification support for Android -- a xmpp based notification server and a client tool kit.

      那么我们就来看看怎么吧这个环境搭建起来吧

      首先我们需要下载客户端和服务器端代码

      我们说过这是一个开源的框架,地址在http://sourceforge.net/projects/androidpn/ 

      将服务器端代码解压,在bin目录下的run.bat打开就行了我们就可以看到启动了Tomcat容器,这样我们的服务器端就搭建好了,简单吧。

      将客户端代码解压,你会发现是一个android工程文件。那么直接导入Eclipse,打开raw下的配置文件androidpn

      将androidpn.properties,修改如下

      apiKey=1234567890

      xmppHost=10.0.2.2

      xmppPort=5222

      如果你是模拟器就设置如上,若是手机就改一下xmppHost为具体的服务器地址IP。

    推送消息到客户端

      当客户端跑起来我们的Client端程序后,我们可以打开服务器端

    点击Notifacations标签,就可以发通知给指定客户端或者所有客户端了

  • 相关阅读:
    Eclipse对printf()不能输出到控制台的解决方法
    Eclipse launch failed.Binary not found解决方案
    Windows 7中使用Eclipse 使用CDT and WinGW 开发C/C++(转载)
    assets
    方法对头,报表模板维护其实很简单
    刷机包各个文件都是啥
    开机logo切换逻辑深入研究
    不同分辨率的LCM进行兼容
    SD卡驱动分析(二)
    SD卡驱动分析(一)
  • 原文地址:https://www.cnblogs.com/draem0507/p/3130211.html
Copyright © 2020-2023  润新知