由于没有可接受的答案,我尝试回复我发现的内容。在我上面的评论之后,我阅读了有关renewCredentialsForAccount的文档,上面写着“如果用户取消了您的应用程序的授权,则此续订请求将返回 ACAccountCredentialRenewResultRejected。”
误导的不是用户拒绝,而是 Facebook。
我想我现在理解了这个概念,我试着回复那些像我一样在这个问题上失败的人。事实上,我没有意识到的是,当我收到ACAccountCredentialRenewResultRejected结果时,我的 FB 令牌将被完全重置。这是谜题中的关键元素。
因此,您需要为不同的结果做些什么:
- ACAccountCredentialRenewResultRenewed你很好,你有一个新的令牌。使用此更新的令牌执行您的 SLRequest。
- ACAccountCredentialRenewResultRejected:您的令牌已重置,如果您尝试获得一个,它将为零。您必须从头开始向用户请求权限并“安装”Facebook 应用程序。这意味着您首先请求通常的“电子邮件+其他读取权限”,并且(如果您需要)在单独的请求中请求写入权限。(例如,如果我想上传一张照片,有人可以解释为什么 Facebook 想让我打扰用户两次)
- ACAccountCredentialRenewResultFailed:我无法重现这个。我相信在这里你会向用户发送一条错误消息。
这就是我想出的。这是一个非常讨厌的 API,它的文档很差,并且缺少示例。此外,互联网上的例子都是关于“成功”的,他们并不关心用户可以撤销应用程序之外的权限这一事实。我处于不断尝试和失败的开发模式。失去白发,但即将结束。我希望我的回答对其他人有所帮助。