Bei der Authentifizierung wird festgestellt, wer jemand ist. Sie wird häufig als Nutzerregistrierung oder Anmeldung bezeichnet. Die Autorisierung dient dazu, den Zugriff auf Daten oder Ressourcen zu gewähren oder abzulehnen. Ihre App fordert beispielsweise die Einwilligung des Nutzers zum Zugriff auf sein Google Drive an.
Authentifizierungs- und Autorisierungsaufrufe sollten zwei separate und eindeutige Abläufe sein, die auf den Anforderungen der App basieren.
Wenn Ihre App Funktionen hat, die Google API-Daten nutzen können, aber nicht zu den Hauptfunktionen Ihrer App gehören, sollten Sie Ihre App so gestalten, dass sie auch dann ordnungsgemäß funktioniert, wenn keine API-Daten verfügbar sind. So können Sie beispielsweise eine Liste der zuletzt gespeicherten Dateien ausblenden, wenn der Nutzer keinen Drive-Zugriff gewährt hat.
Sie sollten nur dann Zugriff auf Bereiche anfordern, die Sie für den Zugriff auf Google APIs benötigen, wenn der Nutzer eine Aktion ausführt, für die der Zugriff auf eine bestimmte API erforderlich ist. Sie sollten beispielsweise immer dann die Berechtigung zum Zugriff auf das Drive-Konto des Nutzers anfordern, wenn er auf die Schaltfläche „In Drive speichern“ tippt.
Wenn Sie Autorisierung und Authentifizierung trennen, können Sie verhindern, dass neue Nutzer überfordert werden oder verwirrt sind, warum sie nach bestimmten Berechtigungen gefragt werden.
Für die Authentifizierung empfehlen wir die Credential Manager API. Für die Autorisierung von Aktionen, für die Zugriff auf von Google gespeicherte Nutzerdaten erforderlich ist, empfehlen wir die Verwendung von AuthorizationClient.
Projekt einrichten
- Öffnen Sie Ihr Projekt in der oder erstellen Sie ein Projekt, falls Sie noch keines haben.
- Prüfen Sie auf der Seite , ob alle Informationen vollständig und korrekt sind.
- Achten Sie darauf, dass Ihrer App der richtige App-Name, das richtige App-Logo und die richtige App-Startseite zugewiesen sind. Diese Werte werden Nutzern beim Anmelden auf dem Einwilligungsbildschirm für „Über Google anmelden“ und auf dem Bildschirm Drittanbieter-Apps und ‐Dienste angezeigt.
- Achten Sie darauf, dass Sie die URLs der Datenschutzerklärung und der Nutzungsbedingungen Ihrer App angegeben haben.
- Erstellen Sie in der eine Android-Client-ID für Ihre App, falls Sie noch keine haben. Sie müssen den Paketnamen und die SHA-1-Signatur Ihrer App angeben.
- Erstellen Sie in eine neue Client-ID vom Typ „Webanwendung“, falls Sie das noch nicht getan haben. Die Felder „Autorisierte JavaScript-Quellen“ und „Autorisierte Weiterleitungs-URIs“ können Sie vorerst ignorieren. Diese Client-ID wird verwendet, um Ihren Backend-Server zu identifizieren, wenn er mit den Authentifizierungsdiensten von Google kommuniziert.
Abhängigkeiten deklarieren
Geben Sie in der build.gradle-Datei Ihres Moduls Abhängigkeiten mit der neuesten Version der Google Identity Services-Bibliothek an.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Berechtigungen anfordern, die für Nutzeraktionen erforderlich sind
Wenn ein Nutzer eine Aktion ausführt, die zusätzliche Berechtigungen erfordert, rufe AuthorizationClient.authorize()
an.
Wenn ein Nutzer beispielsweise eine Aktion ausführt, für die Zugriff auf den Speicherplatz seiner Drive App erforderlich ist, gehen Sie so vor:
List<Scopes> 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));
Im onActivityResult
-Callback deiner Aktivität kannst du prüfen, ob die erforderlichen Berechtigungen erfolgreich abgerufen wurden. Falls ja, kannst du die Nutzeraktion ausführen.
@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);
}
}
Wenn Sie serverseitig auf Google APIs zugreifen, können Sie die Methode getServerAuthCode() von AuthorizationResult aufrufen, um einen Autorisierungscode abzurufen, den Sie an Ihr Backend senden, um ihn gegen ein Zugriffs- und Aktualisierungstoken einzutauschen.