推送通知技术是如何在安卓系统上工作的



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

根据我在以色列安卓开发者会议上听到的消息:

在云谷歌服务器上,只有一个TCP套接字在接受模式下等待。TCP连接是由Google Play应用程序启动的。这就是为什么必须在设备上安装Google Play才能使谷歌云消息(GCM)(前身为安卓云到设备消息服务-C2DM)正常工作。

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

即使设备的无线电状态变为"空闲"模式,TCP套接字也会保持打开状态。应用程序不必运行就可以接收意图。

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

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

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

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

取自:来源另请参见此处。

您可以通过长轮询tcp连接在android上自己实现推送通知。但这需要额外的插座=>电池电量。也可以使用"报警管理器"定期打开连接。

谷歌可能会为所有C2DM推送通知打开一个插座,因此它的电池效率更高。

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

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

是的,你说得对。谷歌有一项服务(GTalk服务),该服务在一段时间内询问谷歌服务器。

最新更新