ios - 有时永远不会调用 Game Center 身份验证处理程序

标签 ios authentication timeout game-center gamekit

在我们的 iOS 游戏中,我们使用 Game Center 来识别玩家并使用我们自己的服务器跨设备同步他们的数据。因为 Game Center 识别玩家,我们需要知道他们是否经过身份验证,或者他们是否更改了身份验证等。我们有一个标题屏幕显示“正在初始化 Game Center ...”,直到身份验证调用返回,并且只有一次我们知道他们被认证为谁(如果有的话)我们是否进入游戏。

但是,在极少数情况下(事实上,我自己无法重现),永远不会调用身份验证处理程序。甚至在等待几分钟之后。 Game Center 欢迎横幅也从不显示,所以这不仅仅是我们的处理程序从未被调用,而是似乎确实没有身份验证状态。

到目前为止,我们已经实现了 30 秒的超时,如果我们没有从 Game Center 听到任何消息,我们会假设身份验证状态没有改变,并且我们会使用您保存的数据。 30 秒超时并不理想,所以我想知道 GC 何时不响应是否有任何规律或原因。

这是从我们的 App Delegate 的 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];
        }
    }];
}

最佳答案

我在沙盒服务器上测试我们的一款游戏时有过这样的经历,有时确实没有通知或身份验证处理程序调用,然后它会在半小时后工作。

我们推测这是由于 Apple 的服务器端造成的,因为我们从未在 Game Center 沙箱之外遇到过此问题。

抱歉,解释有点含糊,您无能为力。但这不是你的代码。结局是你无法控制的。

关于ios - 有时永远不会调用 Game Center 身份验证处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392888/

相关文章:

java - Axis2 ServiceClient 选项忽略超时

ios - 如何使段控制在 Swift4 中工作?

iphone - NSFetchedResultsController numberOfObjects 在设备上运行时返回附加(重复)

objective-c - 未找到体系结构 i386 的符号

sql-server - SQL Server 代理作业超时

ajax - jQuery AJAX 超时后 IE7 中出现 "The data necessary to complete this operation is not yet available"消息

ios - React Native-打包器未启动

swift - 无法使用 AWS Cognito 登录和访问 token

Apache 身份验证(本地主机除外)

javascript - 如何进行允许浏览器刷新的匿名 Firebase 登录?