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 チャットがこの拡張機能を実装しているかどうかを確認しようとしています。