他們在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