Możesz pozwolić swoim użytkownikom na uwierzytelnianie w Firebase przy użyciu ich kont na Facebooku, integrując Facebook Login ze swoją aplikacją.
Zanim zaczniesz
Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .
- W witrynie Facebook for Developers pobierz identyfikator aplikacji i klucz tajny aplikacji.
- Włącz logowanie na Facebooku:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie .
- Na karcie Metoda logowania włącz metodę logowania do serwisu Facebook i określ identyfikator aplikacji oraz klucz tajny aplikacji uzyskany z serwisu Facebook.
- Następnie upewnij się, że Twój identyfikator URI przekierowania OAuth (np.
my-app-12345.firebaseapp.com/__/auth/handler
) jest wymieniony jako jeden z identyfikatorów URI przekierowania OAuth na stronie ustawień aplikacji Facebooka w witrynie Facebook for Developers w Produkcie Ustawienia> Konfiguracja logowania na Facebooku .
Korzystając z narzędzia Firebase Android BoM , zadeklaruj zależność dla biblioteki Firebase Authentication dla systemu Android w pliku Gradle modułu (na poziomie aplikacji) (zwykle
app/build.gradle
).Jawa
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:27.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' }
Korzystając z BoM Firebase na Androida , Twoja aplikacja będzie zawsze używać zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Zadeklaruj zależności bibliotek Firebase bez korzystania z BoM
Jeśli zdecydujesz się nie używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.
Pamiętaj, że jeśli używasz wielu bibliotek Firebase w swojej aplikacji, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.
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:20.0.4' }
Kotlin + KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:27.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' }
Korzystając z BoM Firebase na Androida , Twoja aplikacja będzie zawsze używać zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Zadeklaruj zależności bibliotek Firebase bez korzystania z BoM
Jeśli zdecydujesz się nie używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.
Pamiętaj, że jeśli używasz wielu bibliotek Firebase w swojej aplikacji, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.
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:20.0.4' }
Uwierzytelnij się w Firebase
- Zintegruj Facebook Login ze swoją aplikacją, postępując zgodnie z dokumentacją programisty . Podczas konfigurowania obiektu
LoginButton
lubLoginManager
poproś o uprawnieniapublic_profile
iemail
-email
. Jeśli zintegrowałeś logowanie na Facebooku za pomocą przyciskuLoginButton
, Twoja aktywność logowania ma kod podobny do następującego:Jawa
// 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); }
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) }
- W metodzie
onCreate
aktywnościonCreate
pobierz współdzieloną instancję obiektuFirebaseAuth
:Jawa
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
Kotlin + KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
- Podczas inicjowania działania sprawdź, czy użytkownik jest aktualnie zalogowany:
Jawa
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
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) }
- Po użytkownik pomyślnie znaki, w
LoginButton
„sonSuccess
metody wywołania zwrotnego, aby mieć dostęp tokena dla zalogowanego użytkownika, wymienić je na poświadczeń Firebase i uwierzytelniania Firebase pomocą poświadczeń Firebase:Jeśli wywołanieJawa
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); } } }); }
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) } } }
signInWithCredential
powiedzie się, możesz użyć metodygetCurrentUser
, aby uzyskać dane konta użytkownika.
Następne kroki
Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika i jest ono łączone z poświadczeniami - to jest z nazwą użytkownika i hasłem, numerem telefonu lub informacjami dostawcy uwierzytelniania - zalogowanym użytkownikiem. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikacji użytkownika we wszystkich aplikacjach w Twoim projekcie, niezależnie od tego, w jaki sposób się on zaloguje.
W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu
FirebaseUser
. Zobacz Zarządzanie użytkownikami .W Firebase Realtime Database i Cloud Storage Rules możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej
auth
i używać go do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj signOut
:
Jawa
FirebaseAuth.getInstance().signOut();
Kotlin + KTX
Firebase.auth.signOut()