Sie können Ihren Nutzern die Möglichkeit geben, sich mit ihren Facebook-Konten bei Firebase zu authentifizieren, indem Sie Facebook Login in Ihre App einbinden.
Hinweis
Falls noch nicht geschehen, fügen Sie Ihrem Android-Projekt Firebase hinzu.
- Rufen Sie auf der Facebook for Developers-Website die App-ID und ein App-Secret für Ihre App ab.
-
Aktivieren Sie Facebook Login als Anmeldeanbieter für Ihr Firebase-Projekt:
- Rufen Sie in der Firebase-Konsole Sicherheit > Authentifizierung auf.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Facebook und geben Sie die App-ID und das App-Secret an, die Sie von Facebook erhalten haben.
-
Achten Sie darauf, dass Ihr OAuth-Weiterleitungs-URI (z. B.
my-app-12345.firebaseapp.com/__/auth/handler) auf der Seite mit den Einstellungen Ihrer Facebook-App auf der Facebook for Developers-Website in der Konfiguration Produkteinstellungen > Facebook-Anmeldung als einer Ihrer OAuth-Weiterleitungs-URIs aufgeführt ist.
Fügen Sie in der Gradle-Datei des Moduls (auf App-Ebene) (normalerweise
<project>/<app-module>/build.gradle.ktsoder<project>/<app-module>/build.gradle) die Abhängigkeit für die Firebase Authentication-Bibliothek für Android hinzu. Wir empfehlen, die Firebase Android BoM zu verwenden, um die Bibliotheksversionierung zu steuern.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.1.0")) // Add 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") }
Mit der Firebase Android BoM haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.
(Alternative) Firebase-Bibliotheksabhängigkeiten ohne Verwendung der BoM hinzufügen
Wenn Sie die Firebase BoM nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in der entsprechenden Abhängigkeitszeile angeben.
Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir dringend, die BoM zum Verwalten der Bibliotheksversionen zu verwenden. So wird sichergestellt, dass alle Versionen kompatibel sind.
dependencies { // Add 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:25.0.0") }
Mit Firebase authentifizieren
- Binden Sie Facebook Login in Ihre Anwendung ein. Folgen Sie dazu der
Dokumentation des Entwicklers. Wenn Sie das Objekt
LoginButtonoderLoginManagerkonfigurieren, fordern Sie die Berechtigungenpublic_profileundemailan. Wenn Sie Facebook Login mit einemLoginButtoneingebunden haben, sieht der Code für Ihre Anmeldeaktivität in etwa so aus:Kotlin
// Initialize Facebook Login button callbackManager = CallbackManager.Factory.create() buttonFacebookLogin.setReadPermissions("email", "public_profile") buttonFacebookLogin.registerCallback( callbackManager, object : FacebookCallback<LoginResult> { override fun onSuccess(loginResult: LoginResult) { Log.d(TAG, "facebook:onSuccess:$loginResult") handleFacebookAccessToken(loginResult.accessToken) } override fun onCancel() { Log.d(TAG, "facebook:onCancel") } override fun onError(error: FacebookException) { Log.d(TAG, "facebook:onError", error) } }, ) // ... override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Pass the activity result back to the Facebook SDK callbackManager.onActivityResult(requestCode, resultCode, data) }
Java
// Initialize Facebook Login button mCallbackManager = CallbackManager.Factory.create(); LoginButton loginButton = findViewById(R.id.button_sign_in); loginButton.setReadPermissions("email", "public_profile"); loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d(TAG, "facebook:onSuccess:" + loginResult); handleFacebookAccessToken(loginResult.getAccessToken()); } @Override public void onCancel() { Log.d(TAG, "facebook:onCancel"); } @Override public void onError(FacebookException error) { Log.d(TAG, "facebook:onError", error); } }); // ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Pass the activity result back to the Facebook SDK mCallbackManager.onActivityResult(requestCode, resultCode, data); }
- Rufen Sie in der
onCreate-Methode Ihrer Anmeldeaktivität die freigegebene Instanz desFirebaseAuth-Objekts ab:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Prüfe beim Initialisieren der Aktivität, ob der Nutzer derzeit angemeldet ist:
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
- Nachdem sich ein Nutzer erfolgreich angemeldet hat, rufen Sie in der Callback-Methode
onSuccessvonLoginButtonein Zugriffstoken für den angemeldeten Nutzer ab, tauschen es gegen Firebase-Anmeldedaten aus und authentifizieren sich mit den Firebase-Anmeldedaten bei Firebase:Wenn der Aufruf vonKotlin
private fun handleFacebookAccessToken(token: AccessToken) { Log.d(TAG, "handleFacebookAccessToken:$token") val credential = FacebookAuthProvider.getCredential(token.token) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } } }
Java
private void handleFacebookAccessToken(AccessToken token) { Log.d(TAG, "handleFacebookAccessToken:" + token); AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(FacebookLoginActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } }); }
signInWithCredentialerfolgreich ist, können Sie die MethodegetCurrentUserverwenden, um die Kontodaten des Nutzers abzurufen.
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und dem Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem Objekt
FirebaseUserabrufen. Weitere Informationen finden Sie unter Nutzer verwalten. In Ihren Sicherheitsregeln für Firebase Realtime Database und Cloud Storage können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
authabrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Wenn Sie einen Nutzer abmelden möchten, rufen Sie
signOut auf:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();