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


218

Google如何实施其推送通知功能?它是通过在后台运行或以其他方式运行的服务完成的轮询来工作的吗?


24
听起来对我来说是一个真正的问题。我很想知道答案,谷歌把我带到了这里。另一个质量问题再次关闭。
蒂诺·麦克拉伦

1
我也想知道这一点,并打算写一个问题,但是已经有一个问题了,所以绝对是一个好问题。
IgorČordaš2014年

Answers:


170

根据我在以色列举行的Android开发者大会上所听到的话:

在Google云端服务器上,只有一个TCP套接字在接受模式下等待。TCP连接已由Google Play应用程序启动。因此,必须在设备上安装Google Play才能使Google Cloud Messaging(GCM)(以前称为Android Cloud to Device Messaging Service- C2DM)正常工作。

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

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

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


1
但是我认为它也可以在模拟器上运行。我想到的是该设备使服务器保持其当前路径(IP)的最新状态。当Google服务器需要发送通知时,它将采用其当前路径并将邮件转发到该路径。我在某种程度上对吗?
卡瓦尔·拉扎

2
@Khawar Raza:当设备的IP由于某种原因而更改时,设备与服务器断开连接。发生这种情况时-根据设备的新IP,新连接会恢复正常。
塔尔·卡内尔

1
@Khawar Raza:即使没有Google Play模拟器也可以工作。我猜想它会在内部而不是Google Play上启动此套接字
Tal Kanel 2012年

2
我懂了。实际上,那将是非常有趣的,我想知道那是真的。
you786 2012年

2
因此,它仍然是轮询,但好的一面是,轮询是由Google Play集中管理的。
Accollat​​ivo

143

Android会保持与Google服务器的活动连接,但是它并不会消耗太多电力或数据,因为直到有人向您手机上的应用程序发送Google Cloud Messaging(GCM)消息之前,它都不会发送流量。手机上只有一个连接,所有应用程序都使用该连接:安装使用GCM的新应用程序不会增加任何额外的负载。

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

使用推送通知的优点是应用程序不必定期运行以检查新数据,从而节省了电量和数据。使用GCM这样的集中机制的优势在于,该设备仅需要一个开放的网络连接,而Android GCM系统是唯一需要保持运行的系统,而不是每个应用程序都必须在后台保持运行以保持自己的网络连接到自己的服务器。

摘自:来源 也请参见此处


1
只是有关GCM连接的评论。该单一连接是轮询连接。
wmac

1
对我而言,关键的部分是第三方服务器(例如电子邮件服务器)确实向Google GCM服务器发送了通知消息。这是Google免费提供的一项服务,任何此类第三方都必须使用其GCN协议与Google服务器建立通信渠道。顺便说一下,该协议几乎只是一个JSON格式的HTTP响应。有关详细信息,请参见developers.google.com/cloud-messaging
Kyselejsyreček

10

您可以通过长轮询tcp连接自己在android上实现推送通知。但这将涉及维护一个额外的插槽=>消耗电池。或者,您可以使用“警报管理器”定期打开连接。

Google可能会为所有C2DM推送通知打开一个套接字,因此其电池效率更高。


所以它确认客户端正在沿着TCP连接轮询吗?您知道它多久轮询一次数据吗?例如每5秒一次。还是像心跳一样快速?
j2emanue

3

截至2018年4月10日,谷歌已弃用GCM。不建议使用GCM服务器和客户端API,并将于2019年4月11日将其删除。将GCM应用程序迁移到Firebase Cloud Messaging(FCM),它继承了可靠且可扩展的GCM基础架构以及许多新功能。

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


1

你是对的。Google提供了一项服务(GTalk服务),该服务会在一段时间内询问Google服务器。


我不知道。我刚刚阅读了C2DM的工作原理。现在,某些事情可以改变。
尤里

-3

在Android设备上,当您收到推送通知时,发件人应用程序的图像和消息会显示在状态栏中。确切地说,当客户点击通知时,他/她就进入了应用程序。


这是一个在后台运行很长时间的TCP连接,答案上没有对此进行解释,请坚持该问题的要求:)
Nishchal Gautam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.