推送通知技术如何在Android上运行?
Google如何实施推送通知function? 通过在后台运行的服务进行轮询还是以不同的方式工作?
从我在以色列的Android开发人员大会上听到的消息来看:
在Google云服务器上只有一个TCP套接字以接受模式等待。 TCP连接已经由Google Play应用程序启动。 这就是为什么Google Play必须安装在用于制作Google Cloud Messaging(GCM) (以前的Android Cloud到设备消息传递服务 – C2DM )的设备上。
当这个TCP客户端套接字收到一些消息时,这个消息包含了信息,比如它应该被发送到的应用程序的包名,当然还有数据本身。 这些数据被parsing并打包成广播并最终由应用程序接收的意图 。
即使设备的无线电状态变为“空闲”模式,TCP套接字也保持打开状态。 应用程序不必运行来接收意图。
Android保持与Google服务器的一个活动连接,但不会占用太多的电量或数据,因为在将某个GCM消息发送到手机上的某个应用程序之前,不会传输任何stream量。 手机上只有一个连接,所有应用程序都使用该连接:安装使用GCM的新应用程序不会增加任何额外的负载。
GCM的第一步是第三方服务器(如电子邮件服务器)向Google的GCM服务器发送请求。 然后,该服务器通过该打开的连接将消息发送到您的设备。 Android系统通过查看消息来确定应用程序,并启动该应用程序。 该应用程序必须已经通过Android注册才能使用GCM,并且必须具有相关权限。 当应用程序启动时,它可能会立即使用消息中的数据创build通知。 GCM消息的大小非常有限,所以应用程序可能会打开与第三方服务器的正常连接以获取更多信息(例如,下载新电子邮件的标头)。
使用推送通知的优势在于,应用程序不必定期运行以检查新数据,同时节省电力和数据。 像GCM这样的集中式机制的好处是设备只需要一个开放的networking连接,而Android GCM系统是唯一需要继续运行的东西,而不是每个应用都必须在后台保持运行,以保持自己的networking连接到自己的服务器。
采取了这一点: 来源另见这里 。
您可以使用长轮询tcp连接在android上自己实现推送通知。 但是,这将涉及维持一个额外的sockets=>电池耗尽。 或者您可以使用Alarm Manager定期打开连接。
Google可能会为所有C2DM推送通知打开一个套接字,因此其电池使用效率更高。
你是对的。 谷歌有一个服务(GTalk服务),并在一段时间这项服务询问谷歌服务器。