XMPP - Facebook - Как моя клиентская реализация может получать сообщения, отправленные другими клиентскими реализациями?

Я реализовал чат-клиент на Facebook, который подключается с помощью Smack API. На данный момент основные функции работают хорошо. Я отправляю, получаю сообщения, получаю уведомления о наборе текста... Но у меня проблема. Если я разговариваю с кем-то, использующим мой клиент, я получаю сообщения, которые я отправлял контакту, в чате Facebook. Но если отправить сообщение контакту через чат Facebook, мой клиент не получит это сообщение. Если контакт отвечает мне, я получаю его сообщение, но диалог становится неполным, поскольку он просто показывает сообщения, отправленные контактным лицом, но не показывает сообщение, которое я отправил в другом XMPP-клиенте.

Поскольку Facebook показывает сообщения, отправленные моим клиентом, я думаю, что можно сделать то же самое. Я действительно новичок в XMPP, и мне нужна помощь, чтобы понять, как я могу это сделать.

Мой код выглядит так прямо сейчас:

Получение сообщений:

connection.getChatManager().addChatListener(
    new ChatManagerListener(){

        @Override
        void chatCreated(Chat chat, boolean createdLocally) {
            if(!createdLocally){
                chat.addMessageListener(messageListener)
            }
        }
    }
)

Слушатель сообщения просто передает сообщение с помощью push на мой клиент Javascript.

Отправка сообщений:

public boolean sendMessage(String jid, String message){
    FacebookContact contact = mapJIDContact.get(jid)

    try{
        if (contact != null && (connection != null) && (connection.isConnected())) {
            ChatManager chatManager = connection.getChatManager();
            if(contact.chat == null){
                contact.chat = chatManager.createChat(jid, messageListener);
            }
            contact.chat.sendMessage(message);
            return true
        }
        return false
    }
    catch (XMPPException e){
        return false
    }
}

FacebookContact - это класс, созданный мной. Здесь хранятся некоторые контактные данные и чат, если он уже был открыт.

РЕДАКТИРОВАТЬ:

Я обнаружил, что эта функция, которую я хочу, предоставляется этим расширением XMPP: http://xmpp.org/extensions/xep-0280.html. Я пытаюсь найти, реализует ли чат в Facebook это расширение.

1 ответ

Решение

Если вы отправляете IQ для включения функции, сервер отвечает сообщением об ошибке IQ , что, как указано здесь, означает, что он не поддерживает XEP 0280. Я только что проверил себя через консоль Audium XML.

IQ:

<iq xmlns='jabber:client'
from='my.facebook.username@chat.facebook.com/Mac-Pro-di-Michele_65563c5f_4D689E59FB8A5' 
to='chat.facebook.com'
type='set'
id='enable1'>
  <enable xmlns='urn:xmpp:carbons:2'/>
</iq>

Ответить:

<iq xmlns='jabber:client'
from='chat.facebook.com'
to='my.facebook.username@chat.facebook.com/Mac-Pro-di-Michele_65563c5f_4D689E59FB8A5' type='error'
id='enable1'>
  <enable xmlns='urn:xmpp:carbons:2'/>
  <error code='501' type='cancel'>
    <feature-not-implemented xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
  </error>
</iq>
Другие вопросы по тегам