我可以在我的应用程序外检查Game Center身份验证状态吗?

时间:2010-12-22 12:36:18

标签: iphone objective-c cocoa-touch game-center

我希望能够知道运行我的应用的用户是否已连接到GameCenter(通过GameCenter应用或通过其他应用),当我第一次运行我的应用时。

我发现如果我检查布尔值:

[GKLocalPlayer localPlayer].authenticated)

它返回false。我想有一件事可能会解决这个问题,那就是在启动时运行:

[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error)

但是,如果用户未连接,则会弹出游戏中心,请求现有帐户或创建新帐户。

所以我的问题是:当我的应用程序关闭时,有没有办法知道我的用户在我的应用程序之外连接了GC,而没有弹出上面的警报,以防他没有连接?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以在iOS 6.0或更高版本上执行此操作:

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
        if (viewController == nil && error == nil) {
            NSLog(@"Here, you know that the user has already signed to Game Center, whether in through your app or not.");
        } 
    };

答案 1 :(得分:0)

在我看来,Game Center会在每个不同的应用程序中对用户进行身份验证,而不是通过iOS进行全局身份验证。因此,如果不使用authenticateWithCompletionHandler:方法,则无法检查用户的身份验证状态。

顺便说一句,我认为你应该修改这个用户界面机制。它会带给你一些问题。 Game Center身份验证将使用所有应用程序共享的全局帐户(首先是App Store帐户),您应该依靠Game Center来处理身份验证。假设你可以做你正在寻找的东西(我认为这是不可能的),如果你已经通过第三方应用程序登录,你甚至可以登录到你的GC;但如果您未在应用程序外登录,则无法在应用程序中使用GC。

这对您来说可能是个问题,因为如果用户拥有有效帐户,并且他目前已从“设置”应用中退出App Store,则他将无法登录到您的应用的GC(因为您执行此操作)不希望向用户显示登录警报)。您必须依赖第三方应用程序才能启用所有GC功能。因此,此时GC将变得毫无用处。

这真的是你想要的应用程序吗?如果用户可能无法有效使用GC,为什么要启用GC?