У меня здесь проблема, и я надеюсь, что кто-то поможет мне разобраться в том, что не так.Настоящая идентификация GameCenterVC снова
* Тестовый проект, представленный ниже, можно найти здесь: http://goo.gl/wz84aA (FR) или https://goo.gl/0m8LrZ (Mega.NZ) *
Я пытаюсь представить пользователь контроллер представления аутентификации, предложенный яблоком для GameCenter особенность. Точнее, повторите его, если он отменит его в первый раз.
У меня есть игра с раскадровки, как что:
GameNavigationController:
class GameNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("showAuthenticationViewController"), name: PresentAuthenticationViewController, object: nil)
GameKitHelper.sharedInstance.authenticateLocalPlayer()
}
func showAuthenticationViewController() {
let gameKitHelper = GameKitHelper.sharedInstance
if let authenticationViewController = gameKitHelper.authenticationViewController {
self.topViewController.presentViewController(authenticationViewController, animated: true, completion: nil)
}
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
MenuViewController:
class MenuViewController: UIViewController {
@IBAction func didTapLeaderboardBTN() {
// TRY 2
//if (!GameKitHelper.sharedInstance.gameCenterEnabled) {
GameKitHelper.sharedInstance.authenticateLocalPlayer()
//} else {
GameKitHelper.sharedInstance.showGKGameCenterViewController(self)
//}
}
}
GameKitHelper:
import GameKit
import Foundation
let PresentAuthenticationViewController = "PresentAuthenticationViewController"
let singleton = GameKitHelper()
class GameKitHelper: NSObject, GKGameCenterControllerDelegate {
var authenticationViewController: UIViewController?
var lastError: NSError?
var gameCenterEnabled: Bool
class var sharedInstance: GameKitHelper {
return singleton
}
override init() {
gameCenterEnabled = true
super.init()
}
func authenticateLocalPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = { (viewController, error) in
self.lastError = error
if viewController != nil {
self.authenticationViewController = viewController
NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController, object: self)
} else if localPlayer.authenticated {
self.gameCenterEnabled = true
} else {
self.gameCenterEnabled = false
}
}
}
func showGKGameCenterViewController(viewController: UIViewController!) {
if (!self.gameCenterEnabled) {
println("Local player is not authenticated")
// TRY 1
//self.authenticateLocalPlayer()
return
}
let gameCenterViewController = GKGameCenterViewController()
gameCenterViewController.gameCenterDelegate = self
gameCenterViewController.viewState = .Leaderboards
viewController.presentViewController(gameCenterViewController, animated: true, completion: nil)
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
}
Что в настоящее время работает:
- если пользователь ранее авторизованы (в приложении GameCenter), то он сможет открыть Полноразмерный вид;
- Если пользователь не был зарегистрирован, тогда ему будет предложено войти в систему, когда загрузится контроллер навигации игры (а затем откройте таблицу лидеров).
Что НЕ в настоящее время работает:
- если он отменить три раза аутентификации, то аутентификация не будет отображаться больше (даже при запуске); // По-видимому, известная «проблема», а не «фиксируемая»
- Если пользователь отменил свое аутентификацию, когда он попытается загрузить таблицу лидеров, аутентификация не появится снова.
Я пробовал 2-3 вещи, как вы можете видеть в приведенном выше коде, но ни один из них не работает; Я не могу снова открыть представление аутентификации.
PS: Мой код написан в Swift, но также приветствуется помощь в Objective-C.