我已经实现了一个使用Smack API进行连接的Facebook聊天客户端。目前,主要功能运行良好。我发送,接收消息,接收打字通知... 但我有一个问题。如果我正在与使用我的客户的人聊天,我会收到我在Facebook聊天中发送给联系人的消息。但是,如果通过Facebook的聊天向联系人发送消息,我的客户端不会收到该消息。如果联系人回答我,我收到他的消息,但对话变得不完整,因为它只显示联系人发送的消息,但没有显示我在另一个XMPP客户端中发送的消息。XMPP - Facebook - 我的客户端实现如何接收其他客户端实现发送的消息?
由于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聊天实现这个扩展。
谢谢你的答案。你是否知道要做我想做的事?我开始认为这是facebook的内部功能。但是facebook的android应用程序也同步整个对话。 – 2013-02-25 18:23:10
据我所知,Facebook XMPP Chat服务器没有实现许多XEP,我认为品牌应用程序正在使用一些私有API,因为公共API不允许开发人员发布消息。我试图建立一个Mac OS聊天客户端,我认为同时使用XMPP和Graph API是接收消息的唯一方式,让它们保持同步并能够发送它们。尽管客户端处于脱机状态(即没有推送通知)时收到的消息仍然无法获得通知,但从专用服务器上运行的无用循环除外。 – 2013-02-25 22:18:34
再次感谢您。 :) – 2013-02-26 19:28:03