我需要通过游戏中心对玩家进行身份验证。我设法做到了,但是它停止了工作。现在我总是得到“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;
}
}
};
}
我做错了什么吗?我应该先做什么/检查什么才能让它起作用?
最佳答案
如果您在同一台设备上测试了多次,那么首先要重置您的手机设置。引用this link
那么这段代码可以帮助你。
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 获取的代码中静态定义。它工作正常。但在此之前重置游戏中心所需的所有设置,就好像多次游戏中心身份验证失败然后游戏中心禁用该应用程序一样。我们必须重置所有设置。如果您想尝试,请在 iphone 模拟器中尝试。重置 iphone 模拟器并运行此代码。它有效。
关于ios - 如何通过 GameCenter 验证玩家身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724247/