我创建一个ACAccountStore,访问用户的Facebook帐户,将帐户存储在ACAccount对象中,并且能够从凭证中检索令牌.但是,当我尝试使用此令牌从Facebook检索信息时,它将不会进行身份验证,并且尝试使用renewCredentialsForAccount续订凭据只会产生ACAccountCredentialRenewResultRejected的响应.
我无法通过任何简单的方式再次显示权限弹出窗口请求许可.我可以再次请求权限的唯一方法是更改我在应用程序中要求的权限,或删除并重新添加我的Facebook帐户的设置.
如何在此时获取有效的身份验证令牌?
解决方法
由于没有接受的答案,我试着回复我发现的内容.在我上面的评论之后,我阅读了有关renewCredentialsForAccount的文档,其中说“如果用户已经取消了您的应用程序,则此续订请求将返回ACAccountCredentialRenewResultRejected.”
什么是误导,不是拒绝Facebook的用户.
我想我现在理解这个概念,我试着回答那些像我这样的问题失败的人.事实上,我没有意识到,当我收到ACAccountCredentialRenewResultRejected结果时,我的FB令牌将完全重置.这就是谜题中的关键因素.
那么你需要做些什么来获得不同的结果:
> ACAccountCredentialRenewResultRenewed你很高兴去,你有一个新的令牌.使用此续订令牌转到并执行SLRequest.
> ACAccountCredentialRenewResultRejected:你的令牌被重置,如果你试图获得一个它将是一个零.您必须从头开始请求用户的权限并“安装”Facebook的应用程序.这意味着您首先要求通常的“电子邮件其他读取权限”和(如果您需要)在单独的请求中请求写入权限. (如果我想上传照片,有人可以解释为什么Facebook要我打扰用户两次)
> ACAccountCredentialRenewResultFailed:我无法重现这一点.我相信你在这里向用户发送错误信息.
这就是我提出的.这是一个非常讨厌的API,文档很差,缺少样本.互联网上的例子也是关于“成功”的例子,他们并不关心用户可以在应用程序之外撤销权限这一事实.我一直在尝试和失败的开发模式.松散的白发,但走到了尽头.我希望我的回答可以帮助别人.