无法通过openActiveSessionWithReadPermissions与Facebook测试用户完成请求(错误代码7)

Ter*_*ona 6 authentication facebook ios facebook-ios-sdk ios6

背景

  • 最近升级到Facebook SDK 3.2
  • 在设备和模拟器上测试(iOS 5.16.1)
  • 只有在尝试验证Facebook 测试用户时才会出现错误.

错误

Facebook服务器无法满足此访问请求:暂时无法代表XXXXXX进行API调用.

UserInfo = {com.facebook.sdk:ErrorLoginFailedReason = com.facebook.sdk:SystemLoginCancelled,com.facebook.sdk:ErrorInnerErrorKey = Error Domain = com.apple.accounts Code = 7}

重现步骤

  1. 清除模拟器或手动从设备设置中删除Facebook帐户.
  2. 通过Facebook的帐户/测试用户端点创建测试用户.
  3. 在设备设置中添加Facebook帐户.
  4. 通过openActiveSessionWithReadPermissions进行身份验证并接受权限对话框.

预期结果

  • FBSessionStateHandler块返回state == FBSessionStateOpen.
  • 没有NSError.

实际结果

  • FBSessionStateHandler块返回带有上述用户信息跟踪的error.fberrorCategory == FBErrorCategoryUserCancelled.

解决方案尝试

  • 我遵循了这个问题中概述的步骤; 即检查我的包名称,确保我的应用类型设置为Native/Desktop并将Client中的App Secret设置为NO.
  • 同样,我确保我只要求读取权限(即电子邮件).
  • 通过尝试使用ACAccountStore实例进行身份验证并获得相同的结果,我甚至完全绕过了Facebook SDK .
  • 同样,一切用户都可以正常工作(非测试); 所以它必须与配置和最近的3.2更改有关.

cod*_*cat 0

1) Facebook 3.1 SDK 拆分了读取和发布权限。在第一次身份验证调用中仅使用读取权限(例如电子邮件)。使用两者都会破坏它并导致一般错误。Facebook 的 SDK 似乎并没有真正做到它应该做的事情:退回到旧的身份验证方法。David 告诉我,更新的 Parse SDK 将使权限分割变得更容易,但当然要由 Facebook 来修复其 SDK 中的错误。

2) 独立地,在设备设置中退出 Facebook,然后重新登录后,我遇到的问题似乎就消失了。也许是 iOS 集成中出现了故障?(不过,权限分割问题在这里仍然适用。请确保您在第一次实际需要时先阅读并稍后单独发布(例如,publish_actions)。)