Я использую версию Android Smack API для Android и разрабатываю клиент, который автоматически регистрируется в случае, если он не был ранее зарегистрирован.
Хорошо, если я вручную зарегистрирую пользователя и войду с клиентом, все работает.Но я не могу заставить клиента создать нового пользователя.Кусок кода выглядит следующим образом:
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;
}
}
А вот и следы о строфах, которые я получил из журнала сервера.Я подозреваю, что эти конкретные 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. Обязательны ли для заполнения все поля, перечисленные во втором разделе?
С уважением.