我已经实现了一个使用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)
}
}
}
)
消息监听器只是将消息通过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聊天是否实现了这个扩展。
答案 0 :(得分:1)
如果您发送IQ以启用该功能,则服务器会回复< feature-not-implemented />错误IQ,指定here表示它不支持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>