我正在尝试使用asmack库在Android上实现一个简单的jabber messenger。这是代码:
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 :(得分:1)
Asmack能够建立与服务器的新连接,但由于某种原因(NonSASLAuthentication.authenticate(NonSASLAuthentication.java:77)
的调用),它会落入Non-SASL mode。
我认为这是服务器试图用“service-unavailable(503)”响应告诉你的,它不支持非SASL身份验证。
尝试调试为什么smack不尝试SASL身份验证。
注意:smack源查看器中的行有点偏,因为关闭了不同的版本和asmack的补丁。
答案 1 :(得分:1)
通过这种方式终于为我工作了:
ConnectionConfiguration connConfig = new ConnectionConfiguration(host,port,host);
connection = new XMPPConnection(connConfig);
connConfig.setSASLAuthenticationEnabled(true);
connection.connect();
connection.login(userID, password);
我使用的是使用Asmack
库的Android,我从下面的网址下载了
https://code.google.com/p/asmack/downloads/detail?name=asmack-2010.05.07.jar
小心 userID 。
而不是使用
connection.login("username@ejabberdServerIP",password)
只有当我使用 connection.login(“用户名”,密码)时才能使用它;
祝你好运......