Доступ к объекту JSON внутри Message Stanza с использованием библиотеки Smack

Мой addAsyncStanzaListner вызывается при получении подтверждающего сообщения от сервисов Firebase Cloud Messaging. Мне нужно подтвердить это сообщение в соответствии с документами. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти пару "message_type" "ключ"/"значение" внутри объекта JSON, который поступает в раздел сообщения, который получен. Не могли бы вы помочь мне в доступе к этой важной ценности / пара. Я использую Smack Library 4.1. Я следовал за этим постом ответом для этой установки, но почему-то это не работает: GCM XMPP Server с использованием 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 ответа

Примечание. Этот ответ предназначен для общей проблемы извлечения 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();

В своем коде вы просто получаете 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
Другие вопросы по тегам