同期ゲーム用のGameKitとGKMatchで2つのiOSデバイス間の接続を確立します。 1人のプレーヤーがバックグラウンドに入ると、接続は切断されます。どうすればこの問題を回避できますか? 1人のユーザーがアプリをバックグラウンドで中断している間に、GKMatch経由で接続を維持することは可能ですか?バックグラウンド入力時にゲームキットを続行する
答えて
は、Appleのドキュメントによると:
とすぐにあなたのゲームがバックグラウンドに移動すると、ローカルプレーヤーオブジェクトの認証されたプロパティの値となると、あなたのゲームが戻ってフォアグラウンドに移動するまで無効のままです。値を読み取って、Game Kitがプレーヤーを再認証して認証ハンドラを呼び出すまで、プレーヤがまだ認証されているかどうかを判断することはできません。完了ハンドラが呼び出されるまでは、認証されたプレーヤが存在しないかのようにゲームを動作させる必要があります。ハンドラが呼び出されると、認証済みプロパティに格納された値が再び有効になります。
出典:Game Center Programming Guide, pg. 39。
あなたのアプリケーションはVOIPを採用したり、特別な事情が適用されない限り、あなたは本当にバックグラウンドで開いてネットワーク接続を維持するべきではありません。 (もしあなたが興味があれば、そのことについては、ハッカーの方法についてはthis SO questionをチェックしてください)。 バックグラウンド入力時にプレイヤー認証が無効になるため、別のデバイス(バックグラウンドアプリからネットワークデータを受け取っている場合)は、どのGKPlayerが情報を送信したかを(確実に)認識しません。
だから、Appleが出てくると、すべてのゲームセンターの機能が正常に一度プレイヤーがリニューアル時に再認証されたアプリケーションがバックグラウンドに入ったときに解除され、再開されなければならない、明示的にそれを言うことはありませんが。アプリケーションは、それが(バックグラウンドタスクに応じて、通常)である背景に引き出す側ノートとしては、「サスペンションの対象」と見なさ。これは、マルチタスクの実行にこのような制限がある理由の1つです。あなたのアプリケーションはいつでもメモリを解放するために殺される可能性があります。 ネットワークとマルチタスクの詳細については、TN227を参照してください。
EDIT:代替方法:
生きGKMatchを維持することはできませんがアプリケーションをバックグラウンドで実行されている間、この動作をエミュレートする別の方法は、あなたにゲームの状態を保存することです自分のサーバー。あなたが自分のサーバーに現在のゲームの状態を保存し、あなたがゲームを離れようとしていることを他のプレイヤーに知らせるために、ゲームを離れる前にUIを操作して(ボタンを押してください)再起動時にサーバーに照会して、保存されているゲームがあるかどうか確認し、そうであれば、ゲームの状態を読み込んで、他のプレイヤーに通知します。これは厳密に同じゲームを維持するものではありませんが、あなたが行っている動作を近似する1つの方法です。
この一人のプレイヤーは、このイベント で背景
に入力するときは次のように行うことができます
ことはできません - (無効)applicationDidEnterBackground:(のUIApplication *)アプリケーション{} は、第二にメッセージを送信します最初のプレーヤーがバックグラウンドで行っているパケットデータのプレーヤー
次に - (void)receiveData:(NSData *)fromPeer:(NSString *)peer inSession:(GKSession *)セッションコンテキスト:(void *)context; { } そのデータがアプリケーションを停止して前のビューにポップアップするとき
- 1. バックグラウンド入力時にUIDocumentをiCloudにアップロード
- 2. マウス入力時にスクロールし続ける
- 3. ユーザー入力時に改行を挿入する
- 4. pygame連続キー入力と同時キー入力
- 5. iOS4のバックグラウンドで長時間実行され続けるプロセス
- 6. 実行時に入力列挙型
- 7. 実行時にグリッドビューにデータを入力する
- 8. バックグラウンドで長時間実行するタスク
- 9. 入力時に下線入力フィールド
- 10. App SDK:クエリ実行時に入力ストリームを解析するErorr
- 11. JSF - 実行時に値を入力する
- 12. CakePHPでページ出力後に長時間実行するコードを続行
- 13. 入力時にフォールトを許可する
- 14. 入力時にループを終了する
- 15. 実行時に値を入力して実行中に表示する
- 16. jQuery:入力テキストフィールドの入力時にラジオボタンをオンにします。
- 17. ページテキスト入力時にアンドロイドブラウザにジャンプする
- 18. cの別の行に入力文字を入力する
- 19. MSBuild:最初の実行時にターゲット入力と出力が失敗する
- 20. 出力ピンを入力ピンに接続する
- 21. C++出力ストリームを入力ストリームに接続する
- 22. 時間入力のテキスト入力keyupイベント
- 23. データ入力時にMySQL行が削除される
- 24. Windowsでバックグラウンドを中断することなく特定のウィンドウにキーボード入力を発行する
- 25. Powershell - 入力時にトラップキャンセル
- 26. readline:入力時に画面上の入力を大文字に変換する
- 27. 入力またはテキストエリアの入力時にjquery keypressを無効にする
- 28. アプリがiOSでバックグラウンドを入力したときに操作を続ける私のアプリで
- 29. 実行時にshell_execを出力する
- 30. Xcodeの "入力時にスペルチェックを行う"オプションを有効にする