我创建了一个 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/