他们在AccessToken docu中说:“使用Facebook的SDK的原生移动应用程序将获得长期访问令牌,大约可以使用60天。这些令牌每天会在使用你的人时刷新一次app向Facebook的服务器发出请求。“
这是否意味着只有当Facebook服务器的请求来自客户端Android应用程序时(我不确定如何解释“......使用您的应用程序的人...”),那么访问令牌将被刷新? />
在我的应用程序中,我使用AccessToken.getCurrentAccessToken()
检索访问令牌,将访问令牌发送到我的服务器,服务器向Facebook的服务器发出请求,目的是验证收到的访问令牌。
在这种情况下,是否还会刷新访问令牌? (在这种情况下,服务器正在向FB的服务器发出请求,而不是直接“使用我的应用程序的人”)
AccessToken.getCurrentAccessToken()
是否返回刷新的访问令牌?谢谢
编辑:这可以帮助其他人节省时间:
我发现访问令牌在某些条件下会在初始化FacebookSDK时自动刷新(Facebook文档没有清楚地解释访问令牌是如何刷新的 - 请参阅上面的问题)。
请注意我使用的是FacebookSDK 4.0 for Android
请按照下面的步骤进行操作:
FacebookSDK.sdkInitialize(Context, InitializeCallback)
if (AccessToken.getCurrentAccessToken() != null && Profile.getCurrentProfile() == null)
Profile.fetchProfileForCurrentAccessToken()
Utility.getGraphMeRequestWithCacheAsync()
GraphRequest graphRequest = getGraphMeRequestWithCache(accessToken);
graphRequest.setCallback(graphCallback);
graphRequest.executeAsync();
executeBatchAsync(GraphRequestBatch requests)
GraphRequestAsyncTask asyncTask = new GraphRequestAsyncTask(requests);
asyncTask.executeOnSettingsExecutor();
GraphRequestAsyncTask doInBackground()
方法 if (connection == null) {
return requests.executeAndWait();
} else {
return GraphRequest.executeConnectionAndWait(connection, requests);
}
对于这两种情况,代码将以此方法结束:
public static List<GraphResponse> executeConnectionAndWait(
HttpURLConnection connection,
GraphRequestBatch requests)
AccessTokenManager.getInstance().extendAccessTokenIfNeeded();
行。
顾名思义,每天最多会扩展一次访问令牌。答案 0 :(得分:9)
使用
AccessToken.refreshCurrentAccessTokenAsync();
答案 1 :(得分:1)
文档说明(重点是我):
当您使用iOS,Android或JavaScript SDK时,SDK将 自动刷新令牌(如果该人在 最近90天。使用Facebook的SDK的本地移动应用获得 寿命长的用户访问令牌,有效期约60天。这些代币 每天刷新一次,当使用您的应用程序的人员 请求到Facebook的服务器。
的含义是,如果您使用 SDK内置的官方Graph API客户端客户端(GraphRequest
和朋友),则在每次请求SDK之后将attempt to refresh the token(但每天不多见)。
为此,SDK使用了未记录的Graph API:
https://graph.facebook.com/v3.2/oauth/access_token?access_token={user-access-token}&grant_type=fb_extend_sso_token&client_id={your-app_id}
(它可能在所有Graph API版本中都可用,但我尚未对其进行测试)
Android SDK还使用refreshCurrentAccessTokenAsync
方法直接在公共API中公开了此令牌刷新功能。
请务必注意,令牌刷新仅对所谓的“ SSO”令牌(即从Facebook应用接收的令牌) 有效。如果用户未在其设备上安装Facebook应用程序,或者由于其他任何原因登录流程使用了webview变体,则以这种方式收到的令牌将永远不会刷新。据我所知,这在任何地方都没有记录。
当您尝试刷新从Webview流中收到的令牌时,上述未公开的API返回400
错误:
HTTP/1.1 400 Bad Request
...
{"error":{"message":"(#10) The access token was not obtained using single sign-on","type":"OAuthException","code":10,"fbtrace_id":"AbGFcwx4aOhY0sgEkLdAR34"}}
整个答案都是考虑到Android编写的,但我认为它也适用于iOS SDK(但我尚未对此进行测试)。