Zugriff auf Google-Nutzerdaten autorisieren

Bei der Authentifizierung wird festgestellt, wer jemand ist. Sie wird häufig als Nutzerregistrierung oder ‑anmeldung bezeichnet. Die Autorisierung ist der Prozess, bei dem der Zugriff auf Daten oder Ressourcen gewährt oder abgelehnt wird. Ihre App fordert beispielsweise die Einwilligung des Nutzers an, um auf Google Drive zuzugreifen.

Authentifizierungs- und Autorisierungsaufrufe sollten je nach den Anforderungen der App zwei separate und unterschiedliche Abläufe sein.

Wenn Ihre App Funktionen hat, die Google API-Daten nutzen können, aber nicht zu den Kernfunktionen Ihrer App gehören, sollten Sie Ihre App so konzipieren, dass sie Fälle, in denen API-Daten nicht zugänglich sind, problemlos verarbeiten kann. Sie können beispielsweise eine Liste der zuletzt gespeicherten Dateien ausblenden, wenn der Nutzer keinen Zugriff auf Drive 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, die Zugriff auf eine bestimmte API erfordert. Sie sollten beispielsweise die Berechtigung für den Zugriff auf Google Drive des Nutzers anfordern, wenn der Nutzer auf die Schaltfläche „In Drive speichern“ tippt.

Wenn Sie die Autorisierung von der Authentifizierung trennen, können Sie vermeiden, dass neue Nutzer überfordert werden oder dass Nutzer verwirrt sind, warum sie nach bestimmten Berechtigungen gefragt werden.

Für die Authentifizierung empfehlen wir die Credential Manager API. Zum Autorisieren von Aktionen, für die Zugriff auf von Google gespeicherte Nutzerdaten erforderlich ist, empfehlen wir die Verwendung von AuthorizationClient.

-Projekt einrichten

  1. Öffnen Sie Ihr Projekt in der oder erstellen Sie ein Projekt, falls Sie noch keines haben.
  2. Prüfen Sie, ob alle Informationen im vollständig und korrekt sind.
    1. Ihrer App muss ein korrekter App-Name, ein korrektes App-Logo und eine korrekte App-Startseite zugewiesen sein. Diese Werte werden Nutzern bei der Registrierung auf dem Einwilligungsbildschirm „Über Google anmelden“ und auf dem Bildschirm Drittanbieter-Apps und ‑Dienste angezeigt.
    2. Achten Sie darauf, dass Sie die URLs der Datenschutzerklärung und der Nutzungsbedingungen Ihrer App angegeben haben.
  3. Erstellen Sie in der eine Android-Client-ID für Ihre App, falls Sie noch keine haben. Sie müssen den Paketnamen und die SHA1-Signatur Ihrer App angeben.
    1. Rufen Sie auf.
    2. Klicken Sie auf Create client.
    3. Wählen Sie den Anwendungstyp Android aus.
  4. Erstellen Sie in der eine neue Client-ID für Webanwendungen, falls Sie das noch nicht getan haben. Sie können die Felder „Autorisierte JavaScript-Quellen“ und „Autorisierte Weiterleitungs-URIs“ vorerst ignorieren. Diese Client-ID wird verwendet, um Ihren Backend-Server zu identifizieren, wenn er mit den Authentifizierungsdiensten von Google kommuniziert.
    1. Rufen Sie auf.
    2. Klicken Sie auf Create client.
    3. Wählen Sie den Typ Webanwendung aus.

Abhängigkeiten deklarieren

Deklarieren Sie in der build.gradle-Datei Ihres Moduls Abhängigkeiten mit der neuesten Version der Google Identity Services-Bibliothek.

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

Berechtigungen anfordern, die für Nutzeraktionen erforderlich sind

Immer wenn ein Nutzer eine Aktion ausführt, für die zusätzliche Bereiche erforderlich sind, rufen Sie AuthorizationClient.authorize() auf.

Wenn ein Nutzer beispielsweise eine Aktion ausführt, für die Zugriff auf den Drive-App-Speicher 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 Ihrer Aktivität können Sie prüfen, ob die erforderlichen Berechtigungen erfolgreich abgerufen wurden. Wenn ja, führen Sie die Nutzeraktion aus.

@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.