2015-06-02 2 views
1

Мы представляем экран входа в GameCenter при запуске игры. В конце игры мы показываем кнопку GameCenter, которая позволяет пользователям просматривать свои достижения и списки лидеров игры. Если они отклонили исходный экран и не вошли в систему, как мы можем снова отобразить экран входа? Вот код, который мы используем, но он не работает.Показать имя GameCenter позже, если пользователь уйдет с экрана входа в систему в начале игры?

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Configure view 
    let skView = view as! SKView 
    skView.multipleTouchEnabled = false 
    //skView.showsNodeCount = true 
    //skView.showsFPS = true 

    // Show intro scene 
    let introScene = IntroScene(size: skView.bounds.size, controller: self) 
    introScene.scaleMode = .AspectFill 
    skView.presentScene(introScene) 

    // Authenticate GameCenter player 
    authenticateGameCenterPlayer() 

} 


private func authenticateGameCenterPlayer() { 
    var localPlayer = GKLocalPlayer.localPlayer() 
    localPlayer.authenticateHandler = {(viewController : UIViewController!, error : NSError!) -> Void in 
     if ((viewController) != nil) { 
      self.presentViewController(viewController, animated: true, completion: nil) 
     } else { 
      println((GKLocalPlayer.localPlayer().authenticated)) 
     } 
    } 
} 


func showLeaderboard() { 
    // User logged into GameCenter? 
    if (!GKLocalPlayer.localPlayer().authenticated) { 
     println("Local player not authenticated") 
     authenticateGameCenterPlayer() 
     return 
    } 

    // If here, user is authenticated so present leaderboards 
    var gcViewController = GKGameCenterViewController() 
    gcViewController.gameCenterDelegate = self 
    gcViewController.viewState = GKGameCenterViewControllerState.Leaderboards 
    gcViewController.leaderboardIdentifier = "highScoresLeaderboard" 
    self.showViewController(gcViewController, sender: self) 
    self.navigationController?.pushViewController(gcViewController, animated: true) 
} 
+0

Я не верю, что это возможно, так как GameKit обрабатывает это. Проверьте этот ответ: http://stackoverflow.com/a/21132075/2108547 –

ответ

0

Game Center помнит входа пользователя в настройках, и если пользователь закрывает логарифмически в диалоговые слишком много раз, он перестанет отображается, даже если вы звоните localPlayer.authenticateHandler

Рекомендуемый способ обработки это показать сообщение, сообщающее пользователю войти в приложение для игрового центра

0

Почти год опоздал, но я столкнулся с подобной проблемой и реализовал тип работы.

Проверьте, не аутентифицирован ли пользователь, и если они не направлены на использование игрового центра. Это вызовет экран входа в систему.

UIApplication.sharedApplication().openURL(NSURL(string: "gamecenter:")!) 

Если пользователь не хочет регистрироваться, они будут перенаправлены обратно в ваше приложение. Если пользователь войдет в систему, у них появится возможность вернуться обратно в приложение через кнопку «Назад к приложению» вверху.

0

Я понимаю, что документация Apple упоминает об этом в Руководстве по программированию Game Center под номером Common Tasks When Working with Players > Authenticating a Local Player on the Device.

Важно: Game Kit обрабатывает игровой центр во всех играх , которые поддерживают Game Center. Если игрок уже отказался создать учетную запись, когда ваша игра аутентифицирует игрока, сообщается, что не является аутентифицированным игроком. Игрок никогда не видит диалоговое окно проверки подлинности . Поскольку Game Kit обрабатывает этот процесс во всех играх, ваша игра не должна включать собственный механизм для отключения аутентификации Game Center или попросить разрешения игрока на аутентификацию. Вместо ваша игра должна просто аутентифицировать игроку каждый раз, когда он запускает и реагировать соответствующим образом, когда аутентификация завершается

.

Смежные вопросы