他们在AccessToken docu中说:“使用Facebook SDK的原生移动应用程序将获得长达60天的访问令牌,这些令牌每天刷新一次,使用你的应用向Facebook的服务器发出请求。“
这是否意味着只有当Facebook服务器的请求是从客户端的Android应用程序(我不知道如何解释“......使用你的应用程序的人......”),然后访问令牌将被刷新?
在我的应用程序中,我使用AccessToken.getCurrentAccessToken()
检索访问令牌,将访问令牌发送到我的服务器,并且服务器向Facebook服务器发送请求以验证接收到的访问令牌。
在这种情况下访问令牌是否会刷新?Facebook:刷新Android上的AccessToken
- 如果是(在这种情况下,服务器“使用我的应用程序的人”做请求FB的服务器,而不是直接),如何Facebook的SDK在Android客户端应用程序都知道,我的服务器发出请求Facebook的服务器? Android客户端中的
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();
线。 正如名字所暗示的那样,每天最多可以扩展一次访问令牌。
是的,在这种情况下,服务器正在刷新访问令牌的请求,并将获得新的访问令牌。但是,该应用程序不会意识到这一点。任何后续的API请求将继续使用旧的访问令牌进行,并且会失败。 – subeeshb
@subeeshb我没有要求刷新服务器上的访问令牌。我只是调用/ me .... GRAPH API请求。我想你并不是说每个简单的GRAPH API请求都包含刷新访问令牌的请求。 – FilipR