バックグラウンドでiphone ios xmppの接続を維持する方法

iPhone用のXMPPFrameworkは強力です。私はそれを稼働させていますが、10分間以上バックグラウンドで接続を維持するにはどうしますか?私はこれを達成するためのいくつかのドキュメント/ハウツーに感謝します。

したがって、ユースケースはシンプルで一般的です。ジョーはオンラインで、iPhoneのチャットアプリにあります。彼はチャットアプリを離れてSafariに行き、ゲームをしたり、映画をストリーミングしたり、他のものを3時間(またはそれ以上)もやります。ジョーはその間にメッセージを受け続けたいと思っています。

このサンプルアプリケーションを使用すると、Joeはバックグラウンドでローカルの通知を受け取ることができますが、わずか10分で表示されます。関連するコードは次のとおりです(私は思います)。ありがとう!

他の人を助けるために、xmppstreamプロパティenableBackgroundingSocketをYESにする必要があります(これはあなたがコピーすべきiphoneXMPPサンプルプロジェクトで行われます)appname-info.plist(つまり、iosChat- info-plist)ファイルに新しいキーと値のペアを追加する必要があります。どこか右クリックして「行を追加」する必要があります。キーの "必須バックグラウンドモード"を選択し、 "voip"と入力します。 Enterキーを押すと、「AppはVoice over IPサービスを提供します」という意味になります。これは、あなたがチャットアプリをバックグラウンドで開いたままにしている(私は思う)10分を得る。しかし、私たちは無期限に欲しいと思っています。答えは以下の方法にあると思います。私はちょうどこのメソッドまたは何かの中で "再接続"すると思いますか?(例えば、私はconnectメソッドを持っています)[self connect]?

- (void)applicationDidEnterBackground:(UIApplication *)application{

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

if ([application respondsToSelector:@selector(setKeepAliveTimeout:handler:)]) 
{
    [application setKeepAliveTimeout:600 handler:^{

        DDLogVerbose(@"KeepAliveHandler");

       //Do other keep alive stuff here.
    }];
}}
2
こんにちは、どうやってこれをやることができましたか?
追加された 著者 Ahmed Z.,

1 答え

iOSが接続を維持できるようになるまでのおおよその時間は10分です。あなたはできる [app beginBackgroundTaskWithExpirationHandler] もご覧ください。 タスクを完了するためにさらに時間を要求する。 100%の接続を維持するためには、 info.plist(つまりUIBackgroundModes)にvoip、audio、locationタグを追加する必要があります。

これらのタグのいずれかを追加しない限り、バックグランドは機能しません。さらに、タグを追加する あなたは接続したままにすることができますが、実際のタグはApp Storeに提出する場合に有効でなければなりません。実際のユースケースがない場合、Appleはこのアプリを拒否する。

タグなしで長時間接続し続けるには、接続を維持してプッシュ通知を使用してメッセージを配信するサーバーを使用する必要があります。

3
追加された
あなたの最後のポイントを少し詳しく説明できますか?どのように外部サーバーを使用して接続を維持できますか?
追加された 著者 Clement Prem,
iOS側では接続は基本的に機能しませんが、サーバーと物理リソースの間にはまだ接続があります。サーバーは接続と電話を保持しています。
追加された 著者 tjg184,