在 Android Studio 上使用 Smack 构建 XML 流消息

Posted

技术标签:

【中文标题】在 Android Studio 上使用 Smack 构建 XML 流消息【英文标题】:Building XML stream messages with Smack on Android Studio 【发布时间】:2016-07-03 20:34:27 【问题描述】:

我正在尝试通过 Smack 库验证我与 Firebase-Cloud-Messaging 的连接。我看到我的连接从 google 获得了一个 streamId,因为我在我的 android Studio IDE 上记录了这条消息: Log.d("MyStreamId", "Ddd:"+ connection.getStreamId()); 我的日志返回一个随机的字母数字数字,因此这意味着 Google 的 CCS 注意到我的连接尝试。现在,根据此链接: https://firebase.google.com/docs/cloud-messaging/server#connecting 为了验证我的连接,我的“应用服务器”和 Google 的 CCS 之间必须进行某种类型的通信交换。我正在尝试开始这种使用 XML 格式的通信。

我需要构建以下“xml 流”并使用 Smack 库将其与我的连接一起发送:

<stream:stream to="gcm.googleapis.com"
    version="1.0" xmlns="jabber:client"
    xmlns:stream="http://etherx.jabber.org/streams">

我要做的是创建一个带有键的 HashMap:“to”、“version”、“xmlns”。我是否缺少此 HashMap 中的另一个键?

另外,我应该如何处理?我应该将此 HashMap 转换为某个 Json 对象吗?我之前在 Android Studio 上使用过 JSON。我应该使用 Smack Library toXML() 中的方法将 HashMap 转换为流吗?注意 XML 对象上的标签。另外,我将如何使用我的连接对象(即 XMPPAbstractConnection 对象)将其发送到 Google 的 CCS?我的连接对象还有一个 addAsyncStanzaListener 对象,希望能从 Google 的 CCS 接收双向通信。

任何想法或想法将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

您在这里问了几个问题,但我认为您可能误解了将 XMPP 与 FCM 结合使用的预期设计。我会尝试纠正这个问题,您可以完善您的问题。

一般来说,您不应该在您的 Android 客户端上使用 XMPP。这个想法是在您的应用程序服务器上使用 XMPP 客户端连接到 CCS 并与之通信。 Android 将在设备和 FCM 之间保持尽力而为的连接,请注意,这不能像在您的服务器上那样持续打开连接,因为这会耗尽设备的电池。

【讨论】:

来自此链接的以下示例:grokkingandroid.com/xmpp-server-google-cloud-messaging 来自以下链接:grokkingandroid.com/xmpp-server-google-cloud-messaging 我看到 Smack 被用作与 Firebase CCS 通信的接口。基于此,Smack API 充当与 Firebase CCS 的通信手段。现在,在 Github 上的友好应用程序中,他们使用 Go Server 与 GCM 通信。在另一个链接中:firebase.google.com/docs/cloud-messaging/server#connecting 朝向中间。 CCS 和 App Server 之间存在“xml”交换。它发生在哪里?在应用程序代码或外部。 @亚瑟汤普森 CCS(FCM 的一部分)是 XMPP 服务器。它允许您的应用服务器充当 XMPP 客户端(例如使用 Smack),并与 CCS 建立开放连接。消息是用 XML 封装的 JSON,例如:firebase.google.com/docs/cloud-messaging/… 我建立了连接。我避免了我的应用服务器和 CCS 之间的所有身份验证交换。我猜 Smack 在后台用它的方法解决了这个问题。但是,连接不是安全的,但至少是连接的。我需要实现构建节以发送上游、ack、nack 和下游消息。我已经看到了几个很好的例子。所以它应该不难实现。这个通信接口将驻留在我的应用程序中。感谢您的任何澄清。 @亚瑟汤普森

以上是关于在 Android Studio 上使用 Smack 构建 XML 流消息的主要内容,如果未能解决你的问题,请参考以下文章

在运行历史记录中找不到有效模型。这意味着 smac 无法拟合有效模型。请检查日志文件是不是有错误

用android studio 编写的程序可以在ios上运行吗

是否可以在 Android-Studio 或 IntelliJ 上使用 SWT?

Android | 如何在Android Studio上使用Git 以及 GitHub

Android studio上git的使用

在Mac上使用android studio调试android手机