基于Android平台的报警信息推送


  [摘 要]消息推送在实际生活中有着广泛的应用,尤其是对重要的信息推送更是有着极高的需求。当用户需要实时的获取重要信息时,通过消息推送技术能够将报警信息推送至Android移动端。本文主要介绍了以报警信息为例的消息推送工作原理。
  [关键词]Android平台;消息推送;长连接;
  中图分类号:S145 文献标识码:A 文章编号:1009-914X(2018)24-0371-01
  0 前言
  消息推送是现今App的重要组成功能部分,其中报警信息的推送是消息推送结构的主要分支。实体设备发生故障时将会造成严重影响,因此及时的发现和对故障的处理极其重要。当某设备发生故障时,报警信息应第一时间的发送至移动智能设备。即使在App后台运行或未打开时,报警信息也能准确推送给使用者。
  1 消息推送原理
  推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息,用户端要保证与服务器的连接。因此推送的基础原理是维护一个长连接,如果使用socket连接将对服务器带来巨大的消耗。因此出现了MQTT这种轻量级低消耗协议来维护长连接。消息推送技术的实现技术主要有以下几种:
  (1)基于HTTP长连接的消息推送技术
  长连接(长轮询long-polling)技术建立在HTTP基础上,在请求/应答的模式下构建出一种“服务器推送”的处理措施,并发展为Comet技术框架。Comet基于HTTP长连接技术,无需安装第三方插件。在HTTP的版本中,HTTP/1.1能够很好的支持长连接。
  (2)基于消息中间件的消息推送技术
  消息中间件通过可靠而高效的的消息传递体系实现了平台相关的信息沟通,普遍的运用在分布式系统的搭建。对于消息中间件而言,由于其结构较为独特,不但能够在实时消息通信方面实现零距离传输,并且对于消息推送系统的构建也十分便捷。
  (3)基于SMS的消息推送技术
  在Android系统中,SMS可以对消息进行拦截,同时对消息内容解析处理,从而获得服务器的意图进而与服务器进行良好的通信。然而,目前用于发送消息的网关均需收费,因此将带来较高的成本。
  因此我们这里采用了基于HTTP长连接的原理来实现消息推送。
  2 消息推送的实现
  基于Android平台的报警信息推送的结构图如图1所示。
  移动智能设备在报警推送模块中起着桥梁的作用,它连接了智能门店管理系统App与服务器,通过底层I/O管理从服务器端获取信息并推送给App。同时它会对消息进行编解码,转换数据成为App可识别的格式。除此以外,它还负责App的长连接保持。
  连接管理主要由I/O管理、编解码器和长连接。长连接的实现是通过发送心跳包来实现的。系统定时向服务器发送心跳包,一旦发送失败则证明连接断开,此时将重启连接机制。
  App接口是智能门店管理系统App使用消息推送功能的接口,智能门店管理系统通过调用该接口获取服务器端发送的数据,也同样通过该接口反馈信息至服务器。
  (1)连接与发送消息的实现
  连接服务器需要用到asmack类库所提供的XMPPConnection,XMPPConnection是一个封装了底层Socket连接的类,基于TCP/IP协议完成与服务器端的连接。同时为其绑定读写器(PacketReader,PacketWriter)。由其完成对数据的封装和解析。
  我们通过继承asmack类库的IQ基类来封装自己的数据,在XMPPManager中获取连接并用编解码器完成对数据的封装,最后通过PacketWriter反馈消息给服务器端。
  (2)接收推送信息的实现
  智能门店管理App接收推送消息的过程是,App通过ServiceManager启动NotificationService来启动服务监听线程池。监听线程中的监听程序负责一直监听socket连接的数据变化。通过XMPPManager获取XMPPConnection和数据包监听器,并将PacketReader初始化编解码器绑定数据源以准备处理数据,时刻监听socket连接数据包的变化。当服务器端有数据送达时,监听器会通知PacketReader类接收消息,数据源来自于底层Socket。通过parsePackets()将不同类型的消息交给不同的解码器进行处理。服务器以IQ包的形式发来消息,因此将通过NotificationIQProvider处理数据,解析出从服务器端发送来的消息内容,并且封装成一个新的消息包notification(IQ的子类)。processPacket()方法将对消息进行再次处理,接着想系统监听器的管理器注册一个监听。当有数据到来时,相关的监听都将被触发。ListenerNotification会将消息packet交给类ListenerWrapper進行处理。ListenerWrapper中的方法notifyListener()将该消息通知给所有监听器。NotificationPacketListener将被服务器端发来的消息所触发,监听到Packet后将其转换为NotificationIQ消息,将消息内的属性内容解析出来构造一个intent。此时,先向服务端发送回执消息,接着将intent向Android系统广播。Android系统中的Broadcast接收器NotificationReceiver负责接收NotificationPacketListener广播的消息,收到intent后取出参数,调用Notifier发送消息至系统。Notifier里构造一个PendingIntent,设置广播的内容与标题,然后将广播分发出去,智能门店管理App将接收到响应广播,从而完成消息的接收。
  3 结语
  在移动信息互联网迅猛发展的当今社会,人们对信息的实时获取有着越来越高的要求。基于Android平台的报警信息推送系统将通过长连接技术建立移动端与服务端的连接,能够按用户定制将对应的信息及时的推送到达。消息推送技术的稳定实现能够更全面,更及时的满足用户对消息推送的需求。
  参考文献
  [1] 王龙涛.基于XMPP协议的服务器关键技术研究[D].西安.西安电子科技大学,2008.
  [2] 殷昊.基于Android平台的消息推送能力的研究与实现[D].北京.北京邮电大学,2013.
  [3] 张长学,张伟,董智明.移动推送技术面面观[J].移动通信2011.
  作者简介
  赵雅萍(1992.05.16)女,陕西省西安市人,硕士学历,专业:模式识别和智能系统。