2

Android で Smack を使用して MultiUserChat に参加しようとしています。現在、私は 1 対 1 で問題なくチャットでき、オンラインで表示されているようにサーバーに接続しています。ここで提供されている例に従いました。

MultiUserChat(MUC)に参加するための次のコードがあります。

final XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
        .setUsernameAndPassword(user.getUsername(), user.getJabberPassword())
        .setServiceName("app.buur.nu")
        .setHost("app.buur.nu")
        .setPort(5222)
        .build();

AbstractXMPPConnection connection = new XMPPTCPConnection(config);

String room = "testroom";
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat muc = manager.getMultiUserChat(room + "@groups.app.buur.nu"); 
try {
    muc.join(user.getUsername(), null, null, connection.getPacketReplyTimeout());
} catch (SmackException.NoResponseException e) {
    e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
    e.printStackTrace();
} catch (SmackException.NotConnectedException e) {
    e.printStackTrace();
}

しかし、これは私に与えます org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). Used filter: AndFilter: (FromMatchesFilter (full): testroom@groups.app.buur.nu/test, StanzaTypeFilter: org.jivesoftware.smack.packet.Presence).

タイムアウトを 10000 ミリ秒に増やしてみましたが、それでもタイムアウトが発生します。ここで何が問題なのですか?1 対 1 のチャットの作成は正常に機能し、connection.isConnected())True を返します...


したがって、エラーが発生することがわかりました

<presence to="app.buur.nu/7c65be6" id="lgcSp-4" type="error"><x xmlns="http://jabber.org/protocol/muc"/><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="os2Kusj3WEOivn5n4iFr/ZEO8ls="/><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence>

基本的に入室時は認証が完了していません。認証が完了したときに更新を受信するためにリスナーを追加できますか? https://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/SASLAuthentication.html#authenticate%28java.lang.String,%20javax.security.auth.callback.CallbackHandlerを見ました%29しかし、独自の認証メカニズムを実装するのは少しやり過ぎのようです...

とかありませんonAuthenticationCompletedListenerか?

4

2 に答える 2