推送并不是什么新技术,这种技术在互联网时代已经很流行了。只是随着进入移动互联网时代,推送技术显得更加重要。因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示更多的信息(如图像、表格、声音等)。
  推送技术的实现通常会使用服务端向客户端推送消息的方式。也是说客户端通过用户名、Key等ID注册到服务端后,在服务端可以将消息向所有活动的客户端发送。
  实际上,在很多移动操作系统中,官方都为其提供了推送方案,例如,Google的云推送、IOS、Windows Phone7/8也都提供了类似的推送方案。不过这些推送方案的服务器都在国外,有一些推送服务(如Google的云推送)在国内由于某些原因不太稳定,所以国内近几年涌现出了很多专门为国人打造的推送服务。
  本文将从各种流行移动操作系统入手介绍推送技术的各种实现方式。当然,我们的主要目的是讨论Android的推送技术。
  一、iOS的推送技术
  Apple为IOS提供了很完美的推送方案,其基本原理是Apple提供了自己的推送服务器,叫APNS(Apple Push Notification Service,苹果推送通知服务器)。而客户端设备(IPhone、IPad等)直接与APNS建立长连接。不过向客户端设备发送的消息并不是由APNS产生的,而是在需要发送消息的用户自己提供的服务器(称为Provider)中产生的,然后Provider将消息传送给APNS,后由APNS将消息传送给客户端设备。也是说,消息开始由Provider产生,然后Provider将消息传送给APNS,后再由APNS传送给客户端设备。消息传递的过程如图1所示。

  在发送消息到客户端设备接收到消息的过程中,始终伴随这一个令牌的传送(device token)。要想使用APNS提供消息服务,应用程序需要先向IOS注册需要提供的一个必要的信息是与当前设备有关的device token,IOS在接收到devicetoken后,会向APNS查询这个device token是否在APNS上注册了(所有的IOS设备在第一次使用时都需要向苹果服务器注册一个账号,否则无法从AppleStore下载应用,当然更无法使用推送服务了),如果已经注册,APNS会直接向应用程序返回这个devicetoken。应用程序获得这个devicetoken后,表示APNS已经允许向自己推送消息了,接着还需要将该device token发送给推送服务器(Provider)。到这里应用程序已经成功将自己注册到APNS中了。现在可以通过Provider产生要推送的消息,然后Provider会将消息发送给APNS服务器,后APNS服务器会直接向应用程序发送消息。这个过程比较复杂,不过看一下图2的描述会对这一过程更加了解了。每一个流程描述前面的数字表示发送的时间先后顺序。

  二、Windows Phone的推送技术
  微软为Window Phone提供的推送方案与IOS类似,也需要自己准备推送服务器(可以称为Cloud Service)。只是表示设备的ID变成了Uri。在Window Phone中有一个Push Client Service(PCS)。所有需要推送服务的应用程序都需要与Push Client Service通信。下面是Window Phone推送的基本步骤,读者可以与图3对照来看这一过程。
  第1步:应用程序会向Push Client Service请求一个Push Notification URI(①)。
  第2步:如果当前Window Phone设备已经在微软服务器注册了,Push Client Service会从MPNS(Microsoft Push Notification Service ,微软推送通知服务)获取Push Notification URI,并返回给应用程序,表示推送服务可用(②和③)。
  第3步:应用程序需要将Push Notification URI发送给自己的推送服务器(Cloud Service)(④)。
  第4步:如果需要推送消息,Cloud Service会将消息发送到MPNS,然后MPNS会将消息发送给Push Client Service,后由Push Client Service将消息传送给应用程序(⑤、⑥和③)。