Catch up on everthing we announced at this year's Firebase Summit. Learn more

Authentifizieren Sie sich mit GitHub auf Android

Sie können Ihren Benutzern ermöglichen, sich mit ihren GitHub-Konten bei Firebase zu authentifizieren, indem Sie mithilfe des Firebase SDK die webbasierte generische OAuth-Anmeldung in Ihre App integrieren, um den End-to-End-Anmeldevorgang durchzuführen.

Bevor Sie beginnen

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

  1. Wenn Sie nicht bereits haben, fügen Sie Firebase zu dem Android - Projekt .

  2. In der Firebase Konsole , öffnen Sie den Abschnitt Auth.
  3. Auf dem Anmelden Methode Registerkarte, aktivieren Sie den GitHub - Anbieter.
  4. Fügen Sie die Client - ID und Client - Geheimnis von dem betreffenden Anbieter Entwickler - Konsole an den Provider - Konfiguration:
    1. Registrieren Sie Ihre App als Entwickler - Anwendung auf GitHub und erhalten Sie Ihre App OAuth 2.0 - Client - ID und Client - Geheimnis.
    2. Stellen Sie sicher , dass Ihre Firebase OAuth Umleitung URI (zB my-app-12345.firebaseapp.com/__/auth/handler ) , wird als Ihre URL Authorization Rückrufs in Ihrem App - Einstellungen Seite auf GitHub app config .
  5. Klicken Sie auf Speichern.
  6. Mit Hilfe der Firebase Android BoM , erklärt die Abhängigkeit für die Firebase Authentifizierung Android - Bibliothek in Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ).

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // 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'
    }
    

    Durch die Verwendung des Firebase Android BoM werden, Ihre App immer kompatible Versionen der Firebase Android - Bibliotheken verwenden.

    (Alternative) Deklarieren Firebase Bibliothek Abhängigkeiten , ohne die BoM mit

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

    Beachten Sie, dass , wenn Sie mehrere Firebase Bibliotheken in Ihrer Anwendung verwenden wir mit der BoM empfehlen Bibliothek Versionen zu verwalten, die sicherstellt , 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:21.0.1'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // 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'
    }
    

    Durch die Verwendung des Firebase Android BoM werden, Ihre App immer kompatible Versionen der Firebase Android - Bibliotheken verwenden.

    (Alternative) Deklarieren Firebase Bibliothek Abhängigkeiten , ohne die BoM mit

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

    Beachten Sie, dass , wenn Sie mehrere Firebase Bibliotheken in Ihrer Anwendung verwenden wir mit der BoM empfehlen Bibliothek Versionen zu verwalten, die sicherstellt , 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:21.0.1'
    }
    

  7. Wenn Sie noch nicht Ihre App SHA-1 Fingerabdruck angegeben, tun Sie dies aus der Seite Einstellungen der Konsole Firebase. Siehe Authentifizieren Your Client für Details, wie der App SHA-1 Fingerabdruck zu erhalten.

Verwalten Sie den Anmeldevorgang mit dem Firebase SDK

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

Gehen Sie wie folgt vor, um den Anmeldevorgang mit dem Firebase Android SDK durchzuführen:

  1. Konstruieren Sie eine Instanz eines OAuthProvider mit seinem Builder mit dem Provider ID github.com

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

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

    GitHub unterstützt Für die Parameter finden Sie in der GitHub OAuth Dokumentation . Beachten Sie, dass Sie nicht Firebase-erforderliche Parameter mit übergeben können setCustomParameters() . Diese Parameter sind client_id, response_type, redirect_uri, Zustand, Umfang und response_mode.

  3. Optional: Geben Sie zusätzliche OAuth 2.0 Bereiche jenseits Grundprofil , dass Sie auf Anfrage vom Authentifizierungs - Provider wollen. Wenn Ihre Anwendung Zugriff auf private Benutzerdaten von GitHub APIs erfordert, müssen Sie auf Anfrage Berechtigungen für den Zugriff GitHub APIs unter API - Berechtigungen in der GitHub Entwicklerkonsole. Angeforderte OAuth-Bereiche müssen genau mit den vorkonfigurierten 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 bei Firebase mithilfe des OAuth-Anbieterobjekts. Beachten Sie, dass im Gegensatz zu anderen FirebaseAuth Operationen, diese Kontrolle über Ihre UI nehmen , indem ein Aufspringen Custom Chrome Tab . Als Ergebnis verweist nicht Ihre Aktivität im OnSuccessListener und OnFailureListener , dass Sie befestigen , da sie sofort ab , wenn der Betrieb die Benutzeroberfläche gestartet.

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

    Um zu überprüfen , ob es ein anstehendes Ergebnis ist, rufen 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.
    }
    

    Um das Vorzeichen in Fluss zu starten, rufen 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 - Token der OAuth - Zugriff mit dem Anbieter verbunden ist, kann von den abgerufen werden OAuthCredential Objekt zurückgegeben.

    Unter Verwendung der OAuth - Zugriffstoken, können Sie den Anruf GitHub API .

    Zum Beispiel Grundprofil Informationen zu erhalten, können Sie die REST - API aufrufen, die Zugriff vorbei in den Token - Authorization - Header:

  5. Während die obigen Beispiele auf Anmelde-Flows konzentrieren, haben Sie auch die Möglichkeit , einen GitHub - Provider zu einem vorhandenen Benutzer verwenden zu verknüpfen startActivityForLinkWithProvider . Sie können beispielsweise mehrere Anbieter mit demselben Benutzer verknüpfen, sodass sie sich bei beiden 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 verwendet wird startActivityForReauthenticateWithProvider die verwendet werden können frische Anmeldeinformationen für sensible Vorgänge abzurufen , die letzte Anmeldung erforderlich.

    // 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 anmeldet, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – d. h. Benutzername und Kennwort, Telefonnummer oder Authentifizierungsanbieterinformationen – verknüpft, 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 Anwendungen können Sie die Benutzerprofilgrundinformationen aus dem bekommen FirebaseUser Objekt. Siehe Benutzer verwalten .

  • In Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln , können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Sie können Benutzer erlauben , durch mehrere Authentifizierungsanbieter anmelden, um Ihre App Verknüpfung Auth - Provider - Anmeldeinformationen zu einem vorhandenen Benutzerkonto.

Um einen Benutzer abzumelden, rufen signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()