2011-12-20 1 views
2

Я использую asmack XMPP с кодом Android. Я просто регистрирую сервер XMPP, но проблема возникает, когда я пытаюсь создать нового пользователя. Чего я хочу достичь:Создание пользователя, получение недопустимого (406)

  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

* ahem * ... ах ... вы не планируете * присылать * этот код с именем пользователя и паролем администратора * в 'apk', вы ...? – BRFennPocock

+0

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

ответ

2

Посмотрите в smack docs, он здесь говорит, что

The server may require a number of extra account attributes such as an email address and phone number.

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

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

+0

Привет. Это исправлено: HashMap attr = new HashMap (); attr.put («имя пользователя», имя пользователя); attr.put («пароль», пароль); manager.createAccount (имя пользователя, пароль, attr); Но имя пользователя и пароль уже предоставлены при вызове createAccount(). Я не знаю, почему я должен был указать их дважды. Так или иначе, это работает. – eleanor