Android GCM:了解XMPP

时间:2015-11-20 11:56:17

标签: android google-cloud-messaging xmpp

我尝试使用应用在我的GCM中实施XMPP协议,但即使经过广泛搜索,我也不了解其背后的概念。

另外,也许我真的不需要XMPP用于我想用我的应用程序做什么,但我喜欢学习东西。

让我们举一个关于我可以用HTTP做什么的例子:

  1. 我的应用发送"你好的话"并且注册到我的小人物服务器:url.openConnection(""),然后OutputStream用于发送POST数据,InputStream用于获取响应

  2. 服务器,在这个网址上,输入" hello word"使用regId在数据库中显示消息,然后使用php的curl库将数据作为json字符串发送到GCM服务器,如{"myResponse":"I'm not world I'm Dan"}(在模拟器中使用测试目的地ID)

  3. GCM服务器开展业务

  4. 我的应用(可能在另一部手机上)使用IntentService中的WakefulBroadcastReceiver获取消息intent.getExtras().getString("myResponse")

  5. 效果很好,我可以使用我的应用程序将消息从一部手机发送到另一部手机,并在我的服务器上收集数据。

    很少提问

    这种处理HTTP的方式是理论上的吗? (我看过很多帖子和教程,特别是Google的帖子和教程,但仍然不确定)

    大问题

    使用XMPP执行相同操作的步骤是什么?

    我不想要教程或代码片段,我想了解信息通过此协议的方式我不太了解(我设法在我的服务器上安装ejabberd并使用pidgin我的电脑和Xabber在我的手机上)。

1 个答案:

答案 0 :(得分:3)

Official定义:

  

Google云消息传递(GCM)云连接服务器(CCS)是一个   XMPP端点,提供持久,异步,双向   与Google服务器的连接。

与CCS建立连接是这里第一步也是最重要的一步。完成此操作并保持长期连接后,其他部分就不那么棘手了。

两者之间存在一些差异:
1)与HTTP不同,使用XMPP消息时,您不需要在每个有效负载中包含Authentication头,因为服务器在连接时已经过身份验证,并且我们保持相同的连接。 2)CCS使用XMPP作为传输层,因此在成功建立连接后,您可以交换节 3)您可以继续使用HTTP作为下游,如果您愿意,只能将XMPP用于上游 4)而不是registration_ids param在XMPP中使用to:而我们只能通过一个节发送到一个RegID。

所以,如果我要解释你的例子如何与XMPP一起使用:
- 与CCS建立联系
- 从客户端发送upstream message到您的服务器" Hello,World!"
- 通过向GCM发送ACK确认服务器收到此消息后,确认 - 对于downstream message,您可以选择使用HTTP或XMPP - 但是如果XMPP:接收,保存在数据库中,并在将响应({"myResponse":"I'm not world I'm Dan"})发送回客户端(相同或不同的RegID)时,将下游节发送给CCS; CCS将发送ACK / NACK以确认已收到消息
- 一旦客户端应用程序收到消息,您还将收到delivery_receipt(如果请求)。

除此之外,您可以通过阅读我在整个帖子中链接的官方文档来更深入地了解。

希望这有帮助!