Trong trò chơi iOS, chúng tôi đang sử dụng Trung tâm trò chơi để xác định người chơi và đồng bộ hóa dữ liệu của họ trên các thiết bị sử dụng máy chủ của chúng tôi. Bởi vì Trung tâm trò chơi xác định người chơi, chúng tôi cần biết liệu họ có được xác thực hay không hoặc họ đã thay đổi xác thực hay không… Chúng tôi có màn hình tiêu đề hiển thị "Khởi tạo Trung tâm trò chơi ..." cho đến khi cuộc gọi xác thực trở lại và chỉ một lần chúng tôi biết họ được xác thực là ai (nếu có) để chúng tôi tham gia trò chơi.Đôi khi trình xử lý xác thực của Trung tâm trò chơi không bao giờ được gọi là
Tuy nhiên, một lượng rất nhỏ thời gian (trên thực tế, tôi không thể tự tái tạo), trình xử lý xác thực không bao giờ được gọi, bao giờ hết. Thậm chí sau vài phút chờ đợi. Biểu ngữ chào mừng của Trung tâm trò chơi không bao giờ hiển thị, vì vậy nó không chỉ là trình xử lý của chúng tôi không bao giờ được gọi, nhưng thực sự không có trạng thái xác thực nào.
Cho đến nay chúng tôi đã triển khai thời gian chờ 30 giây, nếu chúng tôi không nghe thấy gì từ Game Center, chúng tôi cho rằng trạng thái xác thực không thay đổi và chúng tôi sử dụng dữ liệu đã lưu của bạn. Thời gian chờ 30 giây đó không phải là lý tưởng, vì vậy tôi tự hỏi liệu có bất kỳ vần điệu hay lý do nào không khi GC không phản hồi.
Đây là đoạn mã đó được gọi là từ phương pháp application: didFinishLaunchingWithOptions:
App Đại biểu của chúng tôi:
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];
}
}];
}
Bạn có chắc chắn localPlayer không phải là không? Bạn có bất kỳ dự đoán nào về phiên bản iOS mà trình xử lý không được gọi không? Đây là phiên bản cuối cùng hay phiên bản beta? Nếu iOS 7 beta, hãy điền vào một báo cáo lỗi cho Apple. Bạn có chắc chắn không thiết lập trình xử lý hoàn thành ở những nơi khác không? – Gougou
Điều gì xảy ra? Nó có ghi lại lỗi hay không gì cả? Nó sẽ là tốt để biết đầu ra là gì, khi trung tâm trò chơi không hoạt động. – Binarian
@Gougou điều này đã xảy ra trên iOS 6 theo hiểu biết tốt nhất của tôi, không phải phiên bản beta. –