`
wenjiefeng
  • 浏览: 8912 次
  • 来自: 北京
社区版块
存档分类
最新评论

android中实现消息推送

阅读更多
最近手头一个项目中需要用到消息推送,查了蛮多资料,感觉这篇写的最好,感谢无私奉献的人.

关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池;SMS(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是很难找到免费的网关来发送短信;最后就是持久连接,主要是Socket通讯,这个解决了性能问题,但是耗电问题依旧没能解决。

在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较成熟的及时消息传递协议共有四种,而无疑最为主流就是XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。在网上可以找到很多的XMPP资料,这里就不在赘述了,不然越扯越多。总之,XMPP主要显著的优点主要有以下几个方面:

1、 分布式  任何人都可以运行自己的XMPP服务器,它没有主服务器

2、 安全性很高。使用SASL及TLS等技术的可靠安全性

3、 开发性 它是开源的,易于进行学习和了解

4、 跨平台  毋庸置疑,使用的XML进行传输的

说完优点,我们言归正传,基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。而如果把它直接用在Android上是不行的,因为android缺少了一些java的类库,于是一个改进版的asmack诞生了,它是专门为android而改进的android smack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是android push notification,简称androidpn。

Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不得不提到XMPP的具体细节。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提到的信息发送到服务器端,怎么发送消息的呢?以<stream>根节点的方式开始传递,只有在服务器和客户端关闭的时候才会发送它的结束标记</stream>。客户端通过XMPP协议只用做的就是接收消息,而所有其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。那么客户端和服务器端的消息回应是如何实现的?如要通过一个ID来标识,具体细节可以去查看XMPP协议。

一旦注册绑定后,服务器端就和客户端建立了连接,客户端只用负责去接收消息。所以当我们应用Androidpn的时候,客户端会非常的简单。而在服务器端,Androidpn又做了什么呢?

服务器端的展示方面,androidpn主要用到的技术是Spring和Hibernate。主要是用来展示用户状态和发送信息用的,如下图:
附件的图片1 和图片2

这方面的技术已经比较成熟,就不再细说了,主要要说的还是XMPP的管理。在服务器端的源码中一个org.androidpn.server.xmpp.net.Connection类,主要是代表一个服务器上的XMPP连接,注意只是一个,它可以确保在服务器关闭的时候,发送一个</stream>标记到客户端,告知连接断开,需重新连接。

org.androidpn.server.xmpp.session.SessionManager主要用户管理所有会话,比如连接断开,删除session以及建立连接,添加session等等。

而在管理Socket连接的时候,androidpn采用了MINA框架来进行管理,MINA的优点就是改变了我们传统的管理socket的方式,比如没建立一个socket开一个线程,而MINA可以实现多个线程管理N多个用户。在处理高并发的推送上无疑是有巨大的好处的。

合理的利用监听器来管理session,也是androidpn的优点。在安全性方面,制定了TLS(安全传输层)策略,并却采用了安全认证,这些方面都做的不错。

当然,不可避免的30秒钟的心跳包还是必不可少的。

总之,用Androidpn好处有以下方面:采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议);良好的框架支持(专门为android 而产生的推送框架asmack,以及很好的管理socket的框架MINA,都是很成熟的产品);完全开放的源代码(我们可以在androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代码,降低了android的开发难度。缺点不言而喻,使用了太多的框架,如果想要改一些具体的实现,可能会迁移发动全身。不过如果你个懒人的话,完全满足你的需求了。



最后是我整理的androidpn的源码,完全可以使用。原来的服务器端用的jetty框架来代替tomcat的,我把它又重新整合到了tomcat下,可以完美的和你的服务器端融合。懒人们,来吧~~由于文件过大,所以用了外连~~喜欢的就去下载吧。。只需要改下client的raw文件夹下的ip地址就可以运行。。androidpn下载地址
关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池;SMS(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是很难找到免费的网关来发送短信;最后就是持久连接,主要是Socket通讯,这个解决了性能问题,但是耗电问题依旧没能解决。
在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较成熟的及时消息传递协议共有四种,而无疑最为主流就是XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。在网上可以找到很多的XMPP资料,这里就不在赘述了,不然越扯越多。总之,XMPP主要显著的优点主要有以下几个方面:

1、 分布式  任何人都可以运行自己的XMPP服务器,它没有主服务器

2、 安全性很高。使用SASL及TLS等技术的可靠安全性

3、 开发性 它是开源的,易于进行学习和了解

4、 跨平台  毋庸置疑,使用的XML进行传输的

说完优点,我们言归正传,基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。而如果把它直接用在Android上是不行的,因为android缺少了一些java的类库,于是一个改进版的asmack诞生了,它是专门为android而改进的android smack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是android push notification,简称androidpn。

Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不得不提到XMPP的具体细节。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提到的信息发送到服务器端,怎么发送消息的呢?以<stream>根节点的方式开始传递,只有在服务器和客户端关闭的时候才会发送它的结束标记</stream>。客户端通过XMPP协议只用做的就是接收消息,而所有其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。那么客户端和服务器端的消息回应是如何实现的?如要通过一个ID来标识,具体细节可以去查看XMPP协议。

一旦注册绑定后,服务器端就和客户端建立了连接,客户端只用负责去接收消息。所以当我们应用Androidpn的时候,客户端会非常的简单。而在服务器端,Androidpn又做了什么呢?

服务器端的展示方面,androidpn主要用到的技术是Spring和Hibernate。主要是用来展示用户状态和发送信息用的,如下图:
附件的图片1 和图片2

这方面的技术已经比较成熟,就不再细说了,主要要说的还是XMPP的管理。在服务器端的源码中一个org.androidpn.server.xmpp.net.Connection类,主要是代表一个服务器上的XMPP连接,注意只是一个,它可以确保在服务器关闭的时候,发送一个</stream>标记到客户端,告知连接断开,需重新连接。

org.androidpn.server.xmpp.session.SessionManager主要用户管理所有会话,比如连接断开,删除session以及建立连接,添加session等等。

而在管理Socket连接的时候,androidpn采用了MINA框架来进行管理,MINA的优点就是改变了我们传统的管理socket的方式,比如没建立一个socket开一个线程,而MINA可以实现多个线程管理N多个用户。在处理高并发的推送上无疑是有巨大的好处的。

合理的利用监听器来管理session,也是androidpn的优点。在安全性方面,制定了TLS(安全传输层)策略,并却采用了安全认证,这些方面都做的不错。

当然,不可避免的30秒钟的心跳包还是必不可少的。

总之,用Androidpn好处有以下方面:采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议);良好的框架支持(专门为android 而产生的推送框架asmack,以及很好的管理socket的框架MINA,都是很成熟的产品);完全开放的源代码(我们可以在androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代码,降低了android的开发难度。缺点不言而喻,使用了太多的框架,如果想要改一些具体的实现,可能会迁移发动全身。不过如果你个懒人的话,完全满足你的需求了。



最后是我整理的androidpn的源码,完全可以使用。原来的服务器端用的jetty框架来代替tomcat的,我把它又重新整合到了tomcat下,可以完美的和你的服务器端融合。懒人们,来吧~~由于文件过大,所以用了外连~~喜欢的就去下载吧。。只需要改下client的raw文件夹下的ip地址就可以运行。。androidpn下载地址

本文转载自:http://www.iteye.com/topic/1117043#2266007


如果需要使用轮询方式,则可以使用handler实现,很简单如下





      private boolean isRunning = true;

      private final int LOOP = 1;


      public Handler handler = new Handler(){

                       public void handleMessage(Message msg){

                              switch(msg.what){

                                                            case LOOP:


                                                                             //1、业务逻辑处理代码


                                                     if(isRunning){

                                                          //2、向服务器请求数据代码

                                                       Message message = obtainMessage(LOOP);

                                                       sendMessagedelayed(message ,30*1000);

                                                            break;


                                     }
  

                                      }

                                        


                        }


      }

  • 大小: 25.8 KB
  • 大小: 10.6 KB
  • 大小: 10.6 KB
  • 大小: 25.8 KB
分享到:
评论

相关推荐

    Android中利用App实现消息推送机制

    Android 中实现消息推送机制是指在 Android 应用程序中,通过后台服务实现消息推送功能,以便在应用程序不在前台运行的情况下,仍然能够及时地将重要信息推送给用户。下面是实现 Android 消息推送机制的关键知识点:...

    Android:最全面解析Android消息推送解决方案.docx

    今天,我们将全面介绍 Android 中实现消息推送的 7 种主流解决方案。 一、前言 随着运营需求的增强,消息推送在 Android 开发中应用的场景是十分常见的。作为开发者,不要有需求就接,应该多思考、多理解用户 / ...

    android通过Service实现消息推送(客户端+服务器)

    在Android开发中,消息推送是一项关键功能,它能让应用程序在后台运行时接收并处理服务器端的重要更新,即使用户没有直接与应用交互也是如此。本教程将详细介绍如何通过Service组件实现一个客户端的消息推送系统,并...

    MQTT协议实现android消息推送

    **MQTT协议实现Android消息推送** 在移动应用开发中,实时消息推送是一项关键功能,它能让用户及时接收到新信息、通知或者系统更新等。本文将深入探讨如何使用MQTT(Message Queuing Telemetry Transport)协议来...

    c#实现消息推送

    本文将深入探讨如何使用C#语言结合Apollo代理服务器来实现C#与Android设备之间的消息推送。Apollo是一款开源的消息中间件,它提供了高可用、高性能的消息传递服务,广泛应用于分布式系统中。 首先,我们需要了解C#...

    RabbitMQ实现Android消息推送.zip

    基于SpringBoot、RabbitMQ的Android消息推送平台搭建。亲测可用。有的公司对所要推送的消息保密要求比较高,不希望被第三方看到,可以使用此种方式进行消息推送。如果所要推送的人群比较多,可以搭建RabbitMQ集群...

    Android消息推送实例加详细注释完整可运行的源码

    本教程将通过一个详细注释、完整可运行的源码实例,来探讨如何在Android中实现消息推送。这个实例包含了所有必要的组件和逻辑,非常适合初学者深入理解这一技术。 首先,我们需要理解消息推送的两种主要机制:...

    Tcp实现android消息推送

    在Android平台上实现消息推送,通常开发者会选择使用第三方服务,如Firebase Cloud Messaging (FCM) 或者其他商业推送服务。然而,如果你希望自主构建一个推送系统,可以借助TCP(传输控制协议)来实现实时的数据...

    android实现消息推送源码.rar

    本资源"android实现消息推送源码.rar"提供了一个实现这一功能的源代码示例,这对于开发者来说是学习和理解消息推送机制的宝贵资料。 消息推送在Android中的实现通常涉及以下几个关键知识点: 1. **GCM(Google ...

    Android基于mqtt消息推送通知指南

    Android 消息推送通知是 Android 应用程序中的一项重要功能,它允许服务器向手机客户端发送实时的通知消息。然而,实现 Android 消息推送通知远比 iPhone 上的推送通知解决方案复杂。Google 提供了 C2DM(Cloud to ...

    Android 消息推送源码

    综上所述,`Android消息推送源码`主要涉及后台服务的实现,如何处理和展示来自FCM的推送消息,以及通过`PendingIntent`实现点击通知后的跳转逻辑。理解这些概念对于开发一个完整的消息推送功能至关重要。

    安卓消息推送通知栏相关-Android百度云推送通过百度云推送的SDK和下载的demo实现一个简单的消息推送.rar

    总的来说,通过集成百度云推送SDK并参照示例项目,开发者可以轻松地在Android应用中实现消息推送功能,提高用户体验,增加应用的活跃度。但需要注意,随着Android系统的更新,推送通知的实现可能会有所变化,因此...

    Android中利用App实现消息推送机制的代码实例

    在Android应用开发中,消息推送是一项关键功能,它能让服务器主动向客户端发送信息,即使应用不在前台运行也能接收到通知。以下是一个简单的Android消息推送机制的实现步骤和代码实例: 1. **理解消息推送机制** ...

    android基于xmpp实现消息推送1--相关文档

    在Android平台上实现消息推送...通过以上步骤,开发者可以在Android应用中实现稳定且高效的即时消息推送服务。在实际项目中,还需要考虑到安全性、性能优化、以及不同网络环境下的兼容性问题,以确保良好的用户体验。

    Android socket编程实现消息推送Server+Client

    在这个"Android socket编程实现消息推送Server+Client"的项目中,开发者创建了一个模拟QQ消息推送原理的系统,支持点对点(p2p)和服务器到客户端(s2p)的消息传递。 首先,我们要理解Socket的工作原理。Socket...

    android消息推送

    在Android平台上,消息推送是...理解并熟练掌握消息推送的原理、实现方式以及优化策略,是Android开发者必备的技能之一。通过研究“YiIM_V4-master”这样的开源项目,开发者可以深入学习如何在实际项目中实现这一功能。

    android xmpp的消息推送

    在Android应用开发中,消息推送是一项关键功能,它能让用户即使在不使用应用时也能收到实时更新和通知。本文将深入探讨基于XMPP(Extensible Messaging and Presence Protocol)的Android消息推送技术,以及如何实现...

    基于Android的消息推送系统

    一个Android消息推送系统,包括Android客户端和服务端的实现。客户端支持长连接和短连接方式,长连接采用MQTT协议,短连接采用HTTP协议。服务端整合到web项中目中,有一个简单的界面进行操作处理。

    Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar

    Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码....

    android利用WebSocket实现消息推送

    在Android平台上,利用WebSocket实现消息推送,可以让应用程序实时接收服务器端发送的数据,例如社交应用的新消息通知、股票市场的实时更新等。 一、WebSocket简介 WebSocket协议是在HTTP的基础上建立的持久连接...

Global site tag (gtag.js) - Google Analytics