Anda dapat mengizinkan pengguna mengautentikasi dengan Firebase menggunakan akun Facebook mereka dengan mengintegrasikan Facebook Login ke dalam aplikasi Anda.
Sebelum kamu memulai
Jika Anda belum melakukannya, tambahkan Firebase ke proyek Android Anda .
- Di situs Facebook untuk Pengembang , dapatkan ID Aplikasi dan Rahasia Aplikasi untuk aplikasi Anda.
- Aktifkan Masuk Facebook:
- Di konsol Firebase , buka bagian Auth .
- Pada tab Metode masuk , aktifkan metode masuk Facebook dan tentukan ID Aplikasi dan Rahasia Aplikasi yang Anda dapatkan dari Facebook.
- Kemudian, pastikan URI pengalihan OAuth Anda (misalnya
my-app-12345.firebaseapp.com/__/auth/handler
) terdaftar sebagai salah satu URI pengalihan OAuth Anda di halaman pengaturan aplikasi Facebook Anda di situs Facebook untuk Pengembang di Produk Pengaturan > Konfigurasi Login Facebook .
Dalam file Gradle modul (level aplikasi) Anda (biasanya
<project>/<app-module>/build.gradle
), tambahkan dependensi untuk library Android Firebase Authentication. Kami merekomendasikan penggunaan Firebase Android BoM untuk mengontrol pembuatan versi library.Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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-ktx' }
Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi pustaka Android Firebase yang kompatibel.
(Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM
Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.
Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.
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-ktx:21.1.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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' }
Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi pustaka Android Firebase yang kompatibel.
(Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM
Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.
Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.
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:21.1.0' }
Autentikasi dengan Firebase
- Integrasikan Login Facebook ke dalam aplikasi Anda dengan mengikuti dokumentasi developer . Saat Anda mengonfigurasi objek
LoginButton
atauLoginManager
, minta izinpublic_profile
danemail
. Jika Anda mengintegrasikan Facebook Login menggunakanLoginButton
, aktivitas masuk Anda memiliki kode yang mirip dengan berikut: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); }
- Dalam metode
onCreate
aktivitas masuk Anda, dapatkan instance bersama dari objekFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Saat menginisialisasi Aktivitas Anda, periksa untuk melihat apakah pengguna saat ini masuk:
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); }
- Setelah pengguna berhasil masuk, dalam metode panggilan balik
LoginButton
'sonSuccess
, dapatkan token akses untuk pengguna yang masuk, tukarkan dengan kredensial Firebase, dan autentikasi dengan Firebase menggunakan kredensial Firebase:Jika panggilan keKotlin+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
berhasil, Anda dapat menggunakan metodegetCurrentUser
untuk mendapatkan data akun pengguna.
Langkah selanjutnya
Setelah pengguna masuk untuk pertama kali, akun pengguna baru dibuat dan ditautkan ke kredensial—yaitu, nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi—yang digunakan pengguna untuk masuk. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda, terlepas dari cara pengguna login.
Di aplikasi Anda, Anda bisa mendapatkan informasi profil dasar pengguna dari objek
FirebaseUser
. Lihat Kelola Pengguna .Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik pengguna yang masuk dari variabel
auth
, dan menggunakannya untuk mengontrol data apa yang dapat diakses pengguna.
Anda dapat mengizinkan pengguna masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.
Untuk mengeluarkan pengguna, panggil signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();