2011-07-13 12 views
5

Próbuję zaimplementować prostego komunikatora Jabber na Androida przy użyciu biblioteki asmack. Oto kod:(a) Smack zwraca błąd "service-unavailable (503)" przy logowaniu()

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; 
} 

Wyjątek otrzymuję po connection.login() (połączenie wygląda w porządku):

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) 

Co może być pomyłka?

+0

Czy mógłbyś dodać więcej szczegółów? z jakim serwerem próbujesz się połączyć, czy na pewno podasz właściwy port/domenę/hosta? Usługa niedostępna ogólnie oznacza, że ​​można ją osiągnąć lub że podała błędne informacje. – Guillaume

Odpowiedz

1

Asmack może ustanowić nowe połączenie z serwerem, ale z jakiegoś powodu wchodzi w zakres Non-SASL mode (wywołanie NonSASLAuthentication.authenticate(NonSASLAuthentication.java:77)). Wydaje mi się, że to właśnie serwer próbuje ci powiedzieć, korzystając z "niedostępnej usługi (503)" odpowiedzi, jest to, że nie obsługuje uwierzytelniania bez SASL.

Spróbuj przeprowadzić debugowanie, dlaczego klaps nie próbuje uwierzytelnienia SASL.

Uwaga: Linie w przeglądarce źródeł smack są nieco wyłączone, ponieważ są wyłączone z różnych wersji i łat od asmack.

+0

co może być rozwiązaniem tego problemu, musimy uwierzytelnić użytkownika Facebooka i pobrać listę znajomych i wysłać do niego wiadomość, ale nie możemy się zalogować, ponieważ otrzymujemy komunikat o błędzie uwierzytelnienia. –

+0

jest to po kilku chwilach jako treść wiadomości? Co może być problemem ? –

1

To działa w końcu do mnie w ten sposób:

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

użyłem Android przy użyciu Asmack bibliotekę która Pobrałem od dołu URL:

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

uważać na identyfikator użytkownika.

Zamiast

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

to praca dla mnie tylko wtedy, gdy używam connection.login ("nazwę użytkownika", hasło);

Powodzenia ...