Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Authentifizieren Sie sich mit GitHub unter Android

Sie können Ihre Benutzer mit ihren GitHub-Konten bei Firebase authentifizieren lassen, indem Sie das webbasierte generische OAuth-Login mithilfe des Firebase SDK in Ihre App integrieren, um den End-to-End-Anmeldefluss auszuführen.

Bevor Sie beginnen

Um Benutzer mit GitHub-Konten anzumelden, müssen Sie zuerst GitHub als Anmeldeanbieter für Ihr Firebase-Projekt aktivieren:

  1. Wenn Sie dies noch nicht getan haben, fügen Sie Firebase zu Ihrem Android-Projekt hinzu .

  2. Öffnen Sie in der Firebase-Konsole den Abschnitt Auth .
  3. Auf dem Anmelden Methode Registerkarte, aktivieren Sie den GitHub - Anbieter.
  4. Fügen Sie die Client-ID und das Client-Geheimnis von der Entwicklerkonsole dieses Anbieters zur Anbieterkonfiguration hinzu:
    1. Registrieren Sie Ihre App als Entwickleranwendung auf GitHub und erhalten Sie die OAuth 2.0- Client-ID und das Client-Geheimnis Ihrer App.
    2. my-app-12345.firebaseapp.com/__/auth/handler Sie sicher, dass Ihr Firebase OAuth-Umleitungs-URI (z. B. my-app-12345.firebaseapp.com/__/auth/handler ) auf der Einstellungsseite Ihrer App in der Konfiguration Ihrer GitHub-App als URL für den Autorisierungsrückruf my-app-12345.firebaseapp.com/__/auth/handler ist.
  5. Klicken Sie auf Speichern .
  6. Deklarieren Sie mithilfe der Firebase Android BoM die Abhängigkeit für die Firebase Authentication Android-Bibliothek in der Gradle-Datei Ihres Moduls (App-Ebene) (normalerweise app/build.gradle ).

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.1.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    Bei Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der Firebase Android-Bibliotheken.

    (Alternative) Deklarieren Sie Firebase-Bibliotheksabhängigkeiten ohne Verwendung der Stückliste

    Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

    Beachten Sie, dass wir bei Verwendung mehrerer Firebase-Bibliotheken in Ihrer App die Verwendung der Stückliste zum Verwalten von Bibliotheksversionen dringend empfehlen, um sicherzustellen, dass alle Versionen kompatibel sind.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:20.0.1'
    }
    

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.1.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    Bei Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der Firebase Android-Bibliotheken.

    (Alternative) Deklarieren Sie Firebase-Bibliotheksabhängigkeiten ohne Verwendung der Stückliste

    Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

    Beachten Sie, dass wir bei Verwendung mehrerer Firebase-Bibliotheken in Ihrer App die Verwendung der Stückliste zum Verwalten von Bibliotheksversionen dringend empfehlen, um sicherzustellen, dass alle Versionen kompatibel sind.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:20.0.1'
    }
    

  7. Wenn Sie den SHA-1-Fingerabdruck Ihrer App noch nicht angegeben haben, tun Sie dies auf der Seite Einstellungen der Firebase-Konsole. Weitere Informationen zum Abrufen des SHA-1-Fingerabdrucks Ihrer App finden Sie unter Authentifizieren Ihres Kunden .

Behandeln Sie den Anmeldefluss mit dem Firebase SDK

Wenn Sie eine Android-App erstellen, können Sie Ihre Benutzer am einfachsten mit ihren GitHub-Konten bei Firebase authentifizieren, indem Sie den gesamten Anmeldefluss mit dem Firebase Android SDK abwickeln.

Gehen Sie folgendermaßen vor, um den Anmeldefluss mit dem Firebase Android SDK zu verwalten:

  1. Erstellen Sie eine Instanz eines OAuthProviders mithilfe seines Builders mit der Provider-ID github.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
    
  2. Optional : Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die Sie mit der OAuth-Anforderung senden möchten.

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com");
    

    Informationen zu den von GitHub unterstützten Parametern finden Sie in der GitHub OAuth-Dokumentation . Beachten Sie, dass Sie mit setCustomParameters() keine für Firebase erforderlichen Parameter setCustomParameters() . Diese Parameter sind client_id , response_type , redirect_uri , state , scope und response_mode .

  3. Optional : Geben Sie zusätzliche OAuth 2.0-Bereiche über das Basisprofil hinaus an, die Sie vom Authentifizierungsanbieter anfordern möchten. Wenn Ihre Anwendung Zugriff auf private Benutzerdaten von GitHub-APIs erfordert, müssen Sie Berechtigungen für den Zugriff auf GitHub-APIs unter API-Berechtigungen in der GitHub-Entwicklerkonsole anfordern. Angeforderte OAuth-Bereiche müssen exakt mit den vorkonfigurierten Bereichen in den API-Berechtigungen der App übereinstimmen.

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    List<String> scopes =
        new ArrayList<String>() {
          {
            add("user:email");
          }
        };
    provider.setScopes(scopes);
    
  4. Authentifizieren Sie sich mit dem OAuth-Provider-Objekt bei Firebase. Beachten Sie, dass dies im Gegensatz zu anderen FirebaseAuth-Vorgängen die Kontrolle über Ihre Benutzeroberfläche übernimmt, indem Sie einen benutzerdefinierten Chrome-Tab öffnen . Verweisen Sie daher nicht auf Ihre Aktivität im OnSuccessListener und OnFailureListener , die Sie anhängen, da sie sich sofort OnFailureListener , wenn der Vorgang die Benutzeroberfläche startet.

    Sie sollten zunächst überprüfen, ob Sie bereits eine Antwort erhalten haben. Wenn Sie sich über diese Methode anmelden, wird Ihre Aktivität in den Hintergrund gestellt. Dies bedeutet, dass sie vom System während des Anmeldevorgangs zurückgefordert werden kann. Um sicherzustellen, dass der Benutzer dies in diesem Fall nicht erneut versucht, sollten Sie überprüfen, ob bereits ein Ergebnis vorliegt.

    Rufen Sie getPendingAuthResult , um zu überprüfen, ob ein Ergebnis getPendingAuthResult :

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    Rufen Sie startActivityForSignInWithProvider , um den startActivityForSignInWithProvider :

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Nach erfolgreichem Abschluss kann das dem Anbieter zugeordnete OAuth-Zugriffstoken aus dem zurückgegebenen OAuthCredential Objekt abgerufen werden.

    Mit dem OAuth-Zugriffstoken können Sie die GitHub-API aufrufen.

    Um beispielsweise grundlegende Profilinformationen abzurufen, können Sie die REST-API aufrufen und das Zugriffstoken im Authorization Header übergeben:

  5. Während sich die obigen Beispiele auf startActivityForLinkWithProvider , haben Sie auch die Möglichkeit, einen GitHub-Anbieter mit startActivityForLinkWithProvider mit einem vorhandenen Benutzer zu startActivityForLinkWithProvider . Sie können beispielsweise mehrere Anbieter mit demselben Benutzer verknüpfen, sodass sich beide Anbieter anmelden können.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // GitHub credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. Das gleiche Muster kann mit startActivityForReauthenticateWithProvider verwendet werden, mit dem neue Anmeldeinformationen für vertrauliche Vorgänge abgerufen werden können, für die eine kürzlich erfolgte Anmeldung erforderlich ist.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal angemeldet hat, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen verknüpft, dh dem Benutzernamen und dem Kennwort, der Telefonnummer oder den Informationen zum Authentifizierungsanbieter, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Apps können Sie die grundlegenden Profilinformationen des Benutzers aus dem FirebaseUser Objekt FirebaseUser . Siehe Benutzer verwalten .

  • In Ihren Firebase- Sicherheitsregeln für Echtzeitdatenbanken und Cloud-Speicher können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

Sie können Benutzern erlauben, sich mit mehreren Authentifizierungsanbietern bei Ihrer App anzumelden, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen.

Um einen Benutzer signOut , rufen Sie signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()