SDK 3.1:如何判断SDK是否使用iOS6帐户?

Mic*_*iel 8 facebook-ios-sdk ios6

如果我在iOS6中设置了Facebook帐户,但用户已将其关闭,则SDK只会给我一个FBSessionStateClosedLoginFailed状态.从那时起,我无法判断用户是否已在iOS中关闭我们(案例1)或者没有在iOS中设置帐户并拒绝FB应用程序或Web应用程序(案例2)的许可.

我需要提供的错误消息在两种情况下完全不同.在第一种情况下,我们需要告诉用户如何重新开启我们,但这些说明会让案例2中的某些人感到困惑.

我尝试使用iOS帐​​户框架,但如果我关闭了,我被告知即使有,也没有Facebook帐户.如果我成功进行身份验证,我还尝试写下帐户标识符,但如果我们关闭,accountWithIdentifier也会失败.

有人知道如何判断我们的拒绝是来自iOS还是FB本身?

Jas*_*ark 6

SDK的策略通常是,如果某些操作正在失败,则来自操作系统的基础错误信息会冒泡到应用程序.(当然不是所有的失败案例开始与OS API失败.)这样做的原因是政策支持更精确的错误处理和日志记录的情况一样,你所描述的一个.顺便说一句,如果你在SDK中找到一个不遵循这种模式的地方,那就是一个错误,请报告.

在这种情况下,FBSession将NSError对象传递给您的处理程序,并将userInfo中的FBErrorInnerErrorKey值设置为OS返回的错误对象.为了向您的用户提供精确的错误消息,您可以在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");
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

*更新* 刚在设备上试过这个,发现了两个漏洞; 一个在iOS 6.0中,另一个在SDK中.iOS 6.0的错误是,当交换机关闭时,操作系统不会传递NSError对象,因此没有内部错误.因此,使上述的一般解决方案不适用于所讨论的特定情况.第二个错误确实为您提供了使用SDK 3.1.1解决此问题的临时解决方案.

SDK 3.1.1中的错误是我们将error.userInfo [FBErrorLoginFailedReason]设置为FBErrorLoginFailedReason的值.在内部错误为NIL的情况下,您可以检查此原因值以确定应用程序的滑块设置为关闭.当在SDK中修复此错误时,对此的代码测试将会中断,因为我们将把原因设置为与iOS 6相关的更合理的原因.这是在未来的构建中需要注意的问题.你的申请,如果你决定依赖这个价值.


Cur*_*tis -1

如果登录失败,您可以尝试打开旧的 webview facebook 登录对话框,iOS 无法拒绝。如果成功,那么他们就没有 iOS 6,或者他们在 iOS 6 中关闭了你,我不知道这是可能的。