1

私の ionic 4 アプリケーションでは、strophe.js を使用して Ejabbered サーバーに接続しています。ステータスが接続された後のアプリケーションでは、チャットを正常に表示できますが、しばらくすると自動的に切断され、何もせずにチャットが消えます。

ログでは、Strophe は次のステータスで切断されています。

EjabService [接続] 不明なステータスを受け取りました: ステータスは 10 です

また、一部のデバイスでは、接続の問題によりチャットを表示できません。

インストール済みのバージョン: 20.03

Strophe.js を使用して Ejabbered サーバーに接続するコードは次のとおりです。

 /*Function
        Connects the client from the Jabber server.
      Parameters:
        (String) jid - Jabber id.
        (String) pass - Password.
      Returns:
 */
login(jId, password, callback) {
    try {
      this.connection = new Strophe.Connection(this.BOSH_SERVICE, {
        keepalive: true,
      });

      this.connection.connect(jId + "@" + this.host, password, (status) => {
        this.onConnect(status, callback);
      });
    } catch (error) {
      console.log(`error connecting to bosh service ${error}`);
    }
  }

 /*Function
        Connect XMPP.
      Parameters:    
      Returns:
        status - Status of connection.
*/
onConnect(status, callback) {
    try {
      var self = this;
      switch (status) {
        case Strophe.Status.CONNECTED:
          this.logger.info(
            `EjabService [Connection] Strophe is Connected with status ${status}`);
          callback();
          self.connection.addHandler(
            (msg) => {
              return self.onMessage(msg);
            },
            null,
            "message",
            null,
            null,
            null
          );
          self.connection.addHandler(
            (ping) => {
              return self.onPing(ping);
            },
            Strophe.NS.PING,
            "iq",
            "get"
          );
          self.connection.send($pres().tree());
          break;
        case Strophe.Status.ATTACHED:
          this.logger.info(
            `EjabService [Connection] Strophe is Attached with status ${status}`);
          break;

        case Strophe.Status.DISCONNECTED:
          this.logger.info(
            `EjabService [Connection] Strophe is Disconnected with status ${status}`);
          break;

        case Strophe.Status.AUTHFAIL:
          this.logger.info(
            `EjabService [Connection] Strophe is Authentication failed with status ${status}`);
          break;

        case Strophe.Status.CONNECTING:
          this.logger.info(
            `EjabService [Connection] Strophe is Connecting with status ${status}`);
          break;

        case Strophe.Status.DISCONNECTING:
          this.logger.info(
            `EjabService [Connection] Strophe is Disconnecting with status ${status}`);
          break;

        case Strophe.Status.AUTHENTICATING:
          this.logger.info(
            `EjabService [Connection] Strophe is Authenticating with status ${status}`);
          break;

        case Strophe.Status.ERROR:
        case Strophe.Status.CONNFAIL:
          this.logger.info(
            `EjabService [Connection] Failed with status ${status}` );
          break;

        default:
          this.logger.info(
            `EjabService [Connection] Unknown status received: and status is ${status}`
          );
          break;
      }
    } catch (error) {
      this.logger.info(`connection error ${error}`);
    }
  }
4

0 に答える 0