Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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

Yetkilendirme sağlayıcı 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 şifreyle oturum açan bir kullanıcı, ileride bir Google hesabını bağlayabilir ve her iki yöntemle de oturum açabilir. Veya anonim bir kullanıcı bir Facebook hesabını bağlayabilir ve daha sonra 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ı için oturum açma akışını, FirebaseAuth.signInWith yöntemlerinden birini çağırarak ancak bu dahil olmamak üzere tamamlayın. Örneğin, kullanıcının Google ID jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın.
  3. Yeni kimlik doğrulama sağlayıcısı için bir AuthCredential alın:

    Google Oturum Açma

    Java

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

    Kotlin + ktx

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

    Java

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

    Kotlin + ktx

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

    Java

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

    Kotlin + ktx

    val credential = EmailAuthProvider.getCredential(email, password)
  4. AuthCredential nesnesini oturum linkWithCredential kullanıcının linkWithCredential yöntemine linkWithCredential :

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

    Eğer kimlik bilgileri zaten başka bir kullanıcı hesabına linkWithCredential , linkWithCredential çağrısı başarısız olur. Bu durumda, uygulamanız için uygun şekilde hesapları ve ilişkili verileri birleştirmeniz gerekir:

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

linkWithCredential çağrısı başarılı olursa, kullanıcı artık herhangi bir bağlantılı kimlik doğrulama sağlayıcısını kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.

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

Bir kimlik doğrulama sağlayıcısının bir kullanıcı hesabıyla unlink için, sağlayıcı kimliğini unlink yöntemine unlink . getProviderData çağırarak bir kullanıcıya bağlı kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz.

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