我已经实现了一个使用 Smack API 连接的 facebook 聊天客户端。目前,主要功能运行良好。我发送、接收消息、接收打字通知......但我有一个问题。如果我正在使用我的客户端与某人交谈,我会在 facebook 的聊天中收到我发送给联系人的消息。但是,如果通过 facebook 的聊天向联系人发送消息,我的客户不会收到该消息。如果联系人回答我,我会收到他的消息,但对话会变得不完整,因为它只显示联系人发送的消息,但不会显示我在另一个 XMPP 客户端中发送的消息。
由于 facebook 显示了我的客户发送的消息,我认为也可以这样做。我真的是 XMPP 的新手,我需要一些帮助来弄清楚我该怎么做。
我的代码现在看起来像这样:
接收消息:
connection.getChatManager().addChatListener(
new ChatManagerListener(){
@Override
void chatCreated(Chat chat, boolean createdLocally) {
if(!createdLocally){
chat.addMessageListener(messageListener)
}
}
}
)
消息侦听器只是通过推送将消息传递给我的 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 聊天是否实现了此扩展。