2011-11-24 14 views
2

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

だから、ユースケースは、シンプルかつ一般的です:ジョーは、オンラインや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. 
    }]; 
}} 
+0

こんにちは、これはどうやってできましたか? –

答えて

3

10分は、iOSで接続を維持できる程度の時間です。 もを見ると、 はタスクを完了するのにもっと時間を要求することができます。 100%接続したままにするには、 はinfo.plist(つまりUIBackgroundModes)にvoip、audioまたはlocationタグを追加する必要があります。

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

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

+0

あなたはあなたの最後のポイントを少し精巧にできますか?どのように外部サーバーを使用して接続を維持できますか? –

+0

接続は基本的にiOS側では機能しませんが、サーバーと物理リソースの間にまだ接続があります。サーバーは接続と電話を保持しています。 – tjg184

関連する問題