13

我认为这可能会影响到很多 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 安卓教程

Facebook offline_access 权限弃用

脸书错误报告

相关堆栈溢出问题

Facebook 60 天访问令牌和已弃用的 Offline_Access

Facebook 访问令牌无法扩展

在 5 月 1 日后弃用后,offline_access 将如何工作?

Facebook 访问令牌无法扩展

保护用于 extendAccessToken 使用的应用程序机密 (Java/Android)

4

2 回答 2

3

我不了解 Android 开发,但如果您对该功能有疑问,也许 Android 中有一个类似的 CURL 功能可以让您调用 https://graph.facebook.com/oauth/access_token?
client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN

(谷歌透露:http ://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html关于如何从 Android 卷曲)

于 2012-04-09T22:52:22.060 回答
1

尝试更改 的时间REFRESH_TOKEN_BARRIER,这样您就不必每次要测试时都等待 24 小时。我将我的更改为大约 2 分钟,当我在 2 分钟后重新启动应用程序时,我能够看到访问令牌实际上正在扩展。

于 2012-06-12T17:24:08.610 回答