GameKit 错误表示玩家未通过身份验证,但 .authenticated 属性 = true

Posted

技术标签:

【中文标题】GameKit 错误表示玩家未通过身份验证,但 .authenticated 属性 = true【英文标题】:GameKit Error says player not authenticated but .authenticated property = true 【发布时间】:2015-10-10 22:42:46 【问题描述】:

我有一个在 ios 中使用 GameKit 的回合制游戏。通常,我的 Game Center 身份验证有效。我的游戏有效,我可以在一段时间内来回发送动作。然而,当我尝试在 Game Center 上执行一个动作(例如,寻找新的比赛)时,它相对频繁但不是经常发生,它失败并出现错误:

Error Domain=GKErrorDomain Code=6 "请求的操作无法完成,因为本地播放器尚未通过身份验证。" UserInfo=NSLocalizedDescription=请求的操作无法完成,因为本地播放器尚未通过身份验证。

然而,GKLocalPlayer.localPlayer().authenticated = true,无论是在收到错误之前还是之后。收到此错误后,不会显示身份验证视图控制器,并且依赖身份验证的 GameKit 方法停止运行(它们不会恢复活力)。然后,如果我将应用程序发送到后台,然后将其带回前台,则当我重试该操作时不会返回错误(无需输入新的登录名和密码)。

根据类似的观察:

GKLocalPlayer authentication not working, but isAuthenticated returns YES (Game Center sandbox)

“1.如果您的设备日期不正确,Game Center 将无法完成身份验证。因此,请继续检查当前日期。

    您可能已经这样做了。我相信你 - iOS 模拟器 >> 重置内容和设置"

我在设备上遇到了这个问题,而不是在模拟器上,排除了#2。有人可以帮我解决#1吗?我在这里可能很天真,但我的 iPhone 和 iPad 有正确的时间和日期。我应该检查和设置什么或其他地方吗?

那么,如果这不是问题,还有什么问题?我正在运行 iOS9。

【问题讨论】:

你知道如何解决这个问题吗?我在游戏中遇到了这个错误。 这对我来说似乎不再是一个大问题,但每隔一段时间我的应用程序确实无法通过身份验证。当这种情况发生时,我知道解决它的唯一方法是关闭应用程序并再次打开它。出现错误时,当应用程序仍在运行时,我没有成功重新验证。此外,当事情进展不顺利时,一般不能依赖 .authenticated = true。 我遇到了完全相同的问题。这个问题是否只发生在沙盒或实时环境中?当 70% 的情况下在沙盒中成功运行时,我可以假设我的代码正常吗?我看不出它现在和下一次在完全相同的条件下会失败的任何原因。有什么想法吗? 【参考方案1】:

我也看到了这个,并且对 Apple 有一个未解决的错误。就我而言,我正在使用多个物理设备进行测试,并且只有其中一个设备遇到过这种情况。在该特定设备上,我使用个人帐户登录 iTunes,但使用测试帐户登录游戏中心。

据我所知,当设备使用 iTunesiCloudgame Center 相同的登录名时,没有问题.但是,当我尝试混合和匹配帐户以进行我需要做的任何测试时,我随机得到错误 6。

除了让用户重新登录游戏中心外,似乎没有任何办法可以从中恢复。当然,没有办法再次显示登录视图控制器,所以唯一的选择是让用户离开游戏,将其关闭,然后重新启动(重新启动游戏中心身份验证过程)。我现在捕获错误,给用户一条消息说 Game Center 已将他们注销,并解释他们需要做些什么。

但正如我所说,当我停止在设备上混淆凭据时,问题就消失了。

顺便说一句,在一个稍微相关的话题上,我认为 .authenticated 属性完全不可靠。在您实际上没有连接到 Game Center 的情况下,这将是 TRUE。我也为此打开了一个错误。苹果关闭它说这是通过使用“缓存”数据按预期工作的。因此,它会在未通过身份验证时报告已通过身份验证,并仅允许您访问以前保存在本地的过时比赛和排行榜数据。

【讨论】:

谢谢。我目前没有混合凭据,但仍然遇到同样的问题。不过,你有一些观察。我在使用混合和匹配帐户时看到了其他问题。我不知道缓存了什么,但我的测试设备过去曾使用多个帐户进行 GC,也许以前的登录也会导致这种情况。只是一个没有根据的猜测。 GC 我爱你。

以上是关于GameKit 错误表示玩家未通过身份验证,但 .authenticated 属性 = true的主要内容,如果未能解决你的问题,请参考以下文章

如果网络不可用,Game Center / GameKit 报告分数

GameKit 自动呈现身份验证视图控制器,而不是等待我呈现它

POST 请求的身份验证错误:“未提供身份验证凭据”使用 Axios,但使用 POSTMAN 工作

Symfony2 自定义身份验证:用户登录但未通过身份验证

WCF 错误:调用者未通过服务的身份验证

身份验证质询后未调用 URLSession 委托