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