我想知道推送通知系统如何工作?

是否有活动的TCP / IP连接在后台运行到Google服务器?

评论

请参阅Wikipedia-诚然有点难以阅读。基本上,用简单的话来说:客户端连接到服务器并要求获得通知-当信息可用时(或永不存在),答案就会“延迟”,然后是一个新的要求。因此,是的,这需要一个永久的后台TCP / IP连接来消耗电池电量。

@Izzy可能不正确,因为(1)文档说消息到达时创建了一个Intent,并且(2)Android上运行的内容可以保持打开状态,而Android永远不会杀死它?

@Michael哪个文档?我不是Android程序员,也不了解它的深度(而且这不是讨论区),所以我在这里可能无法与您争论。我听说可以动态地建立侦听器(用于广播),但是我从未听说过有关意图(恕我直言,它们必须在清单中声明)。我完全可以想象某些Google服务会执行“实际工作”,而该应用程序只是注册了“接收者”。上面的描述更“笼统”,而不是特定于Android的,我尝试使其保持简单;)

#1 楼

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

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

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

评论


我只添加1条评论:GCM消息的大小可以为4KB,因此不受此限制。 developer.android.com/google/gcm/gcm.html

–莫西
14年5月19日在11:27

什么使此连接保持打开状态?任何Android活动或服务都可以随时被杀死。

–迈克尔
2014年10月31日在1:27

谢谢(你的)信息。根据我的问题,您知道打开的套接字的URL是什么吗? (从设备到GCM服务器的连接的URL已打开并用于通知数据)

–Vahid
2015年10月18日,9:35

#2 楼

Android OS现在将GCM(Google云消息传递)用于Push Notification WS。您可以在这里得到更好的主意;它将为您提供有关完整推送通知服务及其生命周期的体系结构概述。

希望它会有所帮助。

评论


有没有一种方法可以不必依赖Google的服务器来做类似的事情?

–迈克尔
2014年10月31日在1:58

@Michael使用Amazon Cloud服务吗?他们似乎有一个可比的概念。但是对于“如何做”,这是错误的地方;)

– Izzy♦
2014年10月31日在7:32

#3 楼

对旧问题的回复较晚,但值得提出。

GCM于2018年4月不推荐使用,谷歌建议使用FCM代替,这类似于GCM。


我们不需要编写我们自己的注册或订阅重试逻辑
您可以使用Firebase Notifications,这是一种无服务器通知解决方案,带有Web控制台,任何人都可以向根据Firebase Analytics的见解来定位特定的受众。
它具有GCM的核心基础架构。
单个消息最多可以将4KB的有效负载传输到客户端应用。


评论


从应用程序的角度来看,FCM与GCM不同,它是相同的。 FCM只是GCM的新名称。

–罗伯特
19年8月28日在7:17