我正在尝试使用应用程序在我的 GCM 中实现 XMPP 协议,但即使经过广泛搜索,我也不理解其背后的概念。
另外,也许我并不真的需要 XMPP 来完成我想用我的应用程序做的事情,但我喜欢学习东西。
让我们以 HTTP 为例:
-
我的应用程序将“hello world”和 rigId 发送到我的小型个人服务器:url.openConnection("")
, then OutputStream
用于发送 POST 数据和InputStream
为了得到回应
-
服务器在这个url处,将“hello word”消息与regId一起放入数据库中,然后使用php的curl库将数据作为json字符串发送到GCM服务器,例如{"myResponse":"I'm not world I'm Dan"}
(在模拟器中使用测试目标 ID)
-
GCM服务器做他的事
-
我的应用程序(可能在另一部手机上)使用IntentService
in a WakefulBroadcastReceiver
得到的消息为intent.getExtras().getString("myResponse")
这很有效,我可以使用我的应用程序将消息从一部手机发送到另一部手机,并一路收集服务器上的数据。
问题很少
这种处理 HTTP 的方式理论上可行吗? (我看了很多帖子和教程,尤其是谷歌的,但还是不确定)
真正的大问题
使用 XMPP 执行相同操作的步骤是什么?
我不需要教程或代码片段,我想了解信息如何通过这个我不太了解的协议(我设法在我的服务器上安装 ejabberd 并在我的 PC 上使用 pidgin,在我的手机上使用 Xabber )。
Official https://developers.google.com/cloud-messaging/ccs定义:
Google Cloud Messaging (GCM) 云连接服务器 (CCS) 是一个
XMPP 端点提供持久、异步、双向
连接到 Google 服务器。
与 CCS 建立连接是第一步,也是最重要的一步。一旦完成此操作并保持长期连接,其他部分就不那么棘手了。
两者之间的一些区别:
1) 与 HTTP 不同,使用 XMPP 消息,您不需要在每个有效负载中包含身份验证标头,因为服务器在连接时经过身份验证,并且我们维护相同的连接。
2) CCS 使用 XMPP 作为传输层,因此在成功建立连接后,您可以交换节。
3) 如果您愿意,您可以继续对下游使用 HTTP,而仅对上游使用 XMPP。
4)代替registration_ids
参数使用to:
在 XMPP 中,我们只能通过一节发送到一个 RegID。
因此,如果我要解释一下您的示例如何与 XMPP 配合使用:
- 与CCS建立连接
- 发送上游消息 https://developers.google.com/cloud-messaging/upstream从客户端“Hello, World!”到您的服务器
- 一旦您的服务器收到此消息,请通过向 GCM 发送 ACK 进行确认
- For 下游消息 https://developers.google.com/cloud-messaging/downstream您可以选择使用 HTTP 或 XMPP
- 但如果 XMPP:接收、保存在数据库中并在发送响应时({"myResponse":"I'm not world I'm Dan"}
) 返回客户端(相同或不同的 RegID),向 CCS 发送下游节; CCS 将发送 ACK/NACK 以确认已收到消息
- 一旦客户端应用程序收到消息,您还将收到delivery_receipt(如果需要)。
除此之外,您可以通过阅读我在整篇文章中链接的官方文档来更深入地了解。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)