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 der Anbieterkonfiguration die Client-ID und das Client-Geheimnis von der Entwicklerkonsole dieses Anbieters 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. build.gradle in Ihrer build.gradle Datei auf Projektebene sicher, dass das Maven-Repository von Google sowohl in Ihrem buildscript als auch in Ihrem allprojects Abschnitt enthalten ist.

  7. Fügen Sie die Abhängigkeit für die Firebase-Authentifizierungs-Android-Bibliothek zu Ihrer Gradle-Datei (normalerweise app/build.gradle ) Ihres Moduls (App-Ebene) app/build.gradle :

    implementation 'com.google.firebase:firebase-auth:19.3.2'
    
  8. 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 Anbieter-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()