iOS 6游戏中心在认证时崩溃

4

我正在使用Cocos2d-iPhone开发游戏,在更新为iOS 6时,我注意到苹果改变了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也没有问题。
非常感谢任何帮助。
编辑: 以下是崩溃时抛出的异常: UIApplicationInvalidInterfaceOrientation:支持的方向与应用程序没有共同方向,并且shouldAutorotate返回YES。

1
显示崩溃的详细信息。日志输出、崩溃报告等。 - Ben Trengrove
我编辑了我的帖子,包括未处理的异常。这是你需要的吗? - Ryan Maloney
我找到了这个网址:https://dev59.com/a2ct5IYBdhLWcg3wAYzq 。现在程序不再闪退,但是它在纵向模式下启动了GC模态视图,而不是横向。 - Ryan Maloney
我已经向苹果报告了这个问题(#12485648)- 如果你也这样做,他们可能会更快地提供横向登录到游戏中心。 - bshirley
谢谢bshirley,但我非常确定苹果现在已经知道这个问题了。它是iOS 6发布说明的一部分,作为一个已知的错误。 - Ryan Maloney
2个回答

5

在这里,您可以找到有关崩溃的有用信息,我认为这是潜在原因。 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;
}

1
这解决了我的崩溃问题,但现在GC Auth视图以纵向显示,而不像我应用程序中的其余部分一样是横向的。你知道如何强制它变成横向吗? - Ryan Maloney
1
它只支持竖屏。因为你的应用程序只支持横屏,所以它崩溃了。上面的代码意味着横屏或竖屏(但不是倒置),因此它显示在竖屏模式下。这无疑会导致您的应用程序出现问题,因为它会不必要地旋转。尝试设置一个变量,并在用户通过身份验证时返回其他内容。向苹果系统报告一个错误,即不支持横屏。 - bshirley

0

遇到了类似的问题,我正在测试 isAuthenticated 和 authenticateHandler,但在加载当前视图时尝试呈现游戏中心视图时崩溃。我将此测试移至 viewDidAppear

  • (void)viewDidAppear:(BOOL)animated{

现在它正常运作...

另外对于 iOS 6,Game Center 仅会提示未经身份验证的用户一次,如果他们拒绝登录,则会为该应用程序禁用 Game Center,然后用户必须进入 Game Center 登录。


谢谢您的建议,但它没有修复我的游戏崩溃问题。 - Ryan Maloney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接