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

Authentifizieren Sie sich mit Twitter auf Android

Sie können Ihren Benutzern ermöglichen, sich über ihre Twitter-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 Twitter-Konten anzumelden, müssen Sie zunächst Twitter 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 Twitter - Anbieter.
  4. Fügen Sie den API - Schlüssel und API Geheimnis von den betreffenden Anbieter Entwickler - Konsole an die Provider - Konfiguration:
    1. Registrieren Sie Ihre App als Entwickler - Anwendung auf Twitter und erhalten Sie Ihre App-OAuth - API - Schlüssel und API 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 Ihrem Twitter - 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.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'
    }
    

    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.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'
    }
    

    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 Twitter-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 Twitter.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.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("lang", "fr");
    

    Für die Parameter Twitter unterstützt, finden Sie in der Twitter 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. 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().
                  // The OAuth secret can be retrieved by calling:
                  // authResult.getCredential().getSecret().
                }
              })
          .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().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Bei erfolgreichem Abschluss, Token der OAuth - Zugriff mit dem Anbieter verbunden sind, können von der abgerufen werden OAuthCredential Objekt zurückgegeben.

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

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

  4. Während die obigen Beispiele auf Anmelde-Flows konzentrieren, haben Sie auch die Möglichkeit , ein Twitter - 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) {
                // Twitter 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().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  5. 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()