用于在Android中发送推送通知的协议

时间:2014-04-15 07:41:35

标签: android push-notification protocols google-cloud-messaging android-notifications

我想知道哪个协议用于向Android设备发送推送通知以及向GCM发送推送通知请求的协议。

无论是HTTP,HTTPS还是其他什么东西?

4 个答案:

答案 0 :(得分:9)

第三方服务器和GCM服务器(HTTP或XMPP)之间的通信协议已在其他答案中提及。

GCM文档中未讨论设备与GCM服务器之间的通信协议,因为您无需直接以Android应用程序开发人员的身份访问它,因此您无需了解它。

但是,这是来自创建GCM的团队的Google开发人员的引用,其中提到了有关连接的一些信息。根据他的说法,你只能知道它是一个长期存在的TCP连接。

  

GCM维护一个长期连接 - 如果它知道,则重新连接   连接被打破了。路由器/ AP / NAT应该发送FIN或   RST终止TCP连接 - 所以GCM和服务器都会知道   连接已经死了。

     

然而,许多路由器和移动运营商都没有这样做,并且   然后GCM需要依靠心跳,在Wifi上大约15分钟,更多   移动。

(引述来自该人的answer

答案 1 :(得分:6)

有两个协议http和xmpp可用于向GCM服务器发送消息。

现在取决于您想要使用的内容。如果你想广播消息,那么你应该使用http。

您可以在一个http请求中广播1000条消息。并且在请求中只有一条消息通过xmpp ...

Http只能用于下传(第三方应用服务器-gcm-mob设备)

但gcm不支持使用http进行流式传输。 为此你应该使用xmpp.Xmpp可以用于向上流线化和向下传输。

如果您使用http,那么推送通知的实现可以非常简单,如果您使用xmpp,那么实施更加困难。但Google提供了如何实施xmpp的详细教程。 所以,请查看Google开发者网站。

答案 2 :(得分:2)

查看@user3523641的答案和进一步的对话,我将尝试进一步解释:

传递邮件的方式取决于您选择的协议HTTPXMPP(即它是相同的)。 magic 和基本工作方式是在GCM服务器和用户设备之间打开套接字。

这样,当用户收到消息时,将使用此打开的套接字并通过自身发送消息。这也有助于GCM服务器知道哪些设备已连接。所以这样,如果你的第三方服务器说一条消息应该发送给用户并且GCM服务器知道用户没有连接,那么它当时不会发送它,但会尝试一次连接再次建立,因此它不会浪费连接尝试。默认超时为4 weeks,但可以更改。

根据官方GCM文档:

  

如果设备未连接到GCM,则将存储该消息,直到建立连接(再次遵循折叠键规则)。建立连接后,无论delay_while_idle标志如何,GCM都会将所有未决消息传递给设备。如果设备永远不再连接(例如,如果它是出厂重置),则该消息最终会超时并从GCM存储中丢弃。默认超时为4周,除非设置了time_to_live标志。

     

最后,当GCM尝试向设备发送消息并卸载应用程序时,GCM将立即丢弃该消息并使注册ID无效。将来尝试向该设备发送消息将导致NotRegistered错误。有关详细信息,请参阅取消注册的工作原理。

您可以找到更多信息here

答案 3 :(得分:0)

它同时使用 HTTP XMPP

成功处理消息后,HTTP响应具有200状态,正文包含有关消息状态的更多信息(包括可能的错误)。请求被拒绝时,HTTP响应包含非200状态代码(例如400,401或503)。

但是,iOS需要专用端口上的专用TCP连接,并且GAE环境不允许除端口80上的HTTP之外的任何外部协议。

enter image description here

邮件大小限制为1024字节。     Google会限制发件人汇总发送的邮件数量,以及发件人发送给特定设备的邮件数量

enter image description here

这就是这些组件的互动方式:

Google提供的GCM连接服务器从第三方应用服务器接收消息,并将这些消息发送到设备上运行的支持GCM的Android应用程序(“客户端应用程序”)。目前,Google为HTTP和XMPP提供连接服务器。     第三方应用程序服务器是您实现的组件,用于处理所选的GCM连接服务器。应用服务器将消息发送到GCM连接服务器;连接服务器将消息排队并存储,然后在设备联机时将其发送到设备。有关更多信息,请参阅实现GCM服务器。     客户端应用程序是在设备上运行的支持GCM的Android应用程序。要接收GCM消息,此应用必须向GCM注册并获取注册ID。如果您使用的是XMPP(CCS)连接服务器,则客户端应用程序可以将“上游”消息发送回连接服务器。有关如何实现客户端应用程序的更多信息,请参阅实现GCM客户端。

查看此内容以了解更多详情 - >

Google Cloud Messaging for Android (GCM)

Android Cloud to Device Messaging Framework

Cloud Messaging

Cloud to Device Messaging