2011-12-20 65 views
2

我正在使用带有android代码的asmack XMPP。我正在登录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(); 
     } 
    } 

    } 

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

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

* ahem * ...啊......你不打算*运送*代码与*服务器管理员*用户名和密码在'apk'中,你是......? – BRFennPocock 2011-12-20 16:30:08

+0

很高兴我能提供帮助,正如BRPocock所说的那样,您应该要求服务器发送可以登录的用户名/密码,或者将注册移动到服务器,让它返回当前用户的登录凭证,而不是将管理员密码放入代码中。 – Jave 2011-12-20 20:28:41

回答

2

拿在smack docs一看,这里说

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

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

我希望这可以帮助解决这个问题。

+0

嗨。这固定它: HashMap attr = new HashMap (); attr.put(“username”,username); attr.put(“password”,password); manager.createAccount(username,password,attr); 但是在调用createAccount()时已经提供了用户名和密码。我不知道为什么我必须指定他们两次。无论如何,它的工作。 – eleanor 2011-12-20 16:20:52