3

我对 Game Center 的开发完全陌生。我在 WWDC 中观看了视频并查看了开发者网站。他们建议我为 iOS 6 输入这样的代码:

- (void) authenticateLocalPlayer
{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
         if (viewController != nil)
         {
             [self showAuthenticationDialogWhenReasonable: viewController
         }
         else if (localPlayer.isAuthenticated)
         {
             [self authenticatedPlayer: localPlayer];
         }
         else
         {
             [self disableGameCenter];
         }
     }];
}

我已将其复制到应用程序 delegate.m 文件中,但它不喜欢它,显示错误,例如在 [self showAuthenticationDialogWhenReasonable: viewController } 之后出现 ] 等错误。

谁能告诉我如何在 iOS 6 中对游戏中心的用户进行身份验证?

4

3 回答 3

2

要了解 GameKit,Apple 提供了一些示例,例如: https ://developer.apple.com/library/ios/#samplecode/GKLaderboards/Introduction/Intro.html 。

在您的代码中,您缺少结束的“]”,但当然您需要的不仅仅是这个函数来连接到 gameCenter。最好从其中一个样本开始。

于 2012-10-11T07:21:00.567 回答
1

苹果发布了不正确的代码,]; 接近代码的末尾属于这一行的末尾 [self showAuthenticationDialogWhenReasonable: viewController

不需要此代码,因为这只是解释方法 authenticateLocalPlayer 在 Gamekit 中的工作原理

于 2013-05-17T04:12:36.547 回答
0

这是我在不必使用不推荐使用的方法的情况下所做的:

通过调用下面的函数立即在 AppDelegate 中设置身份验证处理程序(我把它放在一个单例助手对象中)。此时,没有用于显示登录视图控制器的视图控制器,因此如果身份验证失败,并且处理程序为您提供视图控制器,只需将其保存即可。这是用户未登录时的情况。

- (void)authenticateLocalUserNoViewController {
    NSLog(@"Trying to authenticate local user . . .");

    GKLocalPlayer *_localPlayer = [GKLocalPlayer localPlayer];
    __weak GKLocalPlayer *localPlayer = _localPlayer;  // Avoid retain cycle inside block
    __weak GCHelper *weakself = self;
    self.authenticationViewController = nil;

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
    {
        if (viewController) {
            NSLog(@"User not logged in");
            weakself.authenticationViewController = viewController; // save it away
        } else if (localPlayer.authenticated) {
            [[GKLocalPlayer localPlayer] unregisterListener:self];
            [[GKLocalPlayer localPlayer] registerListener:self];
            NSLog(@"Local player %@ (%@) authenticated.  ID = %@",localPlayer.alias, localPlayer.displayName, localPlayer.playerID);
        } else {
            // Probably user cancelled the login dialog
            NSLog(@"Problem authenticating %@", [error localizedDescription]);
        }
    };

}

然后,一旦您的主屏幕已加载,并且用户想要按下按钮开始在线游戏,请显示您之前隐藏的登录视图控制器。我把它放在我的助手类的另一个方法中。当用户登录时,它将触发执行您原来的身份验证块,但 viewcontroller 参数将为 nil。

-(BOOL) showGameCenterLoginController:(UIViewController *)presentingViewController {
    if (self.authenticationViewController) {
        [presentingViewController presentViewController:self.authenticationViewController animated:YES completion:^{
                }];
        return YES;
    } else {
        NSLog(@"Can't show game center view controller!");
        return  NO; // Show some other error dialog like "Game Center not available"
    }

}
于 2014-08-29T20:15:02.637 回答