4

他們在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。
請執行下列步驟:

  1. FacebookSDK.sdkInitialize(Context, InitializeCallback)

    if (AccessToken.getCurrentAccessToken() != null && Profile.getCurrentProfile() == null)

  2. Profile.fetchProfileForCurrentAccessToken()

  3. Utility.getGraphMeRequestWithCacheAsync()

    GraphRequest graphRequest = getGraphMeRequestWithCache(accessToken); graphRequest.setCallback(graphCallback); graphRequest.executeAsync();

  4. ... executeBatchAsync(GraphRequestBatch requests)
    GraphRequestAsyncTask asyncTask = new GraphRequestAsyncTask(requests); asyncTask.executeOnSettingsExecutor();
  5. 參見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

    是的,在這種情況下,服務器正在刷新訪問令牌的請求,並將獲得新的訪問令牌。但是,該應用程序不會意識到這一點。任何後續的API請求將繼續使用舊的訪問令牌進行,並且會失敗。 – subeeshb

    +0

    @subeeshb我沒有要求刷新服務器上的訪問令牌。我只是調用/ me .... GRAPH API請求。我想你並不是說每個簡單的GRAPH API請求都包含刷新訪問令牌的請求。 – FilipR

    回答

    9

    使用

    AccessToken.refreshCurrentAccessTokenAsync(); 
    
    +0

    這就是這樣的生活救星:) –