如何以编程方式检测游戏中心?

4

我正在为我的游戏添加Game Center支持。由于我的游戏可以在iOS 3.0版本及以上运行,所以我希望在没有Game Center的情况下,它可以回退到本地保存成就和排行榜。

目前,我有以下代码:

+ (BOOL) isGameCenterAvailable {
 Class playerClass = NSClassFromString( @"GKLocalPlayer" );
 if( playerClass != nil && [playerClass localPlayer] != nil ) {
  DebugLog( @"Game Center is available" );
  return YES;
 }

 DebugLog( @"Game Center is NOT available" );
 return NO;
}

然而,这似乎根本不起作用。一方面,尽管GKLocalPlayer参考声称该类在iOS 4.1及更高版本中可用,但上述测试在iOS 4.0中通过(我没有尝试早期版本)。另一方面,在不支持Game Center的设备上(例如iPhone 3G),即使其运行iOS 4.1,测试也会通过。

我查阅了各种在线的GameKit和Game Center文档,但仍未能找到答案。我当然可以检测操作系统版本,但这似乎很糟糕。对于不受支持的硬件(如3G),这也无济于事。我想这也可以被检测到,但再次,似乎有点糟糕。

编程方式检测Game Center支持的“正确方法”是什么?

1个回答

11

这是苹果官网上GameKit文档提供的代码:

BOOL isGameCenterAvailable()
{
    // Check for presence of GKLocalPlayer API.
    Class gcClass = (NSClassFromString(@"GKLocalPlayer"));

    // The device must be running running iOS 4.1 or later.
    NSString *reqSysVer = @"4.1";
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);

    return (gcClass && osVersionSupported);
}

点击此处


1
+1 这是一个罕见的情况,需要进行版本检查,因为一些私有内容早先就可用了。 - Eiko
他们原计划在iOS 4.0中发布GameCenter,但在最后一刻将其删除了... 它甚至出现在4.0的Golden Master版本中... - dododedodonl
@PEZ:这段代码将返回YES,但是GC永远不会在3G上进行身份验证。您可以使用此代码来检查是否启用GC功能,启用后需要进行身份验证才能实际使用它们。3G将无法通过最后一部分。 :) - MH114
3
谢谢,我不想让我的用户在不点击按钮的情况下被游戏中心认证对话框所惊吓。而且除非游戏中心可用,我根本不想显示那个按钮。 - PEZ

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