2013-02-22 80 views
0

我已经实现了一个使用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聊天实现这个扩展。

回答

1

如果您发送的智商,使服务器与<功能没有实现/ >错误的智商,这是规定here意味着它不支持XEP 0280.我只是检查自己通过Audium公司XML控制台回复功能。

智商:

<iq xmlns='jabber:client' 
from='[email protected]/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='[email protected]/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> 
+0

谢谢你的答案。你是否知道要做我想做的事?我开始认为这是facebook的内部功能。但是facebook的android应用程序也同步整个对话。 – 2013-02-25 18:23:10

+0

据我所知,Facebook XMPP Chat服务器没有实现许多XEP,我认为品牌应用程序正在使用一些私有API,因为公共API不允许开发人员发布消息。我试图建立一个Mac OS聊天客户端,我认为同时使用XMPP和Graph API是接收消息的唯一方式,让它们保持同步并能够发送它们。尽管客户端处于脱机状态(即没有推送通知)时收到的消息仍然无法获得通知,但从专用服务器上运行的无用循环除外。 – 2013-02-25 22:18:34

+0

再次感谢您。 :) – 2013-02-26 19:28:03