GameCenter-登录用户如果他们已经输入了凭据



在我的游戏中,我不希望应用程序启动时自动出现游戏登录弹出。因此,相反,我有一个gameCenter按钮,用户可以点击登录。当他们按下按钮时,出现登录屏幕。

但是,登录后再次启动应用程序时,用户仍然没有"登录"。他们仍然必须再次按下按钮,然后出现了一个小横幅,说"欢迎回来,用户!"。有没有一种方法可以自动重新加入用户,而无需每次按下按钮?我已经输入了凭据,为什么我必须再次验证?

这是我的代码,当用户按下按钮时:

self.authenticatePlayer()

这是身份验证的方法:

    func authenticatePlayer() {
        let localPlayer = GKLocalPlayer.localPlayer()
        localPlayer.authenticateHandler = {
            (view, error) in
            if view != nil {
                self.view?.window?.rootViewController?.presentViewController(view!, animated: true, completion: nil)
            } else {
            }
        }
    }

我需要一些可以欢迎用户登录的东西,但不要要求他们登录是否尚未登录。

要了解您看到的行为,我们需要查看身份验证过程的工作原理。

当您设置身份验证处理程序时,它开始。这是告诉您的应用程序尝试与游戏中心交谈的信号。身份验证处理程序的完成块具有三个可能的条件:

  1. 错误:出了问题
  2. 接收一个视图控制器:登录视图控制器告诉您播放器未登录
  3. 接收零视图控制器:缺乏错误 缺少视图控制器告诉您播放器已经登录。

尽管iOS可能知道您的登录状态(或试图使用缓存信息伪造登录状态),但您的应用在退出时会失去该上下文。当您再次启动时,没有尝试设置身份验证处理程序,因此直到您的用户按下按钮之前,才尝试验证身份验证状态,因此您的应用不知道用户是否已登录。

我认为以下方法将非常接近您想要的内容:

  • 设置身份验证处理程序并在第一个ViewController的viewDidLoad中尽早启动身份验证。在您的启动序列中尽早执行此操作。
  • 如果用户未经认证,您将收到登录视图控制器。不要提出它。而是保存。除非/直到用户按按钮为止。
  • 如果用户已经登录,他们将在游戏启动后立即看到"欢迎返回消息",并且您将可以继续进行。

最新更新