我认为这可能会影响很多 Facebook/Android 开发人员,但似乎没有太多关于该主题的讨论...
我的问题
有没有人使用 extendAccessTokenIfNeeded 函数成功刷新 token ?如果您确实成功了,设备(或模拟器)运行的是什么版本?
背景
我收到一封来自 Facebook 的电子邮件,说 offline_access 权限将从 2012 年 5 月 1 日起弃用,并且 Facebook 建议升级到他们最新的 SDK。很好。
我升级到最新的 SDK,我的设备上安装了官方 Facebook 应用程序并且(最终!)单点登录似乎工作正常。我收到了 60 天的 token ,这也没有问题。
当我尝试使用 extendAccessTokenIfNeeded(Context context, ServiceListener serviceListener) 时出现问题。我无法让它刷新我的 token 以延长到期时间。我在两次尝试之间等了 24 小时,但 token 不会刷新。我可以获得刷新 token 的唯一方法是注销并登录。当我使用示例项目“Hackbook”时也会发生这种情况。
最明显的答案是我做错了什么,但是,bug report被提交给 Facebook 说......“shouldExtendAccessToken 实际上几乎总是返回 false。”该报告已被赋予优先级“愿望 list ”。
extendAccessTokenAsNeeded() 的替代方法
在Facebook documentation about offline_access deprecation可以使用 Graph API 扩展 token 。然而,这有 disadvantage of needing the "App Secret"被包含在 URL 中。一个优点是用户不需要在他们的设备上安装官方 Facebook 应用程序。
其他想法和顾虑
通过将 Facebook.java 中的 extendAccessTokenIfNeeded 函数更改为始终返回 true,我想我让它刷新了一次。 (我说“思考”的原因是因为它不会重复这种行为,我怀疑我必须再等 24 小时才能有再次成功的机会)
我注意到 Hackbook 需要 AndroidHttpClient成为 进口。这仅适用于 API 8 及更高版本。意思是不是 Facebook SSO(特别是 token 刷新)只可能在具有 API 8 及更高版本的设备上工作?
Facebook.apk included in the SDK很旧了。也许这就是 token 在运行 API 8 及更高版本的模拟器上不刷新的原因?
最后,所有这些只与那些拥有 已安装官方 Facebook 应用程序!对于那些没有官方 Facebook 应用程序的人,需要完成另一种方法(现在只是提示!)
相关 Facebook 链接
Facebook-Android-SDK at GitHub
Facebook offline_access permission deprecation
相关堆栈溢出问题
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)
最佳答案
我不知道 Android 开发,但如果你在使用该功能时遇到问题,也许 Android 中有一个类似的 CURL 功能可以让你调用
https://graph.facebook.com/oauth/access_token?<br/>
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)
关于android - 是否可以在 Android 应用程序中使用 extendAccessTokenIfNeeded 扩展 Facebook token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10073426/