【问题标题】:Android GCM : understanding XMPPAndroid GCM:了解 XMPP
【发布时间】:2016-02-22 21:49:23
【问题描述】:

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

另外,也许我真的不需要 XMPP 来处理我的应用程序,但我喜欢学习。

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

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

  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("myResponse") 的消息

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

很少的问题

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

真正的大问题

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

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

【问题讨论】:

    标签: android google-cloud-messaging xmpp


    【解决方案1】:

    Official 定义:

    Google Cloud Messaging (GCM) 云连接服务器 (CCS) 是 提供持久、异步、双向的 XMPP 端点 连接到 Google 服务器。

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

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

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

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

    希望这会有所帮助!

    【讨论】:

    • 谢谢,这很有帮助!我已经阅读了官方文档(该死的很多次),但仍然有一些非常阴暗的一面:与数据库通信的代码(php?)在哪里? gcm 演示示例不包含任何像 smack 这样的 XMPP 库,所以我不明白。我没有清楚地看到我的个人服务器与 GCM 服务器的使用。另外,我可以理解ACK的概念,但是在网上没有找到任何关于如何发送它们的线索。
    • 嘿,丹,我了解您的问题,我们所有人都不会担心。代码(.php)在哪里? - 假设开发人员知道如何实现它,或者至少知道他们有责任创建和维护后端服务器。
    • 第二个问题:你可以继续使用你的个人服务器,但你能处理排队,然后检查设备是否可用,如果稍后再轮询,并继续这样做,直到你可以成功传递消息?如果是,那么无论如何您都可以只使用您的服务器。虽然我已经意识到 GCM 的一个主要好处是它现在是 OS 框架的一部分,这使得客户端的事情变得非常容易。
    • 官方示例仅适用于 HTTP,但这里有一个使用 Smack 库的 XMPP 示例:github.com/writtmeyer/gcm_server。希望所有这些信息能让事情变得更加清晰。 :)
    • 其实有一个官方的示例在谈论 XMPP here,但是我知道你要去哪里,我对 XMPP 的掌握程度还不够,甚至没有考虑将它用于 GCM。非常感谢凯安
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2013-06-26
    • 2015-12-23
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多