Android'de Yahoo Kullanarak Kimlik Doğrulama

Kullanıcılarınızın Yahoo gibi OAuth sağlayıcıları kullanarak Firebase ile kimlik doğrulaması yapmasını sağlayabilirsiniz. Bunun için, uçtan uca oturum açma akışını gerçekleştirmek üzere Firebase SDK'sı ile web tabanlı genel OAuth Girişi'ni uygulamanıza entegre edebilirsiniz.

Başlamadan önce

Kullanıcıların Yahoo hesaplarını kullanarak oturum açmak için öncelikle Firebase projenizde oturum açma sağlayıcısı olarak Yahoo'yu etkinleştirmeniz gerekir:

  1. Firebase'i Android projenize ekleyin.

  2. Firebase konsolunda Auth bölümünü açın.
  3. Oturum açma yöntemi sekmesinde Yahoo sağlayıcısını etkinleştirin.
  4. Bu sağlayıcının geliştirici konsolundaki İstemci Kimliği'ni ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırmasına ekleyin:
    1. Yahoo OAuth istemcisi kaydetmek için Yahoo'ya web uygulaması kaydetme ile ilgili Yahoo geliştirici dokümanlarındaki talimatları uygulayın.

      Şu iki OpenID Connect API iznini seçtiğinizden emin olun: profile ve email.

    2. Bu sağlayıcılara uygulama kaydederken projenizin *.firebaseapp.com alanını uygulamanızın yönlendirme alanı olarak kaydettiğinizden emin olun.
  5. Kaydet'i tıklayın.
  6. Uygulamanızın SHA-1 dijital parmak izini henüz belirtmediyseniz Firebase konsolunun Ayarlar sayfasından bu işlemi yapın. Uygulamanızın SHA-1 parmak izini almayla ilgili ayrıntılar için İstemcinizin Kimlik Doğrulaması bölümüne bakın.

Oturum açma akışını Firebase SDK'sı ile yönetme

Android uygulaması oluşturuyorsanız kullanıcılarınızın kimliklerini Yahoo hesaplarını kullanarak Firebase ile doğrulamanın en kolay yolu, oturum açma akışının tamamını Firebase Android SDK ile yönetmektir.

Firebase Android SDK ile oturum açma akışını yönetmek için aşağıdaki adımları uygulayın:

  1. Builder yöntemini kullanarak yahoo.com sağlayıcı kimliğini kullanarak bir OAuthProvider örneği oluşturun.

    Kotlin+KTX

    val provider = OAuthProvider.newBuilder("yahoo.com")

    Java

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");

  2. İsteğe bağlı: OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.

    Kotlin+KTX

    // Prompt user to re-authenticate to Yahoo.
    provider.addCustomParameter("prompt", "login")
    
    // Localize to French.
    provider.addCustomParameter("language", "fr")

    Java

    // Prompt user to re-authenticate to Yahoo.
    provider.addCustomParameter("prompt", "login");
    
    // Localize to French.
    provider.addCustomParameter("language", "fr");

    Yahoo'nun desteklediği parametreler için Yahoo OAuth dokümanlarına bakın. Firebase için gerekli parametreleri setCustomParameters() ile iletemeyeceğinizi unutmayın. Bu parametreler şunlardır: client_id, redirect_uri, response_type, scope ve state.

  3. İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz profile ve email dışında ek OAuth 2.0 kapsamlarını belirtin. Uygulamanızın Yahoo API'lerinden gizli kullanıcı verilerine erişmesi gerekiyorsa Yahoo geliştirici konsolundaki API İzinleri bölümünün altında, Yahoo API'lerine izin vermeniz gerekir. İstenen OAuth kapsamları, uygulamanın API izinlerindeki önceden yapılandırılmış kapsamlarla tam olarak eşleşmelidir. Örneğin, kullanıcı kişilerine okuma/yazma erişimi istenirse ve uygulamanın API izinlerinde önceden yapılandırılmışsa sdct-r salt okunur OAuth kapsamı yerine sdct-w iletilmelidir. Aksi takdirde,akış başarısız olur ve son kullanıcıya bir hata gösterilir.

    Kotlin+KTX

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    provider.scopes = listOf("mail-r", "sdct-w")

    Java

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    List<String> scopes =
            new ArrayList<String>() {
                {
                    // Request access to Yahoo Mail API.
                    add("mail-r");
                    // This must be preconfigured in the app's API permissions.
                    add("sdct-w");
                }
            };
    provider.setScopes(scopes);
    Daha fazla bilgi edinmek için Yahoo kapsamları dokümanlarına bakın.

  4. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Diğer FirebaseAuth işlemlerinden farklı olarak bu işlemin, bir Özel Chrome Sekmesi açarak kullanıcı arayüzünüzün kontrolünü ele alacağını unutmayın. Bu nedenle, eklediğiniz OnSuccessListeners ve OnFailureListeners öğelerindeki Etkinliğinize referans vermeyin. İşlem kullanıcı arayüzünü başlattığında bunlar hemen ayrılır.

    Öncelikle yanıt alıp almadığınızı kontrol etmeniz gerekir. Bu yöntemle oturum açtığınızda Etkinliğiniz arka plana alınır, bu da oturum açma akışı sırasında sistem tarafından geri çekilebileceği anlamına gelir. Böyle bir durumda kullanıcıyı tekrar denemesini istemeyeceğinizden emin olmak için zaten bir sonucun olup olmadığını kontrol etmeniz gerekir.

    Bekleyen bir sonuç olup olmadığını kontrol etmek için getPendingAuthResult numaralı telefonu arayın:

    Kotlin+KTX

    val pendingResultTask = firebaseAuth.pendingAuthResult
    if (pendingResultTask != null) {
        // There's something already here! Finish the sign-in for your user.
        pendingResultTask
            .addOnSuccessListener {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // ((OAuthCredential)authResult.getCredential()).getSecret().
            }
            .addOnFailureListener {
                // Handle failure.
            }
    } else {
        // There's no pending result so you need to start the sign-in flow.
        // See below.
    }

    Java

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
        // There's something already here! Finish the sign-in for your user.
        pendingResultTask
                .addOnSuccessListener(
                        new OnSuccessListener<AuthResult>() {
                            @Override
                            public void onSuccess(AuthResult authResult) {
                                // User is signed in.
                                // IdP data available in
                                // authResult.getAdditionalUserInfo().getProfile().
                                // The OAuth access token can also be retrieved:
                                // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                                // The OAuth secret can be retrieved by calling:
                                // ((OAuthCredential)authResult.getCredential()).getSecret().
                            }
                        })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                // Handle failure.
                            }
                        });
    } else {
        // There's no pending result so you need to start the sign-in flow.
        // See below.
    }

    Oturum açma akışını başlatmak için startActivityForSignInWithProvider numaralı telefonu arayın:

    Kotlin+KTX

    firebaseAuth
        .startActivityForSignInWithProvider(activity, provider.build())
        .addOnSuccessListener {
            // User is signed in.
            // IdP data available in
            // authResult.getAdditionalUserInfo().getProfile().
            // The OAuth access token can also be retrieved:
            // ((OAuthCredential)authResult.getCredential()).getAccessToken().
            // The OAuth secret can be retrieved by calling:
            // ((OAuthCredential)authResult.getCredential()).getSecret().
        }
        .addOnFailureListener {
            // Handle failure.
        }

    Java

    firebaseAuth
            .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // User is signed in.
                            // IdP data available in
                            // authResult.getAdditionalUserInfo().getProfile().
                            // The OAuth access token can also be retrieved:
                            // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                            // The OAuth secret can be retrieved by calling:
                            // ((OAuthCredential)authResult.getCredential()).getSecret().
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Handle failure.
                        }
                    });

    İşlem başarıyla tamamlandığında, sağlayıcıyla ilişkili OAuth erişim jetonu döndürülen OAuthCredential nesnesinden alınabilir.

    OAuth erişim jetonunu kullanarak Yahoo API'yi çağırabilirsiniz.

    Burada YAHOO_USER_UID, Yahoo kullanıcısının firebaseAuth.getCurrentUser().getProviderData().get(0).getUid() alanında veya authResult.getAdditionalUserInfo().getProfile() alanında ayrıştırılabilen kimliğidir.

  5. Yukarıdaki örnekler oturum açma akışlarına odaklanırken, bir Yahoo sağlayıcısını startActivityForLinkWithProvider kullanarak mevcut bir kullanıcıya da bağlayabilirsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayarak iki sağlayıcıdan biriyle oturum açabilirsiniz.

    Kotlin+KTX

    // The user is already signed-in.
    val firebaseUser = firebaseAuth.currentUser!!
    firebaseUser
        .startActivityForLinkWithProvider(activity, provider.build())
        .addOnSuccessListener {
            // Provider credential is linked to the current user.
            // IdP data available in
            // authResult.getAdditionalUserInfo().getProfile().
            // The OAuth access token can also be retrieved:
            // authResult.getCredential().getAccessToken().
            // The OAuth secret can be retrieved by calling:
            // authResult.getCredential().getSecret().
        }
        .addOnFailureListener {
            // Handle failure.
        }

    Java

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
            .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // Provider credential is linked to the current user.
                            // IdP data available in
                            // authResult.getAdditionalUserInfo().getProfile().
                            // The OAuth access token can also be retrieved:
                            // authResult.getCredential().getAccessToken().
                            // The OAuth secret can be retrieved by calling:
                            // authResult.getCredential().getSecret().
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Handle failure.
                        }
                    });

  6. Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgileri almak üzere startActivityForReauthenticateWithProvider ile kullanılabilir.

    Kotlin+KTX

    // The user is already signed-in.
    val firebaseUser = firebaseAuth.currentUser!!
    firebaseUser
        .startActivityForReauthenticateWithProvider(activity, provider.build())
        .addOnSuccessListener {
            // User is re-authenticated with fresh tokens and
            // should be able to perform sensitive operations
            // like account deletion and email or password
            // update.
        }
        .addOnFailureListener {
            // Handle failure.
        }

    Java

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
            .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // User is re-authenticated with fresh tokens and
                            // should be able to perform sensitive operations
                            // like account deletion and email or password
                            // update.
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Handle failure.
                        }
                    });

Sonraki adımlar

Bir kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve oturum açan kullanıcının kimlik bilgilerine (kullanıcı adı, şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir 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 başlıklı makaleyi inceleyin.

  • 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 erişebileceği verileri kontrol etmek için kullanabilirsiniz.

Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların birden fazla kimlik doğrulama sağlayıcısı 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();