Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Android'de GitHub Kullanarak Kimlik Doğrulama

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Uçtan uca oturum açma akışını gerçekleştirmek için Firebase SDK'yı kullanarak web tabanlı genel OAuth Login'i uygulamanıza entegre ederek, kullanıcılarınızın GitHub hesaplarını kullanarak Firebase ile kimlik doğrulamasını sağlayabilirsiniz.

Sen başlamadan önce

GitHub hesaplarını kullanan kullanıcılarda oturum açmak için önce Firebase projeniz için oturum açma sağlayıcısı olarak GitHub'ı etkinleştirmeniz gerekir:

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

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

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // 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'yi kullanarak uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.

    (Alternatif) BoM kullanmadan Firebase kitaplık bağımlılıkları ekleyin

    Firebase Malzeme Listesini kullanmamayı seçerseniz, her bir Firebase kitaplık 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'yi kullanmanızı şiddetle tavsiye ettiğimizi unutmayın; bu, tüm sürümlerin uyumlu olmasını sağlar.

    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:21.1.0'
    }
    

    Kotlin+KTX

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

    Firebase Android BoM'yi kullanarak uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.

    (Alternatif) BoM kullanmadan Firebase kitaplık bağımlılıkları ekleyin

    Firebase Malzeme Listesini kullanmamayı seçerseniz, her bir Firebase kitaplık 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'yi kullanmanızı şiddetle tavsiye ettiğimizi unutmayın; bu, tüm sürümlerin uyumlu olmasını sağlar.

    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-ktx:21.1.0'
    }
    

  7. Uygulamanızın SHA-1 parmak izini henüz belirlemediyseniz, bunu Firebase konsolunun Ayarlar sayfasından yapın. Uygulamanızın SHA-1 parmak izini nasıl alacağınızla ilgili ayrıntılar için İstemcinizin Kimliğini Doğrulama bölümüne bakın.

Firebase SDK ile oturum açma akışını yönetin

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

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

  1. Oluşturucusunu github.com sağlayıcı kimliğiyle kullanarak bir OAuthProvider örneği oluşturun

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
    
  2. İsteğe bağlı : OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.

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

    GitHub'ın desteklediği parametreler için GitHub OAuth belgelerine bakın. Firebase için gerekli parametreleri setCustomParameters() ile iletemeyeceğinizi unutmayın. Bu parametreler client_id , response_type , redirect_uri , state , scope ve response_mode'dur .

  3. İsteğe bağlı : Kimlik doğrulama sağlayıcısından istemek istediğiniz temel profilin ötesinde ek OAuth 2.0 kapsamları belirtin. Uygulamanız GitHub API'lerinden özel kullanıcı verilerine erişim gerektiriyorsa GitHub geliştirici konsolundaki API İzinleri altında GitHub API'lerine erişmek için izinler istemeniz gerekir. İstenen OAuth kapsamları, uygulamanın API izinlerinde önceden yapılandırılmış olanlarla tam olarak eşleşmelidir.

    // 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ğrulaması yapın. Diğer FirebaseAuth işlemlerinden farklı olarak, bunun bir Özel Chrome Sekmesi açarak kullanıcı arayüzünüzün kontrolünü ele alacağını unutmayın. Sonuç olarak, işlem kullanıcı arayüzünü başlattığında hemen ayrılacakları için eklediğiniz OnSuccessListener ve OnFailureListener Activity'nize başvurmayın.

    Önce bir yanıt alıp almadığınızı kontrol etmelisiniz. Bu yöntemle oturum açmak, Aktivitenizi arka plana koyar; bu, oturum açma akışı sırasında sistem tarafından geri alınabileceği anlamına gelir. Böyle bir durumda kullanıcının tekrar denemesini engellemek için bir sonucun mevcut olup olmadığını kontrol etmelisiniz.

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

    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().
                }
              })
          .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 :

    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().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Başarılı bir şekilde tamamlandığında, sağlayıcıyla ilişkili OAuth erişim belirteci, döndürülen OAuthCredential nesnesinden alınabilir.

    OAuth erişim belirtecini kullanarak GitHub API'sini çağırabilirsiniz.

    Örneğin, temel profil bilgilerini almak için, Authorization başlığında erişim belirtecini ileterek REST API'yi çağırabilirsiniz:

  5. Yukarıdaki örnekler oturum açma akışlarına odaklanırken, ayrıca bir GitHub sağlayıcısını startActivityForLinkWithProvider kullanarak mevcut bir kullanıcıya bağlayabilirsiniz. Örneğin, birden çok sağlayıcıyı aynı kullanıcıya bağlayarak, ikisinden biriyle oturum açmalarına izin verebilirsiniz.

    // 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) {
                // GitHub 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().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. Aynı model, yakın zamanda oturum açmayı gerektiren hassas işlemler için yeni kimlik bilgilerini almak için kullanılabilen startActivityForReauthenticateWithProvider ile kullanılabilir.

    // 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ıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve oturum açtığı kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcısı bilgileri gibi kimlik bilgilerine 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 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 konusuna bakın.

  • Firebase Gerçek Zamanlı Veritabanınız ve Bulut Depolama Güvenlik Kurallarınızda , oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve bunu bir kullanıcının hangi verilere erişebileceğini 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 çok 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 arayın:

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()