Aby umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą kont na Facebooku, możesz zintegrować funkcję logowania przez Facebooka z aplikacją.
Zanim zaczniesz
Dodaj Firebase do swojego projektu na Androida, jeśli jeszcze go nie masz.
- W witrynie Facebook for Developers pobierz identyfikator aplikacji i klucz App Secret dla swojej aplikacji.
- Włącz logowanie przez Facebooka:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na karcie Metoda logowania włącz metodę logowania Facebook i podaj App ID oraz App Secret (Identyfikator aplikacji) otrzymane z Facebooka.
- Następnie upewnij się, że identyfikator URI przekierowania protokołu OAuth (np.
my-app-12345.firebaseapp.com/__/auth/handler
) jest wymieniony jako jeden z identyfikatorów URI przekierowania protokołu OAuth na stronie ustawień aplikacji Facebook w witrynie Facebook for Developers w konfiguracji Ustawienia usługi > Logowanie przez Facebooka.
W pliku Gradle na poziomie modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj zależność do biblioteki uwierzytelniania Firebase na Androida. Do kontrolowania obsługi wersji biblioteki zalecamy używanie BOM Firebase na Androida.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.1")) // 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") }
Dzięki wykorzystaniu BM od Firebase Android Twoja aplikacja zawsze będzie używała zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Dodaj zależności biblioteki Firebase bez użycia BoM.
Jeśli nie chcesz używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w wierszu zależności.
Pamiętaj, że jeśli w aplikacji używasz wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami biblioteki. Zapewni to zgodność wszystkich wersji.
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:23.0.0") }
Uwierzytelnij za pomocą Firebase
- Zintegruj Facebook Login ze swoją aplikacją, postępując zgodnie z
dokumentacją dla deweloperów. Podczas konfigurowania obiektu
LoginButton
lubLoginManager
poproś o uprawnieniapublic_profile
iemail
. Jeśli masz zintegrowane logowanie Facebook za pomocąLoginButton
, Twoja aktywność logowania zawiera kod podobny do tego:Kotlin+KTX
// 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); }
- W metodzie
onCreate
aktywności logowania pobierz udostępnione wystąpienie obiektuFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Podczas inicjowania aktywności sprawdź, czy użytkownik jest aktualnie zalogowany:
Kotlin+KTX
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); }
- Gdy użytkownik zaloguje się za pomocą metody wywołania zwrotnego
onSuccess
w usłudzeLoginButton
, uzyskaj token dostępu dla zalogowanego użytkownika, wymień go na dane logowania Firebase i uwierzytelnij się w Firebase za pomocą danych logowania Firebase:Kotlin+KTX
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); } } }); }
signInWithCredential
się powiedzie, możesz pobrać dane konta użytkownika za pomocą metodygetCurrentUser
.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostaje utworzone nowe konto użytkownika powiązane z danymi logowania (tj. nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania), przy użyciu którego się zalogował. Nowe konto jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkowników we wszystkich aplikacjach w projekcie niezależnie od tego, jak się on zaloguje.
-
W aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu
FirebaseUser
. Zobacz Zarządzanie użytkownikami. W Regułach zabezpieczeń Bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej
auth
i za jego pomocą kontrolować, do jakich danych ma on dostęp.
Jeśli chcesz zezwolić użytkownikom na logowanie się w Twojej aplikacji za pomocą różnych dostawców uwierzytelniania, możesz połączyć dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();