В документе по AccessToken говорится следующее: "Родной мобильный приложения, использующие SDK Facebook, получат токены доступа с длительным сроком действия примерно на 60 дней. Эти токены будут обновляться один раз в день, когда человек, использующий ваше приложение, отправляет запрос на серверы Facebook."
Означает ли это, что только если запрос к серверам Facebook выполняется из клиентского приложения Android (я не уверен, как интерпретировать «... человек, использующий ваше приложение ...»), тогда токен доступа будет обновлен?
В моем приложении я получаю токен доступа с помощью AccessToken.getCurrentAccessToken()
, отправьте токен доступа на мой сервер, и сервер сделает запрос к серверам Facebook с целью проверки полученного токена доступа.
Будет ли токен доступа обновлен в этом случае? (в этом случае сервер выполняет запрос к серверам FB, а не напрямую к «человеку, использующему мое приложение»)
- Если да, то как Facebook SDK в клиентском приложении Android узнает, что мой сервер отправил запрос на серверы Facebook? Возвращает ли the
AccessToken.getCurrentAccessToken()
в Android-клиенте обновленный токен доступа?
Спасибо
EDIT: это может помочь другим сэкономить время: я обнаружил, что токен доступа при определенных условиях автоматически обновляется при инициализации FacebookSDK (документ Facebook не объясняет четко, как обновляется токен доступа — см. мой вопрос выше).
Обратите внимание, что я использую FacebookSDK 4.0 для 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();
. Что, как следует из названия, будет расширять ваш токен доступа не более одного раза в день.