Успешная и неудачная аутентификация в Game Center (iOS 7, Objective C)

Я следил за несколькими учебными пособиями и документацией Apple по аутентификации локального игрока для функций Game Center с использованием Objective C. В настоящее время наша бета-версия имеет функционирующую аутентификацию Game Center для списков лидеров. Однако, похоже, что-то не так с аутентификацией для достижений, потому что ни одно из наших достижений не приходит из iTunes Connect. Из ViewController.m первая аутентификация происходит, как показано ниже:

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(showAuthenticationViewController)
 name:PresentAuthenticationViewController
 object:nil];

[[GameKitHelper sharedGameKitHelper] authenticateLocalPlayer];
}

- (void)showAuthenticationViewController
{
GameKitHelper *gameKitHelper = [GameKitHelper sharedGameKitHelper];
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: gameKitHelper.authenticationViewController animated:YES completion:nil]; }

В GameKitHelper происходит следующий этап аутентификации:

- (void)authenticateLocalPlayer
{
//1
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) {
    //3
    [self setLastError:error];

    if(viewController != nil) {
        //4
        [self setAuthenticationViewController:viewController];
    } else if([GKLocalPlayer localPlayer].isAuthenticated) {
        //5
        _enableGameCenter = YES;
        NSLog(@"Successful");
    } else {
        //6
        _enableGameCenter = NO;
        NSLog(@"Failure");
    }
  };
}

При загрузке достижений используется следующая функция:

-(void)achievementLoad {
if (_enableGameCenter) {
    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) {
        if (error != nil) {
            NSLog(@"Error in loading achievements.");
        }
        if (achievements != nil) {
            //Process achievements.
            for (GKAchievement *temp in achievements) {
                //temp
                [[GameKitHelper sharedGameKitHelper].achievementsDictionary setObject:temp forKey:temp.identifier];
                //[_achievementsDictionary setObject:temp forKey:temp.identifier];
            }
            NSLog(@"Achievements Retrievemented");
        }
    }];
  } else {
    NSLog(@"Achievements not loaded");
  }
}

При попытке получить достижения игра всегда будет сообщать «Код ошибки 6: игрок не аутентифицирован» (ошибка != nil — истина). Затем, когда я пытаюсь использовать словарь достижений, он устанавливается равным нулю, что не имеет смысла.

У меня активна информация iTunes Connect для Game Center, и я вошел в систему с учетной записью песочницы. Есть ли что-то еще, что я делаю неправильно?

Любая помощь приветствуется. Спасибо!


person Cameron Frank    schedule 10.04.2015    source источник


Ответы (1)


  1. Убедитесь, что на сайте developer.apple.com в разделе «Идентификаторы» проверьте свое приложение, подтвердите, что «Game Center включен».
  2. В Xcode убедитесь, что в вашей цели в разделе «Возможности» включен Game Center Switch.
  3. Убедитесь, что вы включили GameKit.framework (этапы сборки, связать двоичный файл с библиотекой).
  4. В iTunes Connect для вашего приложения убедитесь, что номера версий совпадают в вашем приложении и в iTunes connect.
  5. В iTunes Connect в вашей версии приложения (предварительная подача) убедитесь, что кнопка Game Center включена для этой версии, и вы добавили списки лидеров/достижения на экран версии приложения (нажмите +).
  6. Убедитесь, что ваше устройство iOS действительно выполнило вход в Game Center (выйдите из системы и войдите снова, чтобы быть уверенным).
person Danoli3    schedule 18.11.2015