2010-09-12 61 views
4

我正在为我的游戏添加Game Center支持。因为我的游戏可以在iOS版本上运行回到3.0,所以我希望它可以在没有Game Center的情况下在本地保存成就和排行榜。如何以编程方式检测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和Game Center文档在线,并没有任何运气搞清楚这一点。我当然可以检测操作系统版本,但看起来很蹩脚。这对于不支持的硬件(如3G)也无济于事。我想这也可以被检测到,但是,似乎有点跛脚。

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

回答

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); 
} 

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

+1

+1。哇,苹果,什么。 – kennytm 2010-09-12 19:31:30

+1

+1由于某些私人内容在早些时候可用而需要进行版本检查的罕见情况之一。 – Eiko 2010-09-12 19:31:42

+1

不知道我是如何错过的,谢谢! – zpasternack 2010-09-12 19:45:45