我想知道哪个协议用于向Android设备发送推送通知以及向GCM发送推送通知请求的协议。
无论是HTTP,HTTPS还是其他什么东西?
答案 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
的答案和进一步的对话,我将尝试进一步解释:
传递邮件的方式取决于您选择的协议HTTP
或XMPP
(即它是相同的)。 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之外的任何外部协议。
邮件大小限制为1024字节。 Google会限制发件人汇总发送的邮件数量,以及发件人发送给特定设备的邮件数量
这就是这些组件的互动方式:
Google提供的GCM连接服务器从第三方应用服务器接收消息,并将这些消息发送到设备上运行的支持GCM的Android应用程序(“客户端应用程序”)。目前,Google为HTTP和XMPP提供连接服务器。 第三方应用程序服务器是您实现的组件,用于处理所选的GCM连接服务器。应用服务器将消息发送到GCM连接服务器;连接服务器将消息排队并存储,然后在设备联机时将其发送到设备。有关更多信息,请参阅实现GCM服务器。 客户端应用程序是在设备上运行的支持GCM的Android应用程序。要接收GCM消息,此应用必须向GCM注册并获取注册ID。如果您使用的是XMPP(CCS)连接服务器,则客户端应用程序可以将“上游”消息发送回连接服务器。有关如何实现客户端应用程序的更多信息,请参阅实现GCM客户端。
查看此内容以了解更多详情 - >
Google Cloud Messaging for Android (GCM)