iOS 6 Game Center 在身份验证时崩溃

Posted

技术标签:

【中文标题】iOS 6 Game Center 在身份验证时崩溃【英文标题】:iOS 6 Game Center Crash on Authentication 【发布时间】:2012-09-27 01:05:25 【问题描述】:

我正在 Cocos2d-iPhone 中构建游戏,当我更新到 ios 6 时,我注意到 Apple 改变了 Game Center 身份验证的方式,使用 authenticateHandler 而不是 authenticateWithCompletionHandler

我添加了新的身份验证方法,但如果玩家尚未登录 Game Center,游戏现在会崩溃。如果用户已经登录,则验证没有问题。

这是我的代码:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))

    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
    
        if (viewController != nil)
        
            AppController *appDelegate = (AppController*)[UIApplication sharedApplication].delegate;

            [delegate.viewController presentViewController:viewController animated:YES completion:nil];
        
        else if (localPlayer.isAuthenticated)
        
            NSLog(@"Player authenticated");
        
        else
        
            NSLog(@"Player authentication failed");
        
    ;

在尝试显示 Game Center 视图控制器时,它似乎崩溃了,尽管我使用完全相同的代码来显示 GKTurnBasedMatchmakerViewController 没有任何问题。

任何帮助将不胜感激。

编辑: 这是崩溃时抛出的异常:

Uncaught Exception UIApplicationInvalidInterfaceOrientation: Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES

【问题讨论】:

显示崩溃的详细信息。日志输出、崩溃报告等 我编辑了我的帖子以包含未处理的异常。那是你需要的吗? 我发现了这个:***.com/questions/12427979/…。它现在没有崩溃,但它以纵向而不是横向启动 GC 模态视图。 i reported this as a bug to Apple (#12485648) - 如果您也这样做,他们可能会更快地提供面向游戏中心的横向登录 感谢 bshirley,但我很确定 Apple 现在已经很清楚这个问题了。它是 iOS 6 发行说明的一部分,是一个已知错误。 【参考方案1】:

在这里您可以找到有关崩溃的有用信息,我认为这是根本原因。 https://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html

应用应提供委托方法 application:supportedIntefaceOrientationsForWindow 并确保肖像是返回的掩码值之一。

我添加了下面的代码来修复这个崩溃。

- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window

    return UIInterfaceOrientationMaskAllButUpsideDown;

【讨论】:

修复了我的崩溃问题,但现在 GC Auth 视图出现在纵向中,而不是像我的应用程序的其余部分那样出现在横向中。你知道如何强制它进入横向吗? 它只有纵向。它崩溃了,因为您的应用程序仅处于横向状态。上面的代码表示横向或纵向(但不是倒置),因此它以纵向显示。这(毫无疑问)会导致您的应用程序出现不受欢迎的旋转问题。当用户通过身份验证时,尝试设置任何返回其他内容的变量。在 Apple 系统中输入不支持横向的错误。【参考方案2】:

有类似的问题,我在 viewDidLoad 中测试 isAuthenticated 和 authenticateHandler,在中间加载当前视图时尝试呈现游戏中心视图时一直崩溃。我将此测试移至 viewDidAppear

(void)viewDidAppear:(BOOL)动画

现在可以正常使用了……

同样对于 ios 6,Game Center 只会提示非认证用户一次,如果他们拒绝登录,它将禁用该应用的 Game Center,然后用户将进入 Game Center 登录。

【讨论】:

感谢您的建议,但它并没有解决我游戏中的崩溃问题。

以上是关于iOS 6 Game Center 在身份验证时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

处理 Game Center 身份验证

iOS 8 beta 5 Game Center Sandbox 无法识别我的应用

iOS 开发:验证 Game Center 用户的奇怪问题

iOS 6 中的 Game Center 出现问题

iOS 6 Game Center authenticateHandler取消后无法登录

iOS 6 Game Center authenticateHandler 取消后无法登录