推送通知如何工作?


25

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

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


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

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

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

Answers:


25

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

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

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


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

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

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

6

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

希望对您有所帮助。


有没有办法不必依靠Google的服务器来做类似的事情?
迈克尔

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

1

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

GCM于2018年4月被弃用,谷歌建议使用FCM类似于GCM。

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

1
从应用程序的角度来看,FCM与GCM不同,它是相同的。FCM只是GCM的新名称。
罗伯特
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.