私は Android バージョンの Smack API を使用しており、以前に登録されていない場合に備えて、それ自体を自動登録するクライアントを開発しています。
ユーザーを手動で登録してクライアントにログインすると、すべてが機能します。しかし、クライアントに新しいユーザーを作成させることはできません。コードの一部は次のとおりです。
try {
conn1.connect();
// (Try to) Log into the server
try{
conn1.login(imei, XMPP_ACCOUNT_PASSWORD);
}catch (XMPPException ex){
// Probably not registered
createdAccount = checkAndRegister(conn1);
}
if (createdAccount){
conn1.login(imei, XMPP_ACCOUNT_PASSWORD);
ChatManager chatmanager = conn1.getChatManager();
serverConversation = chatmanager.createChat(SERVER_USERNAME_FULL, this);
serverConversation.addMessageListener(this);
} catch (XMPPException e) {
Log.e(TAG, "Error al comunicarse con XMPP.");
e.printStackTrace();
}
public boolean checkAndRegister(XMPPConnection currentConn){
if (!currentConn.isAuthenticated()){
AccountManager acManager = currentConn.getAccountManager();
try {
acManager.createAccount(imei, XMPP_ACCOUNT_PASSWORD);
} catch (XMPPException e) {
Log.e(TAG, "No se puede autoregistrar la cuenta de XMPP. " + e.getLocalizedMessage());
return false;
}
return true;
}else{
return true;
}
}
そして、これがサーバー ログから取得したトレース os スタンザです。これらの特定の 4 がプロセス全体を示していると思われますが、私が間違っていると思われる場合は修正してください。
<packet xmlns="http://www.jivesoftware.org" streamID="c0057471" status="connected" timestamp="oct 25,2011 04:43:52:207 PM">
<iq xmlns="" id="D1Dq5-2" to="www.fundacionvf.es" type="get">
<query xmlns="jabber:iq:register" />
</iq>
</packet>
<packet xmlns="http://www.jivesoftware.org" streamID="c0057471" status="connected" timestamp="oct 25, 2011 04:43:52:208 PM">
<iq xmlns="" type="result" id="D1Dq5-2">
<query xmlns="jabber:iq:register">
<username />
<password />
<email />
<name />
<x xmlns="jabber:x:data" type="form">
<title>XMPP Client Registration</title>
<instructions>Please providethe following information</instructions>
<field var="FORM_TYPE" type="hidden">
<value>jabber:iq:register</value>
</field>
<field var="username" type="text-single" label="Username">
<required />
</field>
<field var="name" type="text-single" label="Full name" />
<field var="email" type="text-single" label="Email" />
<field var="password" type="text-private" label="Password">
<required />
</field>
</x>
</query>
</iq>
</packet>
<packet xmlns="http://www.jivesoftware.org" streamID="c0057471" status="connected" timestamp="oct 25, 2011 04:43:52:265 PM">
<iq xmlns="" id="D1Dq5-3" to="www.fundacionvf.es" type="set">
<query xmlns="jabber:iq:register">
<email />
<password />
<username />
<name />
</query>
</iq>
</packet>
<packet xmlns="http://www.jivesoftware.org" streamID="c0057471" status="connected" timestamp="oct 25, 2011 04:43:52:265 PM">
<iq xmlns="" type="error" id="D1Dq5-3" to="www.fundacionvf.es/c0057471">
<query xmlns="jabber:iq:register">
<email />
<password />
<username />
<name />
</query>
<error code="500" type="wait">
<internal-server-error xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
</error>
</iq>
</packet>
私の推測が正しければ、最後のエラー タグが問題の鍵になるはずですが、それはどういう意味ですか?
PD: もちろん、OpenFire 構成でクライアント側の登録を有効にするようにしました。
編集:
私の問題をさらに調査した後、いくつかの質問が出てきました:
1.<iq xmlns="" id="D1Dq5-3" to="www.fundacionvf.es" type="set">
タグには登録情報が含まれているはずですか?
2. 2 番目のスタンザにリストされているすべてのフィールドは、登録に必須ですか?
よろしく。