2

XMPP を使用する iPhone チャット アプリと EJABBERD サーバーを使用しています。このアプリは、アプリがバックグラウンド (ホーム ボタンを押すか、アクティビティがなく、画面が黒くなる) になった場合に正しく機能するようにセットアップされており、引き続き正しく機能します。前面に出されたとき。

バックグラウンドに入ってフォアグラウンドに戻ると、アプリは iPad で正常に動作しますが、アプリがバックグラウンドに入ってから約 1 時間後に iPhone 4S でアプリを実行すると、アプリは XMPP サーバーからオフラインになります。その後、iPhone 4S がフォアグラウンドに戻ると、アプリは XMPP サーバーに接続されなくなります。対照的に、iPad では、アプリはバックグラウンドで 1 日以上実行されており、XMPP サーバーでまだオンラインになっています。

この SO投稿を見ましたが、アプリは iPad のバックグラウンドで 1 日以上実行されており、iPad のアプリはまだ XMPP サーバーでオンラインになっているため、問題ではないと思います。

1)  Is this because the iPhone 4S goes into Airplane mode after some time?

2)  If the answer to 1) is yes, is there a way for the app to programmatically stop the iPhone 4S from going into Airplane mode?

3)  Or is something else going on?

更新 1 -

興味深いのは、iPad は XMPP サーバー上でオフラインにできることですが、iPad 上のアプリをフォアグラウンドにすると、XMPP は正常に動作します。ただし、iPhone 4S のアプリが XMPP サーバーでオフラインになると、iPhone 4S のアプリがフォアグラウンドに移動すると、XMPP は機能しなくなります。また、iPad は XMPP サーバー上で 20 分ほどですぐにオフラインになりますが、iPhone 4S はオフラインになるまでに数時間かかります。もしかして、iPad と iPhone 4S の間でオフラインになる方法が違うのでしょうか?

このSO投稿で述べたように、XMPPStream.hでDEFAULT_KEEPALIVE_INTERVALを試してみましたが、これまでのところ成功していません。XXMPStream.h には次のコードがあります。

#if TARGET_OS_IPHONE
#define MIN_KEEPALIVE_INTERVAL      20.0 // 20 Seconds
#define DEFAULT_KEEPALIVE_INTERVAL 120.0 //  2 Minutes
#else
#define MIN_KEEPALIVE_INTERVAL      10.0 // 10 Seconds
#define DEFAULT_KEEPALIVE_INTERVAL 300.0 //  5 Minutes
#endif

更新 2 -

もう 1 つの奇妙な点は、アプリが iPhone 4 のバックグラウンドにある間に、iPad のアプリが iPhone 4 とチャットしたい場合、iPad がプッシュ通知を iPhone 4 に送信することです。このプッシュ通知により、アプリがオンになります。 iPhone 4 をフォアグラウンドに移動すると、iPhone 4 は EJABBERD サーバーに再接続しようとしますが、iPhone 4 は再接続できなくなります。

更新 3 -

iPad には Wifi しかありませんが、iPhone 4 には Wifi と 4G セルラー接続があります。だから私は多分それが違いだと思った。そこで、iPhone 4 を機内モードにしてから Wi-Fi に接続したので、iPhone 4 は Wi-Fi のみを使用していました。しかし、2 ~ 3 時間後、iPhone 4 は EJABBERD サーバーで再びオフラインになりました。

4

1 に答える 1