ios - 调用renewCredentialsForAccount时如何处理 "ACAccountCredentialRenewResultRejected"消息

标签 ios facebook ios6 acaccount acaccountstore

我创建了一个 ACAccountStore,获得了对用户 facebook 帐户的访问权限,将该帐户存储在一个 ACAccount 对象中,并且能够从凭据中检索 token 。但是,当我尝试使用此 token 从 Facebook 检索信息时,它不会进行身份验证,并且尝试使用 renewCredentialsForAccount 更新凭据只会产生 ACAccountCredentialRenewResultRejected 响应。

我也无法通过任何简单的方式让权限弹出窗口再次出现以请求权限。我可以让它再次请求权限的唯一方法是更改​​我在应用程序中请求的权限,或者在设置中删除并重新添加我的 Facebook 帐户。

此时我该如何获取有效的授权 token ?

最佳答案

由于没有可接受的答案,我尝试回复我找到的内容。在我上面的评论之后,我阅读了有关 renewCredentialsForAccount 的文档,其中说“如果用户取消了对您的应用程序的授权,则此续订请求将返回 ACAccountCredentialRenewResultRejected。”

拒绝的不是用户而是 Facebook,这是一种误导。

我想我现在理解了这个概念,我试着回复那些​​像我一样在这个问题上失败的人。事实上,我没有意识到,当我收到 ACAccountCredentialRenewResultRejected 结果时,我的 FB token 将被完全重置。这是难题中的关键要素。

那么你需要为不同的结果做些什么:

  • ACAccountCredentialRenewResultRenewed 一切顺利,您有一个新 token 。使用这个更新的 token 去执行您的 SLRequest。
  • ACAccountCredentialRenewResultRejected:您的 token 已重置,如果您尝试获取一个,它将是nil。您必须从头开始向用户请求许可并“安装”Facebook 应用程序。这意味着您首先请求通常的“电子邮件+其他读取权限”,并且(如果需要)在单独的请求中请求写入权限。 (如果我想上传一张照片,有人可以解释为什么 Facebook 要我打扰用户两次)
  • ACAccountCredentialRenewResultFailed:我无法重现这个。我相信您在这里向用户发送了一条错误消息。

这是我想出来的。这是一个非常讨厌的 API,它的文档很差并且缺少示例。此外,互联网上的示例都是关于“成功”的,他们不关心用户可以在应用程序外部撤销权限这一事实。我处于不断尝试失败的开发模式中。花白的头发正在脱落,但即将结束。我希望我的回答对其他人有帮助。

关于ios - 调用renewCredentialsForAccount时如何处理 "ACAccountCredentialRenewResultRejected"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221963/

相关文章:

ios - Swift - 如何从特定实例调用方法?

ios - 直接从 S3 将 MP4 视频流式传输到 iPhone?

ios - 重置 MPMoviePlayerViewController 播放

Facebook Like + Send(发送不显示)

ios - 在coreplot中启用x轴(水平)滚动

ios - popViewControllerAnimated 之后 UINavigationBar 下的 UITableView

ios - 自定义委托(delegate)在调用方法时变为nil

facebook - 使用 Facebook API 发布到墙上

iphone - iPhone 开发中的 ARC 错误和语义问题

facebook-graph-api - Canvas 应用未发送 signed_request POST 参数