2014-09-06 33 views
0

我正在用GameCenter開發一款遊戲,並且我有幾個測試人員在AdHoc(Beta)發行版中使用它,因此他們在我們準備上線時使用Sandbox進行測試。無法預知的GameCenter斷開連接錯誤[Sandbox]

我遇到不可預知的與GameCenter的斷開連接。例如,當使用GKLeaderboard.loadScoresWithCompletionHandler加載排名最高的排行榜分數時,它將返回NSError,表示該玩家未通過驗證(即使他在會話開始時進行了身份驗證並且以前的同類請求已成功,錯誤代碼爲#6 )。有時甚至發生在遊戲結束時,在成功完成GKTurnBasedMatch後,當我試圖向排行榜報告分數時。

有幾件事情我已經注意到:

  1. 它發生在我的iPad,並經常向我的幾個beta測試者(每天多次),但它從來沒有發生在我的iPhone或某些其他beta測試者,即使玩家在同一時間玩。例如,我可以用我的iPhone和我的iPad玩遊戲,而且iPad會一直遇到這個錯誤,但iPhone永遠不會。
  2. 它似乎比其他時候更糟糕。例如,我在週一晚上甚至無法打一場單場比賽,我的測試人員也遇到了很多問題,但週二晚上它運行良好。
  3. 它看起來好像沒有發送認證更改消息(即setAuthenticateHandler塊未被調用,也沒有發佈GKPlayerAuthenticationDidChangeNotificationName)。我的第一個跡象表明出現問題的原因只是GameCenter請求失敗並出現錯誤。

上面讓我覺得這與沙盒只是不可靠(例如,有人超載週一)的問題。但是,我不能在實時應用程序中冒這種經驗。

所以,我的問題是2部分:

  1. 任何人能證實的GameCenter是在生產實際可靠,而這些問題僅僅是沙盒?或者至少確認問題不在我的代碼中?
  2. 我該如何防禦這些類型的錯誤代碼?當我遇到這樣的錯誤時,我試過撥打[[GKPlayer localPlayer] setAuthenticateHandler:...],但似乎沒有對用戶進行重新驗證。
+1

我在沙箱中垃圾郵件與請求遊戲中心時看到類似的行爲。例如,發送太多成就,刪除/發送挑戰等等。根據我的經驗,它似乎是一種反DoS攻擊機制,因爲當您連續發送遊戲中心請求而無需等待先前的請求完成時,它會更頻繁地發生。通過批量處理我的請求並確保先前的請求已完成,然後再發送新請求。希望這可以幫助。 – Dario 2014-09-06 16:09:53

+1

@Dario,非常有幫助,謝謝。我沒有考慮到他們可能會限制客戶的速度,我絕對會相繼提出相當多的要求。 – 2014-09-06 16:40:40

回答

0

我們正面臨類似的問題。一個原因可能是,GameCenter似乎在主線程上運行一些保持活動的消息。一旦你的代碼甚至很快阻止了你,你可能會斷開連接。檢查你的線程。

你也可以考慮這個線程在蘋果開發者論壇:

https://devforums.apple.com/thread/199452?tstart=0