Android几种消息推送方案总结

 更新时间:2017年01月03日 09:44:24   作者:Joanna.Yan  
本文主要总结下Android平台下几种推送方案的基本情况以及优缺点,具有一定的参考作用,下面跟着小编一起来看下吧

首先看一张国内Top500 Android应用中它们用到的第三方推送以及所占数量:

现在总结下Android平台下几种推送方案的基本情况以及优缺点:

一、使用GCM(Google Cloude Messaging)

Android自带的推送GCM可以帮助开发人员给他们的Android应用程序发送数据。它是一个轻量级的消息,告诉Android应用程序有新的数据要从服务器获取,或者它可能是一个消息,其中包含了4KB的payload data(像即时通讯这类应用程序可以直接使用该payload消息)。GCM服务处理排队的消息,并把消息传递到目标设备上运行的Android应用程序。

优点:Google提供的服务、原生、简单,无需实现和部署服务端。

缺点:1.要求Android 2.2以上,对于不少2.2以前的系统没法推送;

     2.国内服务不稳定。而且不少国内的终端厂商纷纷把Google的服务去掉,替换上自己的。

     3.需要用户绑定Google账号,但不少国内用户没有Google账号。

二、使用XMPP协议(Openfire+Spark+Smark)

XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性,有很强的可扩展性。包括上面讲的GCM服务器底层也是采用XMPP协议封装的。

优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。

缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

而androidpn(Android Push Notification)就是基于 XMPP 开源组件的一套整合方案,服务端基于Openfire、客户端基于Smack。到AndroidPN项目主页( http://sourceforge.net/projects/androidpn/ ) 下载2个文件: androidpn-server-0.5.0-bin.zip 和 androidpn-client-0.5.0.zip 分别是服务器和客户端的代码。详细的实现方式网上有不少文章。

  1.androidpn服务端重启后客户端不会重连,这个非常悲剧

  2.由于服务器不保存消息,造成了如果客户端当前离线就收不到消息

  3.androidpn发送完消息就不管了,所以没有消息回执报表之类,造成没法做应用后续的数据分析用户体验的改善,这对于企业级的应用是个致命伤。

XMPP协议比较费电费流量,这个对当前智能机的消耗太大,在窄带网络和不稳定的(手机)网络都不是最优的选择。但总体来说,XMPP协议还是比较成熟的。

三、使用MQTT协议(想了解更多可以看http://mqtt.org/

轻量级的、基于代理的“发布/订阅”模式的消息传输协议。

优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考: http://mqtt.org/software),且已有C++版的服务端组件rsmb。

缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

四、HTTP轮循方式

定时向HTTP服务端接口(Web Service API)获取最新消息。

优点:实现简单、可控性强,部署硬件成本低。

缺点:实时性差。

五、采用第三方服务

就是前面介绍的第三方推送,客户端只需要导入第三方提供的lib库,有第三方监理长连接,负责消息的接收/发送。同时对消息都有比较详细的报表数据,可以用于做数据分析、挖掘,改善用户体验。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Android深入浅出之Binder机制

    Android深入浅出之Binder机制

    本文主要介绍 Android深入浅出之Binder机制,这里整理了详细的Binder机制资料,研究Android源码的朋友可以看下,以便了解Android 通信知识
    2016-08-08
  • 关于androidstuio导入系统源码的问题

    关于androidstuio导入系统源码的问题

    小编最近在做系统源码导出来的小项目,在导入androidstudio过程中遇到过一些问题,本文以Schedule power on off为例给大家详细介绍,需要的朋友参考下吧
    2021-06-06
  • Android自定义控件之日期选择控件使用详解

    Android自定义控件之日期选择控件使用详解

    这篇文章主要为大家详细介绍了Android自定义控件之日期选择控件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • android开发教程之listview使用方法

    android开发教程之listview使用方法

    这篇文章主要介绍了android的listview使用方法,需要的朋友可以参考下
    2014-02-02
  • java从输入流中获取数据并返回字节数组示例

    java从输入流中获取数据并返回字节数组示例

    这篇文章主要介绍了java从输入流中获取数据并以字节数组返回,这是一个常用的方法,以后可以直接拿来用。这种输入流可以来自Android本地,也可以来自网络
    2014-01-01
  • 一篇文章弄懂kotlin的扩展方法

    一篇文章弄懂kotlin的扩展方法

    这篇文章主要给大家介绍了如何通过一篇文章弄懂kotlin的扩展方法,文中通过示例代码介绍的非常详细,对大家学习或者使用kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Android开发之DialogFragment用法实例总结

    Android开发之DialogFragment用法实例总结

    这篇文章主要介绍了Android开发之DialogFragment用法,结合实例形式总结分析了Android使用DialogFragment代替Dialog功能的相关使用技巧与注意事项,需要的朋友可以参考下
    2017-11-11
  • OpenGL ES透视投影实现方法(四)

    OpenGL ES透视投影实现方法(四)

    这篇文章主要为大家详细介绍了OpenGL ES透视投影的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android实现带指示点的自动轮播无限循环效果

    Android实现带指示点的自动轮播无限循环效果

    这篇文章主要为大家详细介绍了Android实现带指示点的自动轮播无限循环效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android 多渠道打包进阶版

    Android 多渠道打包进阶版

    上篇文章更了Android 多渠道打包,这篇文章将做一个后续继续更Android 多渠道打包进阶版,上次意未尽的朋友可以继续啦,第一次点进来的朋友也可以看上次文章
    2021-09-09

最新评论