我在兩臺iOS設備之間建立了連接,使用GameKit和GKMatch進行同步遊戲。當一個玩家進入後臺時,連接將斷開。我怎樣才能避免這種行爲?是否有可能通過GKMatch保持連接處於活動狀態,而有一位用戶將應用程序暫停後臺?Gamekit在進入後臺時繼續會話
回答
根據蘋果的文檔:
只要你的遊戲移動到背景下,本土選手對象的認證屬性的值變,直到你的遊戲移回前景仍然無效。您無法讀取該值以確定播放器是否仍然通過驗證,直到Game Kit重新驗證播放器並調用您的驗證處理程序。除非您的完成處理程序被調用,否則您的遊戲必須表現得好像沒有經過身份驗證的玩家。一旦你的處理程序被調用,存儲在認證屬性中的值再次有效。
來源:Game Center Programming Guide, pg. 39。
除非您的應用程序採用VOIP或特殊情況適用,否則您不應該在後臺打開網絡連接。 (如果你有興趣,請查看this SO question以瞭解黑客的方式)。 由於您的播放器身份驗證在進入後臺時失效,因此其他設備(如果確實能夠從後臺應用程序接收網絡數據)不會(可靠地)知道哪個GKPlayer發送了該信息。
所以,儘管Apple沒有明確說出,但在應用程序進入後臺時通常應取消所有Game Center功能,並在重新啓動後重新進行身份驗證後恢復。
作爲一個側面說明,當應用程序退出到背景時,它是(通常取決於後臺任務)被視爲「有資格暫停」。這就是多任務執行存在這種限制的原因之一 - 您的應用程序可能會在任何時候被殺死以釋放內存,並且當這種情況發生時您並不真的想要進行繁重的數據傳輸! 如果您想了解有關網絡和多任務處理的更多信息,請參見TN227。
編輯:另一種方法:
雖然不可能保持一個GKMatch活着而一個應用程序在後臺運行,來模擬這種行爲的另一種方式將遊戲狀態保存到您的擁有服務器。要求用戶在他/他離開遊戲之前與某個用戶界面(可能按下一個按鈕)進行交互,這會將當前遊戲狀態保存到自己的服務器,並通知其他玩家您即將離開遊戲。重新啓動後,查詢您的服務器以查看是否有任何已保存的遊戲,如果有,請加載遊戲狀態並向其他玩家發送通知。這並不是嚴格保持同一個遊戲,而是一種近似你以後的行爲的方法。
這是不可能的
,你可以不喜歡當一個球員在後臺
在這種情況下 輸入 - (空)applicationDidEnterBackground:(UIApplication的*)應用程序{} 消息發送到第二播放器中的分組數據第一玩家進入在背景
然後在 - (無效)receiveData的:(NSData的*)數據fromPeer:(的NSString *)對等inSession:(GKSession *)會話上下文:(無效*)上下文; { } 當perticuler數據停止您的應用程序並彈出到以前的視圖
- 1. MPMusicPlayerController在後臺暫停並在應用程序進入前臺時繼續
- 2. 當應用程序進入後臺時繼續下載
- 3. 繼續在後臺上傳
- 4. 在後臺繼續下載
- 5. 在iOS4的後臺繼續長時間運行的進程
- 6. 使用JSESSIONID繼續會話
- 7. 會話無法繼續
- 8. 繼續在Java中的Ctrl + Z之後繼續閱讀控制檯輸入
- 9. 如何在後臺繼續在前臺繼續使用NSURLConnection開始連接?
- 10. 需要youtube音頻繼續播放時,iOS應用程序進入後臺
- 11. 在後臺繼續執行任務
- 12. 在後臺狀態下繼續操作
- 13. AS3 UILoader SWF在後臺繼續播放
- 14. iOS使AVPlayer繼續在後臺播放
- 15. 繼續在後臺運行代碼ASP.NET
- 16. MVC會話過期 - 繼續在左邊
- 17. 幫助PHP會話在離開現場後繼續存在
- 18. 刪除子女後繼續後臺進程
- 19. 循環繼續進行後
- 20. React-native,繼續在後臺下載進程
- 21. 在循環中繼續前進後臺任務
- 22. 如何在這種情況下繼續執行後臺進程
- 23. iOS - AVAudioPlayer不會在後臺繼續播放下一首歌曲
- 24. PHP在沒有www的情況下繼續進行會話
- 25. 進入後臺後,應用程序是否繼續執行網絡操作?
- 26. 安卓倒計時計時器繼續在後臺運行
- 27. 在node.js重新啓動後繼續保持會話
- 28. CountDownTimer繼續進入底片
- 29. Linphone for iPhone在進入後臺模式時未接到電話
- 30. 主線程在pthread後不會繼續