在我的游戏中,我不希望应用程序启动时自动出现游戏登录弹出。因此,相反,我有一个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 {
}
}
}
我需要一些可以欢迎用户登录的东西,但不要要求他们登录是否尚未登录。
要了解您看到的行为,我们需要查看身份验证过程的工作原理。
当您设置身份验证处理程序时,它开始。这是告诉您的应用程序尝试与游戏中心交谈的信号。身份验证处理程序的完成块具有三个可能的条件:
- 错误:出了问题
- 接收一个视图控制器:登录视图控制器告诉您播放器未登录
- 接收零视图控制器:缺乏错误 缺少视图控制器告诉您播放器已经登录。
尽管iOS可能知道您的登录状态(或试图使用缓存信息伪造登录状态),但您的应用在退出时会失去该上下文。当您再次启动时,没有尝试设置身份验证处理程序,因此直到您的用户按下按钮之前,才尝试验证身份验证状态,因此您的应用不知道用户是否已登录。
我认为以下方法将非常接近您想要的内容:
- 设置身份验证处理程序并在第一个ViewController的
viewDidLoad
中尽早启动身份验证。在您的启动序列中尽早执行此操作。 - 如果用户未经认证,您将收到登录视图控制器。不要提出它。而是保存。除非/直到用户按按钮为止。
- 如果用户已经登录,他们将在游戏启动后立即看到"欢迎返回消息",并且您将可以继续进行。 。