Catch up on everthing we announced at this year's Firebase Summit. Learn more

Android'de Bir Hesaba Birden Çok Kimlik Doğrulama Sağlayıcısı Bağlayın

Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak, kullanıcıların birden çok kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz. Kullanıcılar, oturum açmak için kullandıkları kimlik doğrulama sağlayıcısından bağımsız olarak aynı Firebase kullanıcı kimliğiyle tanımlanabilir. Örneğin, bir şifre ile oturum açan bir kullanıcı, gelecekte bir Google hesabını bağlayabilir ve herhangi bir yöntemle oturum açabilir. Veya anonim bir kullanıcı bir Facebook hesabını bağlayabilir ve ardından uygulamanızı kullanmaya devam etmek için Facebook ile oturum açabilir.

Sen başlamadan önce

Uygulamanıza iki veya daha fazla kimlik doğrulama sağlayıcısı (muhtemelen anonim kimlik doğrulama dahil) için destek ekleyin.

Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:

  1. Herhangi bir kimlik doğrulama sağlayıcısı veya yöntemi kullanarak kullanıcıda oturum açın.
  2. Yeni kimlik doğrulama sağlayıcısı kadar tabelasını açma akışı tamamlayın, ancak birini çağırarak, dahil değil FirebaseAuth.signInWith yöntemlerle. Örneğin, kullanıcının Google ID jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın.
  3. Bir alın AuthCredential yeni kimlik doğrulama sağlayıcısı için:

    Google Oturum Açma

    Java

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

    Kotlin+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Facebook Girişi

    Java

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

    Kotlin+KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    E-posta-şifre oturum açma

    Java

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

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. Geçiş AuthCredential nesneyi Oturum açan kullanıcının linkWithCredential yöntemiyle:

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

    Çağrısı linkWithCredential kimlik bilgileri zaten başka bir kullanıcı hesabına bağlı olup olmadığını başarısız olur. Bu durumda, uygulamanız için uygun olan hesapları ve ilişkili verileri birleştirmeyi ele almalısınız:

    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 {
                // ...
            }

Çağrısı Eğer linkWithCredential başarılı, kullanıcı artık herhangi bir bağlı kimlik doğrulama sağlayıcı ve erişim aynı Firebase verilerini kullanarak oturum açabilirsiniz.

Bir kimlik doğrulama sağlayıcısının bir hesapla bağlantısını kaldırabilirsiniz, böylece kullanıcı artık o sağlayıcıyla oturum açamaz.

Bir kullanıcı hesabından yetkilendirme sağlayıcı bağlantısını kaldırmak için sağlayıcı numarası geçen unlink yöntemi. Sen arayarak bir kullanıcıya bağlı yetkilendirme sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz 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
                // ...
            }
        }