Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XMPP-Facebook-我的客户端实现如何接收其他客户端实现发送的消息?_Java_Facebook_Xmpp_Smack_Facebook Chat - Fatal编程技术网

Java XMPP-Facebook-我的客户端实现如何接收其他客户端实现发送的消息?

Java XMPP-Facebook-我的客户端实现如何接收其他客户端实现发送的消息?,java,facebook,xmpp,smack,facebook-chat,Java,Facebook,Xmpp,Smack,Facebook Chat,我已经实现了一个使用Smack API连接的facebook聊天客户端。目前,主要功能运行良好。我发送、接收消息、接收打字通知。。。 但我有个问题。如果我正在使用我的客户端与某人交谈,我会在facebook的聊天中收到我发送给联系人的消息。但是如果通过facebook的聊天向联系人发送消息,我的客户不会收到该消息。如果联系人回答我,我会收到他的消息,但对话会变得不完整,因为它只显示联系人发送的消息,而不显示我在另一个XMPP客户端中发送的消息 由于facebook显示了我的客户发送的信息,我认为

我已经实现了一个使用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)
            }
        }
    }
)
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
    }
}
消息侦听器只是通过推送将消息传递给我的Javascript客户端

发送消息:

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

        @Override
        void chatCreated(Chat chat, boolean createdLocally) {
            if(!createdLocally){
                chat.addMessageListener(messageListener)
            }
        }
    }
)
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扩展提供的:。我正在尝试查找facebook聊天是否实现了此扩展。

如果您发送IQ以启用该功能,服务器会回复错误IQ,这表示它不支持XEP 0280。我刚刚通过Audium XML控制台检查了自己

智商:


答复:

<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>


谢谢您的回答。你知道怎么做我想做的吗?我开始认为这是facebook的一些内部功能。但facebook的android应用程序也同步了整个对话。据我所知,facebook XMPP聊天服务器没有实现很多XEP,我认为品牌应用程序使用了一些私有API,因为公共API不允许开发者发送消息。我正在尝试构建一个Mac OS聊天客户端,我认为使用XMPP和Graph API是接收消息、保持消息同步并能够发送消息的唯一方法。尽管如此,我们仍然无法在客户端脱机时收到消息通知(这意味着没有推送通知),除非在专用服务器上运行一个不雅观的无限循环。