即使出现身份验证错误,a
是否有效?
GKLocalPlayer.localPlayer.authenticateHandler =
^(UIViewController *viewController, NSError *error)
{
if (error)
{
bool a = GKLocalPlayer.localPlayer.authenticated;
}
else
{
例如,当我有一个经过身份验证的播放器,将应用移动到后台,禁用WiFi,然后再将应用移动到前台时,会发生这种情况。我希望GameCenter继续使用缓存帐户吗?
“只要您的游戏移动到后台,本地玩家对象的经过身份验证的属性的值就会变为并保持无效,直到您的游戏移回到前台。您无法读取该值以确定该玩家是否是仍然经过身份验证,直到Game Kit重新验证播放器并调用您的身份验证处理程序。在调用完成处理程序之前,您的游戏必须表现为没有经过身份验证的播放器。一旦调用了处理程序,存储在经过身份验证的属性中的值将再次生效。
即使身份验证失败,该值是否有效?
答案 0 :(得分:1)
我对Apple有一个长期运行的Bug。在正在进行的对话期间,它已被关闭并重新打开。 .authenticated
是否有效的问题似乎取决于您的观点
Apple将此视为按预期工作,因为您已缓存信息,Apple认为可让您继续玩游戏,可以显示排行榜等.Apple称.authenticated
在此状态下确实有效。我已经看到这个论坛上的一些开发人员同意这个观点,虽然我没有方便他们帖子的链接。
但实际上,如果您在此状态下尝试进行任何后续游戏中心操作,则会因为您未进行真正的身份验证而失败。您无法保存游戏,加载匹配等。您显示的任何排行榜都将是陈旧的缓存数据。
在我看来,苹果公司厌恶让玩家看到基础设施造成的问题。因此,通过这种机制,你试图通过伪造状态向前推进,希望问题能够在以后发挥作用。在我的游戏中,在用户投入时间/精力进入游戏后,该策略永远不会消失并最终达到无法恢复的状态。所以,就像上面的代码一样,我依赖于NSError所说的内容。如果是"错误"然后我将播放器看作未经验证的,提供UI提示来纠正这种情况。
我已在此处详细记录了我的方法:https://stackoverflow.com/a/37216566/1641444