Google Identity Authorization (Android): Wie erhalte ich ein Aktualisierungstoken?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Google Identity Authorization (Android): Wie erhalte ich ein Aktualisierungstoken?

by Guest » 17 Jan 2025, 02:53

Ich bin bereit, meiner (nativen) Android-App eine Art Google Drive-Synchronisierung hinzuzufügen – ohne Backend (alles geschieht in der App).
Wie in der zu sehen In der Google Identity-Dokumentation verwende ich einen AuthorizationClient, um über das AuthenticationResult ein Zugriffstoken zu erhalten:

Code: Select all

List requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
.authorize(authorizationRequest)
.addOnSuccessListener(
authorizationResult -> {
if (authorizationResult.hasResolution()) {
// Access needs to be granted by the user
PendingIntent pendingIntent = authorizationResult.getPendingIntent();
try {
startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
}
} else {
// Access already granted, continue with user action
saveToDriveAppFolder(authorizationResult);
}
})
.addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

Code: Select all

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
saveToDriveAppFolder(authorizationResult);
}
}
Und dann daraus eine Drive-Instanz erstellen:

Code: Select all

Drive.Builder(
GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(),
HttpCredentialsAdapter(GoogleCredentials.create(AccessToken(authorizationResult.getAccessToken(), null)))
).build()
So weit, so gut, alles funktioniert gut, aber da AuthorizationResult kein Aktualisierungstoken enthält – wie soll ich mit dem Ablauf des Zugriffstokens umgehen? Die App soll im Hintergrund ohne Benutzerinteraktionen synchronisiert werden, daher werde ich den Autorisierungsfluss nicht erneut starten (es sei denn, er wird natürlich widerrufen).
Mir ist bekannt, dass getServerAuthCode( ) könnte an Ihr Backend gesendet werden, um ein Paar Zugriffs-/Aktualisierungstoken für den serverseitigen Zugriff anzufordern, aber ich muss (oder möchte) nicht serverseitig auf die Daten meines Benutzers zugreifen.Vermisse ich? etwas?

Top