我在本地服务器上安装了ejabberd。然后在Spark中测试了它的功能,它工作正常。现在我想通过Android应用程序添加一个新用户。
我尝试通过spark添加新用户,但效果很好。我提供的字段是uesrname
,password
,confirm password
,server
。但是当我尝试使用Android应用程序中的smack api时,它会出现以下错误:
org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: forbidden - auth
我正在使用createAccount(),在我下面使用的代码中看到,在smack中创建新帐户。
AccountManager accountManager = AccountManager.getInstance(conn1);
try {
accountManager.createAccount("tryuser", "qwerty");
Log.i("log", "created user successfully");
} catch (SmackException.NoResponseException e) {
e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
e.printStackTrace();
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
我已检查它是否支持supportsAccountCreation()创建新帐户,并返回true
。
我已在ejabberd服务器中将register
规则更改为allow all
。并且我认为它没有任何问题,因为我可以通过火花创建帐户,但是会遇到错误。
我已经研究了以下与此主题相关的SO问题,但没有运气。
有没有人对如何解决这个问题有任何建议?
答案 0 :(得分:3)
请试试下面的内容 -
AccountManager accountManager = AccountManager.getInstance(connection);
try {
if (accountManager.supportsAccountCreation()) {
accountManager.sensitiveOperationOverInsecureConnection(true);
accountManager.createAccount("userName", "password");
}
} catch (SmackException.NoResponseException e) {
e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
e.printStackTrace();
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
您还需要在ejabberd.cfg(配置文件)
中进行设置{access, register, [{allow, all}]}.
这意味着 - 带内注册允许注册任何可能的用户名。要禁用带内注册,请将'allow'替换为'deny'。
在mod_register(同一个配置文件中的模块)中,请设置如下 -
{access_from, register}
&安培;在此之前,请检查您是否已连接到XMPP服务器。
这可能会解决您的问题。