Создание пользователя, получение неприемлемого (406) - PullRequest
2 голосов
/ 20 декабря 2011

Я использую Asmack XMPP с кодом Android. Я вхожу в систему на сервере XMPP просто отлично, но проблема возникает, когда я пытаюсь создать нового пользователя. Чего я хочу добиться, так это:

  1. Вход с администратором.
  2. Создать нового пользователя.
  3. Выйти из администратора.
  4. Войдите как новый пользователь.
  5. Выполните некоторые действия - играйте в игру.
  6. Удалить вновь созданного пользователя.

Это позволяет игрокам не регистрироваться, поскольку регистрация обрабатывается автоматически, а также позволяет пользователям выбирать любое имя, которое еще доступно в текущий момент.

Текущий код следующий:

  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)

Может кто-нибудь сказать мне, почему? У меня достаточно прав для создания пользователей, поскольку я вхожу в систему как пользователь: pass (который является администратором сервера XMPP).

1 Ответ

2 голосов
/ 20 декабря 2011

Взгляните на smack docs , здесь написано, что

Серверу может потребоваться ряд дополнительных атрибутов учетной записи, таких как адрес электронной почты и номер телефона.

Это согласуется с ошибкой регистрации в XEP-0077 ('пример 7. Хост информирует объект неудачной регистрации (некоторая необходимая информация не указана)').
Выследует проверить необходимые атрибуты с помощью getAccountAttributes(), а также включить отладчик smack, чтобы увидеть, какие данные отправлены / получены, чтобы убедиться, что у вас есть все необходимые теги.

Надеюсь, это поможет с проблемой.

...