我认为这可能会影响很多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 offline_access permission deprecation
相关的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)
答案 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分钟后重新启动应用程序时,我能够看到访问令牌实际上已被扩展。