转载于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标签,就可以发通知给指定客户端或者所有客户端了

Android中的消息推送相关推荐

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

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

  2. android开发之消息推送

    本人想把Android所要运用到的所有的东西都好好的梳理一遍,那今个儿就和大伙说说消息推送:想必大家都玩过小米手机,细心的人会发现,小米手机时不时的就会发一些通知告诉你要系统升级了.某某App有新版本 ...

  3. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  4. java socket 推送机制_Java中websocket消息推送的实现代码

    一.服务层 package com.demo.websocket; import java.io.IOException; import java.util.Iterator; import java ...

  5. Flutter在Android平台实现消息推送

    1. 极光推送平台申请应用 1. 注册极光推送平台: 极光官方平台 2. 极光推送平台创建应用: 填写应用程序名称. 选择平台,选择服务,点击下一步. 需要输入应用包名(Android平台),选择渠道 ...

  6. Android接入极光消息推送

    极光消息推送: 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接 主要功能 保持与服务器的长连接,以便消息能够即时推送到达客 ...

  7. Android友盟消息推送

    1. 申请应用消息推送账号 集成SDK之前, 请在 http://message.umeng.com 创建应用,获取应用对应的AppKey和Umeng Message Secret.并将自己服务器ip ...

  8. Android集成阿里消息推送

    1.阿里消息推送的官方文档地址 https://help.aliyun.com/document_detail/30054.html?spm=a2c4g.11174283.3.2.136c6d1669 ...

  9. Android MQTT实现消息推送

    飞哥语录:编程说白了就是发送数据,接收数据,处理数据. 1.概述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有 ...

最新文章

  1. java io 文件复制_实例讲述Java IO文件复制
  2. Android图片轮播
  3. linux putty xshell vi 小键盘无法使用的解决方法
  4. 对 Session 的深入探讨
  5. 第四范式天枢入选毕马威首届“领先消费科技50”榜单
  6. ASP.NET 自定义项目模板
  7. php获取ajax数组,从AJAX获取PHP中的JSON数组请求
  8. 安装easy_install 和ipython
  9. jquery中的ajax 网络请求
  10. java.util.concurrent 多线程框架---线程池编程(四)
  11. Chapter.13 Copy Constructor
  12. asp毕业设计——基于asp+access的工资管理系统设计与实现(毕业论文+程序源码)——工资管理系统
  13. luogu P1357 花园
  14. 【莫安迪原创摄影作品】深圳最美夕阳-烟云成画
  15. 论坛数据库设计初步设计
  16. 开源App动画Lottie
  17. 灵机一栋团队alpha冲刺 Ⅰ
  18. JavaScript - PC 端通过纯 js 播放音频文件(播放提示音)
  19. DPDK — L3 Forwarding 与 IP 路由选择算法
  20. 如何带领好团队,增强团队的执行力?

热门文章

  1. php团购实现,团购网站的设计与实现(PHP,MySQL)(含录像)
  2. [UE4笔记] 搜索蓝图节点在哪个蓝图中使用
  3. neovim初始化以及插件安装
  4. 转行做产品经理,如何挑选产品经理课程?
  5. 利用Office,将多个doc文档合并为一个文件,文档合并
  6. 统一推送平台搭建与优化
  7. jQuery入门选择器
  8. 将oracle数据库中的数据导入redis数据库演示
  9. 前端有哪些好的学习网站?
  10. 今年考研“不一般”,来看看这些现场