Не могу зарегистрировать новых пользователей в OpenFire, используя Smack.Что означают эти строфы? - PullRequest
2 голосов
/ 25 октября 2011

Я использую версию 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. Обязательны ли для заполнения все поля, перечисленные во втором разделе?

С уважением.

1 Ответ

2 голосов
/ 26 октября 2011
  1. Да, или в качестве альтернативы, форма, представленная в первом пакете, может быть отправлена ​​обратно на сервер, как показано в сценариях использования в http://xmpp.org/extensions/xep-0077.html
  2. В спецификации сказано, что клиент запрашивает у сервера обязательные поля, поэтому, вероятно, да. Но можно предположить, что реализацией вашего сервера действительно требуются только те, которые помечены как требуемые в форме, иначе разница будет бессмысленной.
...