我认为这可能会影响到很多 Facebook/Android 开发人员,但似乎并没有太多关于这个话题的讨论......
我的问题
有没有人使用 extendAccessTokenIfNeeded 函数成功刷新了令牌?如果您确实成功了,那么设备(或模拟器)运行的是什么版本?
背景
我收到一封来自 Facebook 的电子邮件,说从 2012 年 5 月 1 日起将弃用 offline_access 权限,并且 Facebook 建议升级到他们最新的 SDK。美好的。
我升级到最新的 SDK,官方的 Facebook 应用程序安装在我的设备上,并且(最终!)单点登录似乎工作正常。我收到了 60 天的代币,这又没问题。
当我尝试使用 extendAccessTokenIfNeeded(Context context, ServiceListener serviceListener) 时出现问题。我无法让它在更长的到期时间内刷新我的令牌。我在两次尝试之间等待了 24 小时,但令牌不会刷新。我可以获得刷新令牌的唯一方法是注销并登录。这也发生在我使用示例项目“Hackbook”时。
最明显的答案是我做错了什么,但是,向 Facebook 提交了一份错误报告说......“应该ExtendAccessToken 实际上几乎总是返回错误。” 该报告已被列为优先“愿望清单”。
extendAccessTokenAsNeeded() 的替代方案
在Facebook 文档中,关于 offline_access 弃用令牌可以使用 Graph API 进行扩展。但是,这样做的缺点是需要在 URL 中包含“App Secret”。一个优点是用户不需要在他们的设备上安装官方的 Facebook 应用程序。
其他想法和顾虑
通过将 Facebook.java 中的 extendAccessTokenIfNeeded 函数更改为始终返回 true,我想我让它刷新一次。(我说“认为”的原因是因为它不会重复这种行为,我怀疑我必须再等 24 小时才能再次成功)
我注意到 Hackbook 需要导入AndroidHttpClient。这仅适用于 API 8 及更高版本。这是否意味着 Facebook SSO(特别是令牌刷新)只能在 API 8 及更高版本的设备上运行?
SDK 中包含的Facebook.apk相当陈旧。也许这就是为什么令牌在运行 API 8 及更高版本的模拟器上不刷新的原因?
最后,所有这些都只与那些安装了官方 Facebook 应用程序的人有关!对于那些没有官方 Facebook 应用程序的人,需要完成另一种方法(现在只是抱怨!)
相关 Facebook 链接
GitHub 上的 Facebook-Android-SDK
相关堆栈溢出问题
Facebook 60 天访问令牌和已弃用的 Offline_Access