0

xmpp接続に以下のコードを使用していますが、メカニズムDIGEST-MD5を使用してSASL認証に失敗しましたという例外が発生します

 public static boolean XMPPConnect() {
            try {
                System.setProperty("java.net.preferIPv6Addresses", "false");
config = new ConnectionConfiguration(Constant._hostName);
                config.setRosterLoadedAtLogin(true);
                config.setSendPresence(true);
                config.setSASLAuthenticationEnabled(true);
                config.setCompressionEnabled(true);
                config.setSecurityMode(SecurityMode.enabled);


                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                    config.setTruststoreType("AndroidCAStore");
                    config.setTruststorePassword(null);
                    config.setTruststorePath(null);
                } else {
                    config.setTruststoreType("BKS");
                    String path = System.getProperty("javax.net.ssl.trustStore");
                    if (path == null)
                        path = System.getProperty("java.home") + File.separator + "etc"
                                + File.separator + "security" + File.separator
                                + "cacerts.bks";
                    config.setTruststorePath(path);
                }

                connection = new XMPPConnection(config);
                connection.connect();
                debugEnabledReset();


            } catch (Exception e) {
                XMPPConstants.XMPP_ERROR="socket_timeout";
                e.printStackTrace();
                if(connection.DEBUG_ENABLED==true)
                    connection.DEBUG_ENABLED = false;
                return false;
            }
            return true;
        }

そしてログイン用

public static boolean XMPPLogin(String uname, String password) {
        Roster roster = connection.getRoster();
        roster.addRosterListener(new RosterListener() {
            public void presenceChanged(Presence arg0) {}
            public void entriesUpdated(Collection<String> arg0) {}
            public void entriesDeleted(Collection<String> arg0) {}
            public void entriesAdded(Collection<String> arg0) {}
        });

        try {


            //SASLAuthentication.supportSASLMechanism("PLAIN", 0);
            connection.login(uname, password);
        } catch (Exception e) {
            XMPPConstants.XMPP_ERROR="Username or password is incorrect";
            if(e.getMessage().toString().contains("No response")){
                XMPPConstants.XMPP_ERROR="Server communication failed";
            }
            e.printStackTrace();

            return false;
        }
        return true;
    }

私を助けてください..私はたくさんのことを試しましたが、うまくいっています. 前もって感謝します

4

2 に答える 2

0

それでも適切な解決策が見つからない場合は、tr を実行して SASL 認証を無効にします。

config.setSASLAuthenticationEnabled(false);

それはしばらくの間うまくいくかもしれませんが、それでも永続的な解決策ではありません.

于 2016-06-17T12:10:19.717 に答える
0
// I was same problem and i have solved by following way.

XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
        configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
        configBuilder.setServiceName(Constant.SERVICE_NAME);
        configBuilder.setHost(Constant.HOST);
        configBuilder.setPort(5222);
        configBuilder.setConnectTimeout(10000);
        configBuilder.setSendPresence(true);

AbstractXMPPConnection connection = new XMPPTCPConnection(configBuilder.build());
        connection.setPacketReplyTimeout(10000);

// If the above code is not working than change AbstractXMPPConnection to XMPPTCPConnection and than try i have solved using this way
于 2017-02-23T13:10:34.450 に答える