GameCenter - 登录用户(如果他们已经输入了凭据)
问题描述:
在我的游戏中,我不希望GameCenter登录弹出窗口在应用启动时自动出现。相反,我有一个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 {
}
}
}
我需要的东西,如果他们已经登录,可以迎回用户,但是如果他们还没有登录,不要求他们登录。
答
要了解您所看到的行为,我们需要了解身份验证过程如何工作。
它在您设置身份验证处理程序时开始。这是告诉您的应用尝试与Game Center对话的信号。认证处理程序的完成模块有三种可能的情况:
- 错误:出事了
- 接收一个视图控制器:登录视图控制器告诉各位玩家是不是在
- 接收零视图控制器记录:缺少错误+缺少视图控制器会告诉您玩家已经登录。
尽管IOS可能知道您的登录状态(或尝试使用缓存信息来伪造您的登录状态),但您的应用当你退出时会丢失上下文。当您再次启动时,没有尝试设置身份验证处理程序,因此在用户按下按钮之前不会尝试验证身份验证状态,因此您的应用程序不知道用户是否已登录。
我认为下面的方法将变得相当接近你在找什么:
- 设置认证处理程序,并尽可能早地在你第一次的viewController的
viewDidLoad
启动认证。尽早按照您的启动顺序进行操作。 - 如果用户未通过身份验证,您将收到一个登录视图控制器。不要呈现它。相反,保存它。除非用户按下按钮,否则不要呈现它。
- 如果用户已经登录时,他们将看到尽快迎回消息随着比赛的开始,你就可以继续进行,因为用户是仍然登录。
你可以尝试保存在按钮点击时在userDefault中输入名称,然后检查您的userDefault键是否在尝试重新登录后保存了任何用户名。 –
@TusharSharma我对你的意思很抱歉有点困惑。今天刚开始使用GameCenter。我很熟悉保存数据,虽然 – Brejuro
我mwan说当你的用户登录时,你可以保存它的状态。如果它再次登录,则再次检查它,然后相应地创建您的条件。 –