如何以编程方式检测Game Center?

时间:2010-09-12 19:23:51

标签: iphone objective-c ios4 ios gamekit

我正在为游戏添加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 reference声明此类在iOS 4.1及更高版本中可用,但上述测试在iOS 4.0中通过(我没有尝试过早期版本)。另外,测试还传递了具有iOS 4.1但不支持Game Center的设备(例如,iPhone 3G)。

我已经在线浏览了各种GameKit和游戏中心文档,并且没有任何运气可以解决这个问题。我当然可以检测到操作系统版本,但这似乎很蹩脚。对于不支持的硬件(如3G)的情况,这也无济于事。我猜想也可以检测到这种情况,但再次看起来有点蹩脚。

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

1 个答案:

答案 0 :(得分:11)

这是Apple网站上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);
}

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/GameKit_Guide/GameCenterOverview/GameCenterOverview.html%23//apple_ref/doc/uid/TP40008304-CH5-SW7