Android 推送技术浅析(1)-概述

在当今信息爆炸的时代,人们对于充斥在身边的各种信息、资讯几乎都有些麻木了。大量无关的甚至是垃圾信息不断骚扰人们的神经,因此个性化、社交化的应用也是大行其道。比如一些新闻客户端,会根据用户的使用习惯或订阅要求,每隔一段时间或当特定新闻发生时向用户发送指定的新闻内容;再比如常用的一些即时通讯软件如微信、米聊、GTalk、个信等,都是可以实时地将私密信息送到用户的终端。这背后用到的技术就是消息的推送。

本文讨论的消息推送特指从服务器端向移动终端设备进行特定格式信息流传递的过程。 与传统服务器端到服务器端通讯最大的区别就在于移动终端的不确定性。举个生活中的例子,服务器端好比是北京的“水立方”游泳馆,闻名遐迩,有明确而且固定的地址(IP或域名),大家要游览(访问)“水立方”可以很方便的找到她。但是反过来,“水立方”要想找到某个具体的“游客”就很难了,因为每个“游客”没有确定的地址(每次登录网络都可能变更IP)。

怎样才能随时找到散落各处的“游客”呢?移动运营服务商提供了一个有效的途径-SMS。通过移动终端的唯一标识(手机号码),运营商可以在网络允许的情况下,随时随地找到某个终端用户,并且提供语音和短信息服务。看来这个问题似乎可以圆满解决了!可是有两座大山挡在了开发者面前。其一,号码资源作为运营商的垄断资本不会轻易开放出来,事实上在android手机上要想绕开运营商获得手机号码绝不容易;其二,短信内容的拦截、解析与匹配本身技术门槛较高,并且日益受到各类安全软件的监控和限制,对于开发者来说实在不是一种合适的选择。

既然此路不易走,有没有其他便捷的选择呢?答案是肯定的,而且也很容易实现。我们回头再看,既然服务器端找到客户端不容易,而客户端找到服务器端很容易,那么就可以让消息推送的过程反转过来。首先由客户端来定时访问服务器端,建立某种联系(通常为http请求)。之后,服务器端就可以轻松地将信息通过这种联系通道发给客户端了。这就是通常说的轮询模式。这种模式比较实现成本较低,但具体到移动终端设备上,却存在致命缺陷:高频的轮询导致流量和电量消耗极高,低频的轮询又会导致消息的及时性很差。 

说了两种方式,结果都有这样那样的缺陷。有没有更好一些的实现方式呢?的确是有的,而且android的竞争对手苹果已经很好地实现了这种方式-持久化连接。苹果信息推送服务(Apple Push Notification Service)提供了苹果移动终端与服务器端的长连接,通过这条通路,服务器端可以实时找到某个移动终端,自然也就可以推送消息了。同样地,在android系统上也可以实现类似苹果APNS的推送机制。目前主流的实现协议包括:C2DM、XMPP和XQTT等。关于Android上几种主流持久化连接推送方式的详细介绍,将会在后续文章中陆续提供。同时,国内外的一些技术公司,也看准了android信息推送的广阔市场,将这些协议进行封装、改造,形成了各具特色的android推送解决方案,比如国外的airpush、pubnub,国内的蝴蝶、个推等。开发者想要快速获得android上的信息推送能力,也可以考虑集成这些厂商的SDK。

 

你可能感兴趣的:(android)