2011-12-20 19 views
2

私はアンドロイドコードで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(); 
     } 
    } 

    } 

コードのログイン部分は成功です。コードの第2部分はそうではありません。私は次のエラーを受信して​​います:

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

+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.ホスト失敗した登録の応答要求エンティティ(一部の必要な情報が提供されない)」での登録エラーと一致していると述べています)。
getAccountAttributes()で必要な属性を確認し、必要なすべてのタグがあることを確認するためにスワックデバッガでどのデータを送受信するかを確認する必要があります。

私はこれが問題の解決に役立つことを願っています。

+0

こんにちは。これは修正されました: HashMap attr = new HashMap (); attr.put( "username"、username); attr.put( "password"、password); manager.createAccount(username、password、attr); しかし、createAccount()を呼び出すときに、ユーザー名とパスワードがすでに提供されています。私はなぜそれらを2回指定しなければならなかったのか分かりません。とにかくそれは動作します。 – eleanor

関連する問題