0

当从 Firebase 云消息传递服务收到确认消息时,我的 addAsyncStanzaListner 被调用。我需要根据文档确认此消息。我遇到的问题是我无法到达接收到的消息节中到达的 JSON 对象内的“message_type”“key”/“value”对。你能帮我访问这个重要的价值/对吗?我正在使用 Smack 库 4.1。我一直在关注这个设置的帖子答案,但不知何故它不起作用: GCM XMPP Server using Smack 4.1.0

代码如下所示:

other_connection.addAsyncStanzaListener(new StanzaListener() {
@Override
public void processPacket(Stanza packet) throws    SmackException.NotConnectedException {
//how should i convert this stanza into a message stanza
//I have tried Message message = (Message)packet;   IT DOESNT WORK
//I have tried getting the extension with the GCM Namespace. It doesnt
//return a json string       
4

2 回答 2

0

在您的代码中,您只需将 Stanza 接收为 Java 对象。

Stanza 有一种输出 XML 的方法。

如果需要,您可以使用此方法获取 JSON,只需添加一些自定义功能即可。

按照这个例子

您的代码可能如下所示:

@Override
public void processPacket(Stanza packet) throws    SmackException.NotConnectedException {
    JSONObject jsonObj = XML.toJSONObject(packet.toXML());
    String json = jsonObj.toString();
//foo
于 2016-08-04T09:43:34.400 回答
0

注意:此答案适用于从消息中提取 JSON 的一般问题。在 FCM 的情况下,可能还有另一种更合适的方法。

假设您有一个Stanza对应于以下 XML 的对象:

<message from='a@example.com' to='b@example.com' type='normal'>
    <json xmlns='urn:xmpp:json:0'>{ "key1" : "value1", "key2": "value2" }</json>
    <body/>
</message>

要提取 JSON 字符串,您需要执行以下操作:

import org.jivesoftware.smackx.json.packet.JsonPacketExtension;
...
JsonPacketExtension jsonPacketExtension = JsonPacketExtension.from(stanza);
String contentJson = jsonPacketExtension.getJson();
于 2018-07-10T12:37:58.620 回答