7

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

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

此时我该如何获取有效的身份验证令牌?

4

1 回答 1

3

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

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

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

因此,您需要为不同的结果做些什么:

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

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

于 2015-03-21T09:18:36.330 回答