如果我在 iOS6 中设置了 Facebook 帐户,但用户已将其关闭,则 SDK 只会向我提供 FBSessionStateClosedLoginFailed 状态。由此,我无法判断用户是否在 iOS 中关闭了我们的服务(情况 1),或者没有在 iOS 中设置帐户并拒绝了 FB 应用程序或 Web 应用程序的许可(情况 2)。
在这两种情况下,我需要呈现的错误消息有很大不同。在第一种情况下,我们需要告诉用户如何重新打开我们的电源,但在情况 2 中,这些说明会让某些人感到困惑。
我尝试使用 iOS 帐户框架,但如果我关闭,我会被告知没有 Facebook 帐户,即使有。如果我成功进行了身份验证,我还尝试写下帐户标识符,但是如果我们关闭,accountWithIdentifier 也会失败。
有人知道有什么方法可以查明我们的拒绝是来自 iOS 还是 FB 本身吗?
SDK 的一般策略是,如果某些操作失败,来自操作系统的底层错误信息将向上冒泡到应用程序。 (当然,并非所有故障案例都以操作系统 API 失败开始。)此策略的原因是支持更精确的错误处理和日志记录方案,如您所描述的那样。顺便说一句,如果您发现 SDK 中的某个地方不遵循此模式,则这是一个错误,请报告它。
在这种情况下,FBSession 将 NSError 对象传递给您的处理程序,并将 userInfo 中的 FBErrorInnerErrorKey 值设置为操作系统返回的错误对象。为了向用户提供精确的错误消息,您可以在 FBSessionStateClosedLoginFailed 案例中使用如下代码片段:
if (error) {
NSError *innerError = error.userInfo[FBErrorInnerErrorKey];
if ([innerError.domain isEqualToString:ACErrorDomain] &&
innerError.code == ACErrorPermissionDenied) {
NSLog(@"User dissallowed permissions via iOS 6.0 integration");
}
}
希望这可以帮助!
* 更新 *刚刚在设备上尝试了一下,发现了两个错误;一个在 iOS 6.0 中,另一个在 SDK 中。 iOS 6.0 的 bug 是,当开关关闭时,操作系统不会传递任何 NSError 对象,因此不存在内部错误。因此,上面的一般解决方案不适用于所讨论的具体情况。第二个错误确实为您提供了暂时的使用 SDK 3.1.1 解决此问题。
SDK 3.1.1 中的错误是我们将 error.userInfo[FBErrorLoginFailedReason] 设置为 FBErrorLoginFailedReason 的值。如果内部错误为 NIL,您可以检查此原因值以确定应用程序的滑块已设置为关闭。然而,当 SDK 中修复了此错误后,针对此问题的代码测试将会中断,因为我们会将原因设置为与 iOS 6 相关的更符合逻辑的原因。这是在未来版本中需要注意的问题。您的应用程序(如果您决定依赖此值)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)