Как программно определить Game Center? - PullRequest
4 голосов
/ 12 сентября 2010

Я добавляю поддержку 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 (я не пробовал более ранние версии).Во-вторых, тест также проходит на устройствах с iOS 4.1, но не поддерживающих Game Center (например, iPhone 3G).

Я просмотрел различные документы по GameKit и Game Center в Интернете, и мне не повезло с этим разобраться.Я, конечно, мог определить версию ОС, но это выглядит неубедительно.Это также не поможет в случае неподдерживаемого оборудования (например, 3G).Полагаю, это также может быть обнаружено, но, опять же, кажется, что это немного неубедительно.

Каков «правильный путь» для программного определения поддержки Game Center?

1 Ответ

11 голосов
/ 12 сентября 2010

Это код, представленный в документации GameKit на сайте Apple:

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

...