Smack 4.1 SASL身份验证错误

时间:2015-04-20 18:07:27

标签: android eclipse xmpp smack

我正在使用Smack 4.1本机库为Android开发聊天应用程序。我能够在我的应用程序和服务器之间建立连接,但是我在登录时遇到了关于SASL身份验证的SmackException。

需要注意的要点。

  1. 我的服务器端不需要SASL身份验证。
  2. 我的应用程序没有崩溃,但是我在log cat snnippet中显示了以下错误。
  3. 我使用的是eclipse Luna和JDK 1.7版,我在libs文件夹中包含了以下库。

    1. jxmpp核-0.4.1
    2. jxmpp-util的缓存-0.4.1
    3. minidns-0.1.1
    4. 咂嘴-机器人-4.1.0.jar
    5. 咂嘴-机器人的扩展-4.1.0
    6. 咂嘴核-4.1.0
    7. 拍击的扩展-4.1.0
    8. 咂嘴-IM-4.1.0
    9. 咂嘴-TCP-4.1.0
    10. 这是我用来建立连接的代码。

      XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
              configBuilder.setUsernameAndPassword(userName, pass);
              configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled);
              configBuilder.setResource("testServices");
              configBuilder.setServiceName(DOMAIN);
              configBuilder.setPort(PORT);
              configBuilder.setHost(DOMAIN);
              configBuilder.setDebuggerEnabled(true);
      
              AbstractXMPPConnection connection = new XMPPTCPConnection(
                      configBuilder.build());
      
              /** Connecting to the server */
              try {
                  connection.connect();
                  Log.i(TAG, "Connected to " + connection.getHost());
              } catch (SmackException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (XMPPException e) {
                  Log.e(TAG, "Failed to connect to " + connection.getHost());
                  Log.e(TAG, e.toString());
                  e.printStackTrace();
              }
      
              /** LogingIn to the server */
              try {
      
                  //SASLMechanism.PLAIN();
                  //SASLAuthentication.("PLAIN", 0);
      
                  connection.login(userName, pass);
                  // connection.login();
              } catch (XMPPException e) {
                  e.printStackTrace();
              } catch (SmackException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
      
              /** LogingOut from the server */
              connection.disconnect();
      

      这是我的logcat输出。

      04-20 22:22:51.584: D/SMACK(8335): SENT (0): <stream:stream xmlns='jabber:client' to='my_server_url' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='10001@my_server_url' xml:lang='en'>
      04-20 22:22:52.519: D/SMACK(8335): RECV (0): <stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" version="1.0" id="0768491716592086" from="my_server_url">
      04-20 22:22:53.744: D/SMACK(8335): RECV (0): <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism></mechanisms></stream:features>
      04-20 22:22:53.749: I/(8335): Connected to "smy_server_url"
      
      04-21 12:24:55.815: I/(16566): SmackException to my_server_link.comorg.jivesoftware.smack.SmackException: SASL Authentication failed. No known authentication mechanisims.
      04-20 22:22:53.754: W/System.err(8335): org.jivesoftware.smack.SmackException: SASL Authentication failed. No known authentication mechanisims.
      04-20 22:22:53.759: W/System.err(8335):     at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:254)
      04-20 22:22:53.759: W/System.err(8335):     at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:365)
      04-20 22:22:53.759: W/System.err(8335):     at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:452)
      04-20 22:22:53.759: W/System.err(8335):     at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:427)
      04-20 22:22:53.759: W/System.err(8335):     at com.epixoft.ui.LoginActivity$ConnectionTestTask.doInBackground(LoginActivity.java:120)
      04-20 22:22:53.759: W/System.err(8335):     at com.epixoft.ui.LoginActivity$ConnectionTestTask.doInBackground(LoginActivity.java:1)
      04-20 22:22:53.759: W/System.err(8335):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
      04-20 22:22:53.759: W/System.err(8335):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      04-20 22:22:53.759: W/System.err(8335):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
      04-20 22:22:53.764: W/System.err(8335):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
      04-20 22:22:53.764: W/System.err(8335):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      04-20 22:22:53.764: W/System.err(8335):     at java.lang.Thread.run(Thread.java:841)
      04-20 22:22:53.784: D/SMACK(8335): SENT (0): <presence id='PwoLk-3' type='unavailable'><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='NfJ3flI83zSdUDzCEICtbypursw='/></presence>
      04-20 22:22:53.789: D/SMACK(8335): SENT (0): </stream:stream>
      04-20 22:22:53.864: E/ViewRootImpl(8335): sendUserActionEvent() mView == null
      

      提前感谢您的帮助。 干杯:)

1 个答案:

答案 0 :(得分:13)

经过艰苦的努力,我终于找到了解决问题的方法。

我必须导入smack-sasl-provided-4.1.0.jar以消除此SASLAuthentication错误。