在我們的iOS遊戲中,我們使用Game Center來識別玩家並使用我們自己的服務器跨設備同步他們的數據。由於Game Center識別玩家,我們需要知道他們是否已通過身份驗證,或者他們是否更改了身份驗證等。我們有一個標題屏幕,顯示「Initializing Game Center ...」,直到身份驗證呼叫返回,並且只有一次我們知道他們被認證爲誰(如果有的話)我們是否進入遊戲。有時候,Game Center身份驗證處理程序永遠不會被調用
然而,時間極少量的(其實,我無法重現它自己),認證處理程序不會被調用,直到永遠。甚至沒有等待幾分鐘。遊戲中心歡迎橫幅從不顯示任何一個,所以不是我們的處理程序從來沒有被調用過,但它確實沒有身份驗證狀態。
到目前爲止,我們已經實現,其中,如果我們不聽到遊戲中心什麼,我們假設認證狀態並沒有改變30秒超時,我們使用您保存的數據。 30秒的超時時間並不理想,所以我想知道當GC沒有響應時是否有任何押韻或原因。
這是從我們的應用程序委託的application: didFinishLaunchingWithOptions:
方法調用的代碼:我對我們的沙盒服務器上的遊戲之一測試期間有過這種經歷
PlayerModel *playerModel = [PlayerModel sharedPlayerModel];
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if ([localPlayer respondsToSelector:@selector(setAuthenticateHandler:)])
{
localPlayer.authenticateHandler = ^(UIViewController *gkViewController, NSError *error)
{
if (localPlayer.authenticated)
{
[playerModel loadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
else if (gkViewController)
{
[viewController presentViewController:gkViewController animated:TRUE completion:nil];
}
else
{
NSLog(@"Could not authenticate with Game Center");
[playerModel unloadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
};
}
else
{
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if (localPlayer.authenticated)
{
[playerModel loadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
else
{
NSLog(@"Could not authenticate with Game Center");
[playerModel unloadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
}];
}
你確定localPlayer不是零嗎? 你有沒有猜測與iOS版本的處理程序不被調用?它是最終版本還是測試版本? 如果iOS 7測試版,填寫錯誤報告給Apple。 你確定沒有設置完成處理程序爲零嗎? – Gougou
會發生什麼?它記錄錯誤,還是什麼都不記錄?當遊戲中心不工作時,知道輸出是什麼會很好。 – Binarian
@Gougou這已經發生在iOS 6上,據我所知,不是測試版本。 –