2011-07-13 55 views
5

我試圖在Android上使用asmack庫實現一個簡單的jabber messenger。下面的代碼:(a)Smack在登錄處返回「service-unavailable(503)」錯誤

public boolean login() 
{ 
    if (connection != null && connection.isConnected()) 
    { 
     Log.i("XMPP", connection.getHost()); 
     try 
     { 
      connection.login(USERNAME, PASSWORD); 
     } 
     catch (XMPPException e) 
     { 
      e.printStackTrace(); 
      return false; 
     } 
     return true; 
    } 
    return false; 
} 

異常connection.login後,我得到()(連接看起來不錯):

service-unavailable(503) 
at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:77) 
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:239) 
at org.jivesoftware.smack.Connection.login(Connection.java:353) 
at com.someapp.networking.XMPPMessenger.login(XMPPMessenger.java:60) 
at com.someapp.XMPPService.onCreate(XMPPService.java:33) 
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2780) 
at android.app.ActivityThread.access$3200(ActivityThread.java:119) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1917) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4363) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
at dalvik.system.NativeStart.main(Native Method) 

可能是什麼錯誤呢?

+0

坎請你添加更多的細節?你試圖連接什麼服務器,你確定要指定正確的端口/域/主機嗎?通常服務不可用意味着它可以被達到或您指定了錯誤的信息。 – Guillaume

回答

1

Asmack能夠建立到服務器的新連接,但由於某種原因它屬於Non-SASL mode(致電NonSASLAuthentication.authenticate(NonSASLAuthentication.java:77))。 我認爲這就是服務器試圖用「服務不可用(503)」響應告訴你的是,它不支持非SASL身份驗證。

嘗試調試爲什麼smack不嘗試SASL身份驗證。

注意:smack源代碼查看器中的行有點偏離,因爲關閉了不同的版本和asmack的補丁。

+0

有什麼可以解決這個,我們需要認證facebook用戶和獲取朋友列表併發送消息給他們,但我們無法登錄,因爲我們正在獲取身份驗證錯誤 –

+0

這是作爲消息正文後有所收穫?可能是什麼問題 ? –

1

它是由這樣的工作終於對我說:

ConnectionConfiguration connConfig = new ConnectionConfiguration(host,port,host); 
connection = new XMPPConnection(connConfig); 
connConfig.setSASLAuthenticationEnabled(true); 
connection.connect(); 
connection.login(userID, password); 

我一直在使用Asmack庫,我從以下網址下載使用安卓

https://code.google.com/p/asmack/downloads/detail?name=asmack-2010.05.07.jar

注意有關用戶ID

而不是使用

connection.login("[email protected]",password) 

它的工作對我來說只是如果我使用connection.login( 「用戶名」,密碼);

好運...

相關問題