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

Zac*_*lms 7 facebook ios ios6 acaccount acaccountstore

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

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

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

Ted*_*ddy 3

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

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

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

那么为了得到不同的结果你需要做什么:

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

这就是我想出来的。这是一个非常糟糕的 API,文档质量很差,并且缺少示例。此外,互联网上的示例都是关于“成功”的,他们并不关心用户可以撤销应用程序外部的权限这一事实。我处于不断尝试和失败的开发模式中。头发花白,但也快到尽头了。我希望我的回答可以帮助其他人。