推送通知技术在Android上是如何工作的?

谷歌是如何实现他们的推送通知功能的?它是通过后台运行的服务进行轮询还是以不同的方式工作?

90233 次浏览

是的,你说得对。谷歌有一个服务(GTalk服务),这个服务在某些时间要求谷歌的服务器。

我在以色列的Android开发者大会上听到:

在云谷歌服务器上,只有一个TCP套接字在接受模式中等待。日志含义谷歌Play应用程序已启动TCP连接。这就是为什么谷歌播放必须安装在设备上,使云消息(GCM)(以前的Android云设备消息服务- C2DM)工作。

当这个TCP客户端套接字接收到一些消息时,该消息包含了诸如应用程序的包名等信息,当然还有数据本身。该数据被解析并打包到意图中,该意图被广播并最终被应用程序接收。

即使设备的无线电状态变为“空闲”模式,TCP套接字也保持打开状态。应用程序不需要运行来接收意图。

更多信息请访问http://developer.android.com/google/gcm/gcm.html

你可以在android上使用长轮询tcp连接来实现推送通知。 但这将涉及维护一个额外的插座=>电池耗尽。

.

.

.

.

谷歌可能为所有C2DM推送通知打开一个插座,因此它更省电。

Android与谷歌的服务器保持着一个活动连接,但它不会消耗太多电力或数据,因为在有东西向你手机上的应用程序发送谷歌云消息(GCM)之前,没有流量通过它发送。手机上只有一个连接,所有应用程序都使用:安装一个使用GCM的新应用程序不会增加任何额外的负载。

GCM的第一步是第三方服务器(如电子邮件服务器)向谷歌的GCM服务器发送请求。然后,服务器通过打开的连接将消息发送到您的设备。Android系统查看该消息以确定它是用于哪个应用程序的,并启动该应用程序。该应用程序必须已在Android上注册才能使用GCM,并且必须具有相关权限。当应用程序启动时,它可能会用消息中的数据直接创建一个通知。GCM消息的大小非常有限,所以应用程序可能会打开一个到第三方服务器的正常连接来获取更多信息(例如,下载新电子邮件的标题)。

使用推送通知的好处是,应用程序不需要定期运行来检查新数据,既省电又省数据。拥有像GCM这样的集中式机制的优势在于,设备只需要一个开放的网络连接,而Android GCM系统是唯一需要保持运行的系统,而不是每个应用程序都必须在后台运行以保持与自己服务器的网络连接。

来源 也可参见在这里.

截至2018年4月10日,谷歌已弃用GCM。GCM服务器和客户端api已弃用,最早将于2019年4月11日移除。将GCM应用程序迁移到Firebase Cloud Messaging (FCM), FCM继承了可靠和可扩展的GCM基础设施,以及许多新功能。

https://firebase.google.com/docs/cloud-messaging/