2011-12-20 2 views
2

나는 asmack XMPP를 안드로이드 코드와 함께 사용하고 있습니다. XMPP 서버에 잘 로그인하고 있지만 새 사용자를 만들려고 할 때 문제가 발생합니다. 달성하고자하는 것은 다음과 같습니다.사용자 만들기, 수용 할 수 없음 (406)

  1. 관리자와 로그인하십시오.
  2. 새 사용자를 만드십시오.
  3. 관리자로부터 로그 아웃.
  4. 새로 craeted 사용자로 로그인하십시오.
  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) 

누군가 내게 그 이유를 말해 줄 수 있습니까? 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.create 계정 (사용자 이름, 비밀번호, attr); 그러나 createAccount()를 호출 할 때 이미 사용자 이름과 비밀번호가 제공됩니다. 왜 두 번 지정해야하는지 모르겠다. 어쨌든 그것은 작동합니다. – eleanor

관련 문제