是否可以在Android应用中使用extendAccessTokenIfNeeded扩展Facebook令牌?

时间:2012-04-09 12:48:04

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

我认为这可能会影响很多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实际上几乎总是会返回错误。”该报告已被优先考虑“愿望清单”。

extendAccessTokenAsNeeded()

的替代方案

可以使用Graph API扩展Facebook documentation about offline_access deprecation令牌。但是,这包含在网址中的disadvantage of needing the "App Secret"。一个优点是用户不需要在他们的设备上安装官方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

相关的Stack Overflow问题

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)

2 个答案:

答案 0 :(得分: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进行CURL)

答案 1 :(得分:1)

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