Ich habe diese Methode unten, die Daten mit meinem Server synchronisiert. Wenn ich mit einem gültigen Authentifizierungs-Token angemeldet bin, funktioniert es einwandfrei. Aber ich bin nicht sicher, wie es funktioniert, wenn der Authentifizierungs-Token abgelaufen ist. In meiner iOS-App überprüfe ich den Wert "expires_in". Wenn dieser abgelaufen ist, verwende ich das Aktualisierungstoken, um ein neues Authentifizierungs-Token zu erhalten. Aber ich bin mir nicht sicher, wie ich das gleiche mit dem Account Manager machen soll. Ich bin mir nicht sicher, wo ich das Refresh-Token vom Gerät bekomme und es an meinen Server sende, um das neue Authentifizierungs-Token zu erhalten.Umgang mit Refresh Tokens mit Android Account Manager
Hier ist ein Beispielverfahren, bei dem ich das Token erhalten:
@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
}
Und hier ist mein 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();
}