Android'de Facebook Girişini Kullanarak Kimlik Doğrulama

Facebook Giriş'i uygulamanıza entegre ederek kullanıcılarınızın Facebook hesaplarını kullanarak Firebase ile kimlik doğrulamalarını sağlayabilirsiniz.

Başlamadan önce

  1. Henüz yapmadıysanız Firebase'i Android projenize ekleyin.

  2. Geliştiriciler için Facebook sitesinde, uygulamanız için Uygulama Kimliği ve Uygulama Gizli Anahtarı'nı edinin.
  3. Facebook'a giriş yapmayı etkinleştirin:
    1. Firebase konsolunda Auth bölümünü açın.
    2. Oturum açma yöntemi sekmesinde, Facebook oturum açma yöntemini etkinleştirin ve Facebook'tan aldığınız Uygulama Kimliği ile Uygulama Sırrı'nı belirtin.
    3. Sonra OAuth yönlendirme URI'nizin (ör. my-app-12345.firebaseapp.com/__/auth/handler), Ürün Ayarları > Facebook Girişi yapılandırmasındaki Geliştiriciler için Facebook sitesinde, Facebook uygulamanızın ayarlar sayfasında OAuth yönlendirme URI'lerinizden biri olarak listelendiğinden emin olun.
  4. Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle), Android için Firebase Authentication kitaplığına bağımlılığı ekleyin. Kitaplık sürümünü kontrol etmek için Firebase Android BoM'u kullanmanızı öneririz.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.2"))
    
        // 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")
    }
    

    Firebase Android BoM kullanıldığında uygulamanız Firebase Android kitaplıklarının her zaman uyumlu sürümlerini kullanır.

    (Alternatif) BoM'u kullanmadan Firebase kitaplığı bağımlılıklarını ekleme

    Firebase BoM'yi kullanmamayı seçerseniz her Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.

    Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM kullanmanızı önemle tavsiye ederiz. Böylece tüm sürümlerin uyumlu olması sağlanır.

    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:23.0.0")
    }
    
    Kotlin'e özel bir kitaplık modülü mü arıyorsunuz? Ekim 2023'ten (Firebase BoM 32.5.0) itibaren, hem Kotlin hem de Java geliştiricileri ana kitaplık modülüne bağlı olabilir (ayrıntılar için Bu girişimle ilgili SSS bölümüne bakın).

Firebase ile kimlik doğrulama

  1. Geliştirici belgelerini izleyerek Facebook Girişi'ni uygulamanıza entegre edin. LoginButton veya LoginManager nesnesini yapılandırırken public_profile ve email izinlerini isteyin. Facebook Girişi'ni LoginButton kullanarak entegre ettiyseniz oturum açma etkinliğiniz aşağıdakine benzer koda sahip olur:

    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);
    }
  2. Oturum açma etkinliğinizin onCreate yönteminde, FirebaseAuth nesnesinin paylaşılan örneğini alın:

    Kotlin+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  3. Etkinliğinizi başlatırken, kullanıcının oturum açmış olup olmadığını kontrol edin:

    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);
    }
  4. Kullanıcı başarıyla oturum açtıktan sonra LoginButton ürününün onSuccess geri çağırma yönteminde, oturum açmış kullanıcı için bir erişim jetonu alın, bu jetonu Firebase kimlik bilgisi ile değiştirin ve Firebase kimlik bilgisini kullanarak Firebase ile kimlik doğrulayın:

    Kotlin+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 çağrısı başarılı olursa kullanıcının hesap verilerini almak için getCurrentUser yöntemini kullanabilirsiniz.

Sonraki adımlar

Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgisi) bağlanır. Bu yeni hesap Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığından bağımsız olarak projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda kullanıcının temel profil bilgilerini FirebaseUser nesnesinden alabilirsiniz. Kullanıcıları Yönetme sayfasına göz atın.

  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açan kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların, birden fazla kimlik doğrulama sağlayıcı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.

Bir kullanıcının oturumunu kapatmak için signOut numaralı telefonu arayın:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();