У меня есть этот метод ниже, который синхронизирует данные с моим сервером. Если я вошел в систему с действительным токеном auth, он отлично работает. Но я не уверен, как заставить его работать, если токен auth истек. В моем приложении iOS я проверяю значение «expires_in», и если он истек, я использую токен обновления, чтобы получить новый токен аутентификации. Но я не уверен, как сделать то же самое с помощью менеджера аккаунта. Я не уверен, где я обрабатываю получение токена обновления с устройства и отправку его на свой сервер, чтобы получить новый токен аутентификации.Как обрабатывать токены обновления с помощью диспетчера учетной записи android
Вот выборочный метод, где я получаю маркер:
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
Intent i = new Intent("Sync Started");
mContext.sendBroadcast(i);
String token = mAccountManager.blockingGetAuthToken(account, AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, true);
// do sync here using token
}
А вот мой AbstractAccountAuthenticator -> getAuthToken:
@Override
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
Bundle result;
result = AuthHelper.getAccessTokenFromDevice(context, account, authTokenType);
if (result != null) {
return result;
}
final String refreshToken = AuthHelper.getRefreshTokenFromDevice(context, account);
if (refreshToken != null) {
result = AuthHelper.makeResultBundle(account, refreshToken, null);
return result;
}
if (AuthHelper.isAccountAvailable(context, account)) {
result = AuthHelper.makeResultBundle(account, null, null);
return result;
}
return new Bundle();
}