【发布时间】:2020-08-19 22:41:50
【问题描述】:
他们在AccessToken docu 中说:“使用 Facebook 的 SDK 的原生移动应用程序将获得长期访问令牌,有效期约为 60 天。这些令牌将在使用您的应用程序的人每天刷新一次对 Facebook 服务器的请求。”
这是否意味着只有当对 Facebook 的服务器的请求是从客户端 Android 应用程序发出的(我不确定如何解释“……使用您的应用程序的人……”)时,才会刷新访问令牌?
在我的应用程序中,我使用 AccessToken.getCurrentAccessToken() 检索访问令牌,将访问令牌发送到我的服务器,然后服务器向 Facebook 的服务器发出请求,目的是验证收到的访问令牌。
在这种情况下,访问令牌也会被刷新吗? (在这种情况下,服务器正在向 FB 的服务器发出请求,而不是直接“使用我的应用程序的人”)
- 如果是,Android 客户端应用程序中的 Facebook SDK 如何知道我的服务器向 Facebook 的服务器发出了请求? Android客户端的
AccessToken.getCurrentAccessToken()是否返回刷新后的访问令牌?
谢谢
编辑:这可能有助于其他人节省时间:
我发现访问令牌在某些条件下会在初始化 FacebookSDK 时自动刷新(Facebook 文档没有清楚地解释如何刷新访问令牌 - 请参阅我上面的问题)。
请注意我正在使用适用于 Android 的 FacebookSDK 4.0。
请按照以下步骤操作:
-
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();行。 顾名思义,这将每天最多扩展一次您的访问令牌。
【问题讨论】:
-
是的,在这种情况下,服务器正在发出刷新访问令牌的请求,并将接收新的访问令牌。但是,该应用程序不会意识到这一点。任何后续的 API 请求都将继续使用旧的访问令牌发出,并且会失败。
-
@subeeshb 我没有请求刷新服务器上的访问令牌。我只是调用 /me .... GRAPH API 请求。我猜你不是说每个简单的 GRAPH API 请求都包含一个刷新访问令牌的请求。
标签: facebook facebook-graph-api facebook-access-token facebook-authentication facebook-sdk-4.0