使用Smack Library

时间:2016-08-03 23:42:19

标签: android xmpp smack firebase-cloud-messaging stanza

从Firebase云消息传递服务收到确认消息时,正在调用我的addAsyncStanzaListner。我需要根据文档来回复这些消息。我遇到的问题是我无法访问" message_type" "键" /"值"在JSON对象内部对,它到达收到的消息节内。能否帮助我获取这个重要的价值/配对。我正在使用Smack Library 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       

2 个答案:

答案 0 :(得分:0)

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

Stanza有一种输出XML的方法。

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

Following this example

您的代码可能如下所示:

@Override
public void processPacket(Stanza packet) throws    SmackException.NotConnectedException {
    JSONObject jsonObj = XML.toJSONObject(packet.toXML());
    String json = jsonObj.toString();
//foo

答案 1 :(得分: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();