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

    这就是这样的生活救星:) –