Buka konsol

Melakukan Autentikasi Menggunakan Login dengan Facebook pada Android

Anda dapat mengizinkan pengguna melakukan autentikasi dengan Firebase menggunakan akun Facebook-nya, dengan mengintegrasikan Login dengan Facebook ke dalam aplikasi Anda.

Sebelum memulai

  1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.
  2. Dalam file build.gradle level project, pastikan Anda memasukkan repositori Maven Google di bagian buildscript dan allprojects.
  3. Tambahkan dependensi untuk library Android Firebase Authentication ke file Gradle modul (level aplikasi) Anda (biasanya berupa app/build.gradle):

    implementation 'com.google.firebase:firebase-auth:19.1.0'
    
  4. Di situs Facebook for Developers, dapatkan App ID dan App Secret untuk aplikasi Anda.
  5. Aktifkan Login dengan Facebook:
    1. Di Firebase console, buka bagian Auth.
    2. Pada tab Metode Login, aktifkan metode login dengan Facebook, lalu masukkan App ID dan App Secret yang Anda dapatkan dari Facebook.
    3. Kemudian, pastikan URI pengalihan OAuth (misal {my-app-12345.firebaseapp.com/__/auth/handler) Anda terdaftar sebagai salah satu dari OAuth redirect URI di halaman setelan aplikasi Facebook Anda dalam situs Facebook for Developers di konfigurasi Product Settings > Facebook Login.

Melakukan Autentikasi dengan Firebase

  • Integrasikan Login dengan Facebook ke dalam aplikasi Anda dengan mengikuti dokumentasi developer. Saat Anda mengonfigurasi objek LoginButton atau LoginManager, mintalah izin public_profile dan email. Jika Anda mengintegrasikan Login dengan Facebook menggunakan LoginButton, aktivitas login memiliki kode yang serupa dengan yang berikut ini:

    Java

    // Initialize Facebook Login button
    mCallbackManager = CallbackManager.Factory.create();
    LoginButton loginButton = findViewById(R.id.buttonFacebookLogin);
    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

    // 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)
    }
  • Dalam metode onCreate aktivitas login Anda, dapatkan instance bersama dari objek FirebaseAuth:

    Java

    private FirebaseAuth mAuth;// ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin

    private lateinit var auth: FirebaseAuth// ...
    // Initialize Firebase Auth
    auth = FirebaseAuth.getInstance()
  • Saat menginisialisasi Aktivitas Anda, periksa apakah pengguna saat ini sudah login atau belum:

    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);
    }

    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)
    }
  • Setelah pengguna berhasil login, dapatkan token akses untuk pengguna yang sedang login dalam metode callback onSuccess dari LoginButton, tukarkan dengan kredensial Firebase, lalu lakukan autentikasi dengan Firebase menggunakan kredensial tersebut:

    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);
                        }
    
                        // ...
                    }
                });
    }

    Kotlin

    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)
                    }
    
                    // ...
                }
    }
    Jika pemanggilan signInWithCredential berhasil, Anda dapat menggunakan metode getCurrentUser untuk mendapatkan data akun pengguna.
  • Langkah berikutnya

    Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.

    • Di aplikasi yang dimiliki, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FirebaseUser. Baca bagian Mengelola Pengguna.

    • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.

    Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

    Agar pengguna logout, panggil signOut:

    Java

    FirebaseAuth.getInstance().signOut();

    Kotlin

    FirebaseAuth.getInstance().signOut()