创建用户,不被接受(406)

时间:2011-12-20 15:24:10

标签: java android debugging xmpp smack

我正在使用带有android代码的asmack XMPP。我正在登录XMPP服务器,但是当我尝试创建新用户时会出现问题。我想要实现的目标如下:

  1. 以管理员身份登录。
  2. 创建新用户。
  3. 从管理员退出。
  4. 以新推荐的用户身份登录。
  5. 做一些动作 - 玩游戏。
  6. 删除新创建的用户。
  7. 这允许玩家不注册,因为注册是自动处理的,并且还允许用户选择当前仍然可用的任何名称。

    目前的代码如下:

      public void create_user(String username, String password) {
        try {
          connection.login("user", "pass");
        } catch (XMPPException e) {
          e.printStackTrace();
        }
    
        if (connection.isAuthenticated()) {
          AccountManager manager = connection.getAccountManager();
          try {
            manager.createAccount(username, password);
          } catch (XMPPException e) {
            Log.w("[create_user] Cannot create new user: XMPP Exception.", "0");
            e.printStackTrace();
          } catch (IllegalStateException e) {
            Log.w("[create_user] Cannot create new user: not logged in.", "0");
            e.printStackTrace();
          }
        }
    
      }
    

    代码的登录部分是成功的。代码的第二部分不是。我收到以下错误:

    W/[create_user] Cannot create new user: XMPP Exception.( 1525): 0
    W/System.err( 1525): not-acceptable(406)
    W/System.err( 1525):    at org.jivesoftware.smack.AccountManager.createAccount(AccountManager.java:246)
    W/System.err( 1525):    at org.jivesoftware.smack.AccountManager.createAccount(AccountManager.java:207)
    W/System.err( 1525):    at company.games.boxer.XMPPManager.create_user(XMPPManager.java:81)
    W/System.err( 1525):    at company.games.boxer.XMPPManager.xmpp_login(XMPPManager.java:113)
    W/System.err( 1525):    at company.games.boxer.XMPPClient.onCreate(XMPPClient.java:19)
    W/System.err( 1525):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    W/System.err( 1525):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    W/System.err( 1525):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    W/System.err( 1525):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    W/System.err( 1525):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    W/System.err( 1525):    at android.os.Handler.dispatchMessage(Handler.java:99)
    W/System.err( 1525):    at android.os.Looper.loop(Looper.java:123)
    W/System.err( 1525):    at android.app.ActivityThread.main(ActivityThread.java:4627)
    W/System.err( 1525):    at java.lang.reflect.Method.invokeNative(Native Method)
    W/System.err( 1525):    at java.lang.reflect.Method.invoke(Method.java:521)
    W/System.err( 1525):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    W/System.err( 1525):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    W/System.err( 1525):    at dalvik.system.NativeStart.main(Native Method)
    

    有人可以告诉我为什么吗?我有足够的权限来创建用户,因为我以user:pass(它是XMPP服务器的管理员)登录。

1 个答案:

答案 0 :(得分:2)

看看smack docs,这里说的是

  

服务器可能需要许多额外的帐户属性,例如   电子邮件地址和电话号码。

这与XEP-0077中的注册错误一致('示例7.主机通知失败注册实体(未提供某些必需信息)')。
您应该使用getAccountAttributes()检查所需的属性,并启用smack调试器以查看发送/接收的数据,以确保您拥有所有必需的标记。

我希望这有助于解决问题。