Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Tautkan Beberapa Penyedia Otentikasi ke Akun di Android

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Anda dapat mengizinkan pengguna masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada. Pengguna dapat diidentifikasi dengan ID pengguna Firebase yang sama terlepas dari penyedia autentikasi yang mereka gunakan untuk masuk. Misalnya, pengguna yang masuk dengan sandi dapat menautkan akun Google dan masuk dengan salah satu metode di masa mendatang. Atau, pengguna anonim dapat menautkan akun Facebook dan kemudian, masuk dengan Facebook untuk terus menggunakan aplikasi Anda.

Sebelum kamu memulai

Tambahkan dukungan untuk dua atau lebih penyedia autentikasi (mungkin termasuk autentikasi anonim) ke aplikasi Anda.

Untuk menautkan kredensial penyedia autentikasi ke akun pengguna yang ada:

  1. Masuk pengguna menggunakan penyedia atau metode otentikasi apa pun.
  2. Selesaikan alur masuk untuk penyedia autentikasi baru hingga, tetapi tidak termasuk, memanggil salah satu metode FirebaseAuth.signInWith . Misalnya, dapatkan token ID Google pengguna, token akses Facebook, atau email dan kata sandi.
  3. Dapatkan AuthCredential untuk penyedia otentikasi baru:

    Masuk dengan Google

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Masuk Facebook

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin+KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    Masuk email-kata sandi

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. Teruskan objek AuthCredential ke metode linkWithCredential pengguna yang masuk:

    Java

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

    Kotlin+KTX

    auth.currentUser!!.linkWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    Log.d(TAG, "linkWithCredential:success")
                    val user = task.result?.user
                    updateUI(user)
                } else {
                    Log.w(TAG, "linkWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }

    Panggilan ke linkWithCredential akan gagal jika kredensial sudah ditautkan ke akun pengguna lain. Dalam situasi ini, Anda harus menangani penggabungan akun dan data terkait yang sesuai untuk aplikasi Anda:

    Java

    FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser();
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    FirebaseUser currentUser = task.getResult().getUser();
                    // Merge prevUser and currentUser accounts and data
                    // ...
                }
            });

    Kotlin+KTX

    val prevUser = auth.currentUser
    auth.signInWithCredential(credential)
            .addOnSuccessListener { result ->
                val currentUser = result.user
                // Merge prevUser and currentUser accounts and data
                // ...
            }
            .addOnFailureListener {
                // ...
            }

Jika panggilan ke linkWithCredential berhasil, pengguna sekarang dapat masuk menggunakan penyedia autentikasi tertaut dan mengakses data Firebase yang sama.

Anda dapat memutuskan tautan penyedia autentikasi dari akun, sehingga pengguna tidak dapat lagi masuk dengan penyedia tersebut.

Untuk memutuskan tautan penyedia autentikasi dari akun pengguna, teruskan ID penyedia ke metode unlink . Anda bisa mendapatkan ID penyedia dari penyedia auth yang ditautkan ke pengguna dengan memanggil getProviderData .

Java

mAuth.getCurrentUser().unlink(providerId)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Auth provider unlinked from account
                    // ...
                }
            }
        });

Kotlin+KTX

Firebase.auth.currentUser!!.unlink(providerId)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Auth provider unlinked from account
                // ...
            }
        }