【问题标题】:Is it possible to extend Facebook tokens with extendAccessTokenIfNeeded in an Android app?是否可以在 Android 应用程序中使用 extendAccessTokenIfNeeded 扩展 Facebook 令牌?
【发布时间】:2012-04-09 12:48:03
【问题描述】:

我认为这可能会影响到很多 Facebook/Android 开发人员,但似乎并没有太多关于这个话题的讨论......

我的问题

有人使用 extendAccessTokenIfNeeded 函数成功刷新了令牌吗?如果您确实成功了,那么设备(或模拟器)运行的是什么版本?

背景

我收到一封来自 Facebook 的电子邮件,说从 2012 年 5 月 1 日起将弃用 offline_access 权限,并且 Facebook 建议升级到他们最新的 SDK。很好。

我升级到最新的 SDK,官方 Facebook 应用程序安装在我的设备上,并且(最终!)单点登录似乎工作正常。我收到了 60 天的代币,这还是可以的。

当我尝试使用 extendAccessTokenIfNeeded(Context context, ServiceListener serviceListener) 时出现问题。我无法让它在更长的到期时间内刷新我的令牌。我在两次尝试之间等待了 24 小时,但令牌不会刷新。我可以获得刷新令牌的唯一方法是注销并登录。当我使用示例项目“Hackbook”时也发生了这种情况。

最明显的答案是我做错了什么,但是,bug report 被提交给 Facebook 说...“shouldExtendAccessToken 实际上几乎总是返回 false。”此报告已获得优先“愿望清单”。

extendAccessTokenAsNeeded() 的替代方法

Facebook documentation about offline_access deprecation 中的标记可以使用 Graph API 进行扩展。但是,这会将disadvantage of needing the "App Secret" 包含在 URL 中。一个优点是用户不需要在他们的设备上安装官方 Facebook 应用程序。

其他想法和顾虑

  • 通过将 Facebook.java 中的 extendAccessTokenIfNeeded 函数更改为始终返回 true,我想我让它刷新了一次。 (我说“思考”的原因是因为它不会重复这种行为,我怀疑我必须再等 24 小时才能再次成功)

  • 我注意到 Hackbook 要求 AndroidHttpClient 是 进口的。这仅适用于 API 8 及更高版本。这是否意味着 Facebook SSO(特别是令牌刷新)可能只适用于 API 8 及更高版本的设备?

  • Facebook.apk included in the SDK 已经很老了。也许这就是为什么令牌在运行 API 8 及更高版本的模拟器上不刷新的原因?

  • 最后,所有这一切只与那些拥有 已安装官方 Facebook 应用程序!对于那些没有官方 Facebook 应用程序的人,需要完成另一种方法(现在只是抱怨!)

相关 Facebook 链接

Facebook-Android-SDK at GitHub

Facebook Android Tutorial

Facebook offline_access permission deprecation

Facebook bug report

相关堆栈溢出问题

Facebook 60 day access token and Deprecated Offline_Access

Facebook access token can not be extended

How would offline_access work after deprecation after May 1st?

Facebook access token can not be extended

Protecting app secret for extendAccessToken usage (Java/Android)

【问题讨论】:

  • "通过将 Facebook.java 中的 extendAccessTokenIfNeeded 函数更改为始终返回 true,我想我让它刷新了一次。(我说“认为”的原因是因为它不会重复该行为并且我怀疑我必须再等 24 小时才能再次成功)”你重新测试了吗?

标签: android facebook facebook-android-sdk facebook-access-token


【解决方案1】:

我不了解 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 进行 CURL)

【讨论】:

  • 感谢您的回复。我会调查的。
  • 我认为这行不通,而且我认为这不是一个好主意。我认为这不是一个好主意,因为这意味着将您的 client_secret 嵌入到您的 Android 应用程序中,这意味着它是公开的,这很糟糕。我认为这不会奏效,因为此端点似乎无法将访问令牌延长到其最初的 60 天到期之后。 (不过,最好将 2 小时的客户端身份验证令牌延长为 60 天的令牌。)
  • 调用应该从远程 web 服务器发出,其中 client_secret 是真正机密的。因此,您可以使用 CURL 从 android AJAX 到远程 Web 服务器。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2013-12-11
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多