我的游戏使用游戏中心进行记分牌。在应用程序开始时,我要求Game Center登录。
问题是,在游戏中心弹出“欢迎回来......”之后会有不同的时间,这会在我的应用中产生巨大的延迟峰值,这已经是资源已经很少了。
我已经玩过完成处理程序,试图在横幅完成时找出某种回调......但没有!
我该怎么办呢?我有一个加载屏幕,我可能不会完成加载,直到事情弹出?
这是我现在使用的代码
func authenticateLocalPlayer()
{
Holder.loggedIn = false
print("Start Authenticate")
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil)
{
self.presentViewController(viewController!, animated: false, completion: {self.authenticated()})
}
}
}
答案 0 :(得分:3)
我看过同样的事情,甚至看到在同一网络上彼此相邻的不同设备上的登录时间存在差异。我认为我的策略最初来自Apple的文档或WWDC视频,但我没有参考资料,是在启动时立即启动身份验证,就像在我的第一个视图控制器中一样viewDidAppear
:
通过这种方式,我将延迟疼痛移动到应用启动,这可能会被正常的应用启动延迟,启动动画和其他内容所掩盖。当我实际启动游戏会话时,我确保登录开销(或失败)已经完成。
顺便说一句,与您的问题没有直接关系,但我注意到在您的身份验证处理程序中,如果它存在,则显示视图控制器,并假设如果视图控制器为零,则对用户进行身份验证。请注意,发生错误时,会设置错误值,但视图控制器为零。因此,一个零VC可能意味着用户已通过身份验证,但它也可能意味着身份验证失败。请务必先检查error
的值。
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (error)
{
//check and process the error.
//bail out because we are NOT authenticated
return;
}
if (viewController != nil)
{
self.presentViewController(viewController!, animated: false, completion: {self.authenticated()})
}
}