gpt4 book ai didi

安卓 GCM : understanding XMPP

转载 作者:搜寻专家 更新时间:2023-11-01 08:39:50 25 4
gpt4 key购买 nike

我正在尝试使用应用程序在我的 GCM 中实现 XMPP 协议(protocol),但即使在广泛搜索之后,我也不理解其背后的概念。

另外,也许我真的不需要 XMPP 来完成我想用我的应用程序做的事情,但我喜欢学习东西。

让我们以这个例子来说明我可以用 HTTP 做什么:

  1. 我的应用程序将“hello word”和 regId 发送到我的小型个人服务器:url.openConnection(""),然后是用于发送 POST 数据的 OutputStreamInputStream 获取响应

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

  3. GCM 服务器做他的事

  4. 我的应用程序(可能在另一部手机上)在 WakefulBroadcastReceiver 中使用 IntentService 获取消息作为 intent.getExtras().getString( “我的回应”)

这很有效,我可以使用我的应用程序将消息从一部手机发送到另一部手机,并在此过程中在我的服务器上收集数据。

问题很少

理论上这种处理 HTTP 的方式是否可行? (我看了很多帖子和教程,尤其是谷歌的,但还是不太确定)

大问题

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

我不需要教程或代码 fragment ,我想了解信息是如何通过这个我不太了解的协议(protocol)的(我设法在我的服务器上安装了 ejabberd,并在我的 PC 和 Xabber 上使用了 pidgin在我的手机上)。

最佳答案

Official定义:

The Google Cloud Messaging (GCM) Cloud Connection Server (CCS) is an XMPP endpoint that provides a persistent, asynchronous, bidirectional connection to Google servers.

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

两者的一些区别:
1) 与 HTTP 不同,对于 XMPP 消息,您不需要在每个有效负载中包含身份验证 header ,因为服务器在连接时已通过身份验证,并且我们保持相同的连接。
2) CCS 使用 XMPP 作为传输层,因此在您成功建立连接后,您可以交换节。
3) 如果您愿意,您可以继续对下游使用 HTTP,而仅对上游使用 XMPP。
4) 在 XMPP 中使用 to: 而不是 registration_ids 参数,我们只能通过一个节发送到一个 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(如果需要)。

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

希望对您有所帮助!

关于安卓 GCM : understanding XMPP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com