通过Smack android api

时间:2016-04-18 04:48:16

标签: java android xmpp ejabberd smack

我在本地服务器上安装了ejabberd。然后在Spark中测试了它的功能,它工作正常。现在我想通过Android应用程序添加一个新用户。

我尝试通过spark添加新用户,但效果很好。我提供的字段是uesrnamepasswordconfirm passwordserver。但是当我尝试使用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问题,但没有运气。

有没有人对如何解决这个问题有任何建议?

1 个答案:

答案 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服务器。

这可能会解决您的问题。