Android'de GitHub'ı Kullanarak Kimlik Doğrulama

Kullanıcılarınızın GitHub hesaplarını kullanarak Firebase ile kimlik doğrulaması yapmasına izin verebilirsiniz Firebase kullanarak uygulamanıza web tabanlı genel OAuth Girişi entegre edebilirsiniz. Uçtan uca oturum açma akışını gerçekleştirmek için SDK.

Başlamadan önce

GitHub hesaplarıyla kullanıcıların oturumunu açmak için önce GitHub'ı Firebase projeniz için oturum açma sağlayıcısı:

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

  2. Firebase konsolunda Auth bölümünü açın.
  3. Oturum açma yöntemi sekmesinde, GitHub sağlayıcısını etkinleştirin.
  4. Söz konusu sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırması:
    1. Uygulamanızı kaydetme bir geliştirici uygulaması oluşturun ve uygulamanızın OAuth 2.0 İstemci Kimliği'ni alın ve Client Secret (İstemci Gizli Anahtarı) bölümlerini kullanabilirsiniz.
    2. Firebase OAuth yönlendirme URI'nizin (ör. my-app-12345.firebaseapp.com/__/auth/handler) emin olun uygulamanızın ayarlar sayfasında Yetkilendirme geri çağırma URL'niz olarak GitHub uygulamasının yapılandırması.
  5. Kaydet'i tıklayın.
  6. Modül (uygulama düzeyinde) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle), Android için Firebase Authentication kitaplığına bağımlılığı ekleyin. Şunu kullanmanızı öneririz: Firebase Android BoM Kitaplık'ta sürüm oluşturmayı kontrol etmek için

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.5.1"))
    
        // 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 her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanacaktır.

    (Alternatif) Firebase kitaplığı bağımlılıklarını kullanmadanBoM

    Firebase BoM kullanmamayı seçerseniz her Firebase kitaplığı sürümünü belirtmeniz gerekir değerini alır.

    Uygulamanızda birden çok Firebase kitaplığı kullanıyorsanız, kitaplık sürümlerini yönetmek için BoM kullanmanızı öneririz. Bu, tüm sürümlerin uyumlu olduğundan emin olun.

    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.1.0")
    }
    Kotlin'e özel bir kitaplık modülü mü arıyorsunuz? Başlamak için kalan süre: Ekim 2023 (Firebase BoM 32.5.0), hem Kotlin hem de Java geliştiricileri (ayrıntılar için bkz. Bu girişimle ilgili SSS).

  7. Uygulamanızın SHA-1 parmak izini henüz belirtmediyseniz Ayarlar sayfası Firebase konsolunda görebilirsiniz. Referans İstemcinizin Kimliğini Doğrulama uygulamanızın SHA-1 parmak izini nasıl alacağınıza ilişkin ayrıntılar için.

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

Android uygulaması oluşturuyorsanız kullanıcılarınızın kimliğini doğrulamanın en kolay yolu oturum açma işlemini ve Firebase'in tüm oturum açma işlemlerini yürütmekten Firebase Android SDK'sı kullanın.

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

  1. Builder'ı kullanarak OAuthProvider'ın bir örneğini sağlayıcı kimliği github.com

    Kotlin+KTX

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

    Java

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

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

    Kotlin+KTX

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com")

    Java

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com");

    GitHub'ın desteklediği parametreler için bkz. GitHub OAuth dokümanlarına göz atın. Firebase'in gerekli parametrelerini setCustomParameters() Bu parametreler client_id, response_type, redirect_uri, state, scope ve response_mode parametresini kullanabilirsiniz.

  3. İsteğe bağlı: Temel profilin ötesinde, ek OAuth 2.0 kapsamlarını belirtin. kimlik doğrulama sağlayıcısından istekte bulunabilirsiniz. Uygulamanız GitHub API'lerinden gizli kullanıcı verilerine erişim gerektirdiğinde, API İzinleri altında GitHub API'lerine erişmek için GitHub geliştirici konsolu İstenen OAuth kapsamları, uygulamanın API izinlerindeki önceden yapılandırılmış veriler.

    Kotlin+KTX

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

    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>() {
                {
                    add("user:email");
                }
            };
    provider.setScopes(scopes);

  4. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Unutmayın, diğer FirebaseAuth işlemleri gerçekleştirmeden önce, Özel Chrome Sekmesi. Bu nedenle, OnSuccessListener içindeki Etkinliğinize referans vermeyin ve eklediğiniz OnFailureListener, otomatik olarak ayrıldığında işlem kullanıcı arayüzünü başlatır.

    Öncelikle bir yanıt alıp almadığınızı kontrol etmeniz gerekir. Şununla oturum açılıyor: bu yöntem, Etkinliğinizi arka plana getirir. Bu da, sistem tarafından geri çekildi. Projenin yolunda gittiğinden bu durumda kullanıcıyı tekrar denemesini istemiyorsanız, zaten mevcut.

    Bekleyen 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 tamamlandığında, provider, döndürülen OAuthCredential nesnesinden alınabilir.

    OAuth erişim jetonunu kullanarak GitHub API'ye gidin.

    Örneğin, temel profil bilgilerini almak için REST API'yi çağırabilir. Authorization üstbilgisindeki erişim jetonunu iletmek:

  5. Yukarıdaki örneklerde oturum açma akışlarına odaklanılsa da bir GitHub sağlayıcısını mevcut bir kullanıcıya bağlamak için startActivityForLinkWithProvider Örneğin, birden çok sağlayıcıyı aynı kullanıcıya göstererek bu iki sağlayıcıdan ikisiyle de oturum açabilmesini sağlar.

    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ı desen aşağıdaki Şu bilgileri almak için kullanılabilir: startActivityForReauthenticateWithProvider Yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgileri.

    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

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.

  • Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz: FirebaseUser nesnesini ifade eder. Bkz. Kullanıcıları Yönet.

  • Firebase Realtime Database ve Cloud Storage içinde Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz: auth değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();