Ios 如何通过GameCenter验证玩家身份

Ios 如何通过GameCenter验证玩家身份,ios,game-center,Ios,Game Center,我需要通过游戏中心验证玩家身份。我设法做到了,但它停止了工作。现在我总是得到“viewController=nil”,当检查localPlayer是否经过身份验证时,它总是返回false 这就是我正在做的: -(void)authenticateLocalPlayer{ GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; localPlayer.authenticateHandler = ^(UIViewContr

我需要通过游戏中心验证玩家身份。我设法做到了,但它停止了工作。现在我总是得到“viewController=nil”,当检查localPlayer是否经过身份验证时,它总是返回false

这就是我正在做的:

-(void)authenticateLocalPlayer{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
        if (viewController != nil) {
            [_spriteViewController presentViewController:viewController animated:YES completion:nil];
        } else {
            if ([GKLocalPlayer localPlayer].authenticated) {
                NSLog(@"authenticated");
                _gameCenterEnabled = YES;

                // Get the default leaderboard identifier.
                [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {

                    if (error != nil) {
                        NSLog(@"%@", [error localizedDescription]);
                    } else {
                        _leaderboardIdentifier = leaderboardIdentifier;
                    }
                }];
            } else {
                NSLog(@"not authenticated"); // This is always triggered
                _gameCenterEnabled = NO;
            }
        }
    };
}

我做错什么了吗?我应该先做什么/检查哪些事情才能让它工作?

如果您在同一台设备上测试了多次,那么首先重置您的手机设置。提及

那么这段代码可以帮助您

       if ([GKLocalPlayer localPlayer].authenticated == NO) {
            GKLocalPlayer* localPlayer = [GKLocalPlayer localPlayer];

            localPlayer.authenticateHandler = ^(UIViewController *gcvc,NSError *error) {

                if(gcvc) {

                    [self presentViewController:gcvc animated:YES completion:nil];
                }
                else {
                    _gameCenterEnabled = NO;

                }
            };
        }

        else if ([GKLocalPlayer localPlayer].authenticated == YES){
            _gameCenterEnabled = YES;


        }

对于排行榜标识符,您可以先在已从itunes获取的代码中静态定义。它很好用。但在此之前,重置game center所需的所有设置,就像多次game center身份验证失败一样,然后game center禁用该应用程序。我们必须重置所有设置。如果您想尝试,请在iphone模拟器中尝试。重置iphone模拟器并运行此代码。它是有效的。

你读过这里的讨论吗?您应该提供传递给处理程序的视图控制器,以便让玩家通过Game Center进行身份验证。我不知道为什么不提供。我刚刚更正了它,但很多时候viewController为零。为什么会发生这种情况?你是否检查过你在主线程上调用所有这些?是的,在启动时,我总是得到“未验证”@lisovacaro-你能通过进入游戏中心应用程序一次并从游戏中再次尝试来清除游戏中心登录吗?有时,它只会坚持上一个会话并放弃您所做的更改。