私の 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}`);
}
}