Catch up on everthing we announced at this year's Firebase Summit. Learn more

Android'de Yahoo Kullanarak Kimlik Doğrulama

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 Yahoo gibi OAuth sağlayıcılarını kullanarak Firebase ile kimlik doğrulamasını sağlayabilirsiniz.

Sen başlamadan önce

Yahoo hesaplarını kullanan kullanıcılarda oturum açmak için, önce Firebase projeniz için bir oturum açma sağlayıcısı olarak Yahoo'yu etkinleştirmelisiniz:

  1. Android projeye Firebase ekleyin .

  2. In Firebase konsoluna , Auth bölümünü açın.
  3. Yöntem sekmesinde İşaret Üzerine, Yahoo sağlayıcı sağlar.
  4. Sağlayıcı yapılandırmasına o sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Sırrı ekleyin:
    1. Bir Yahoo OAuth istemcisi kaydetmek için, Yahoo geliştirici belgeleri izleyin Yahoo ile bir web uygulaması kaydedilirken .

      : İki OpenID Bağlan API izinlerini seçtiğinizden emin olun profile ve email .

    2. Bu sağlayıcılar ile uygulamaları kaydederken, kayıt emin olun *.firebaseapp.com uygulamanız için yönlendirme alanı olarak projeniz için domain.
  5. Kaydet seçeneğini tıklayın.
  6. Henüz uygulamanızın SHA-1 parmak izini belirtilmemişse varsa, gelen bunu Ayarlar sayfasının Firebase konsolunun. Bakın Sizin Müşteri kimlik denetimi uygulamanızın SHA-1 parmak izini almak için ilgili ayrıntılar için.

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

Bir Android uygulaması oluşturuyorsanız, kullanıcılarınızın Yahoo hesaplarını kullanarak Firebase ile kimliğini 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. Sağlayıcı numarası yahoo.com ile Builder kullanarak bir OAuthProvider bir örneğini oluşturmak.

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

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

    Parametreler Yahoo desteklerin için bkz Yahoo OAuth belgelerine . Birlikte Firebase-gerekli parametreleri geçemediği Not setCustomParameters() . Bu parametreler client_id, redirect_uri, response_type, kapsam ve devlet vardır.

  3. İsteğe bağlı: Ek OAuth ötesinde 2.0 kapsamlarını belirtme profile ve email kimlik doğrulama sağlayıcısından talep istediğimi. Başvurunuz Yahoo API'larından özel kullanıcı verilerine erişim gerektiriyorsa, Yahoo geliştirici konsolunda API izinleriVarsayılanı Yahoo API'leri isteği izinleri gerekir. İstenen OAuth kapsamları, uygulamanın API izinlerinde önceden yapılandırılmış olanlarla tam olarak eşleşmelidir. Okuma, Örneğin / yazma erişimi Kullanıcı kişilerin istenir ve uygulamanın API izinleri önceden sdct-w yerine salt okunur OAuth kapsamı içinde geçirilmiş değil sdct-r . Aksi takdirde akış başarısız olur ve son kullanıcıya bir hata gösterilir.

    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 için bakınız Yahoo'nun kapsamları belgelerinde .

  4. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulaması yapın. Diğer FirebaseAuth işlemleri aksine, bu bir haşhaş ederek UI kontrolünü alacağı Not Özel Krom Tab . Sonuç olarak, işlem kullanıcı arayüzünü başlattığında hemen ayrılacakları için eklediğiniz OnSuccessListeners ve OnFailureListeners'daki 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 alır; 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 önlemek için bir sonucun mevcut olup olmadığını kontrol etmelisiniz.

    Bekleyen bir sonuç olup olmadığını kontrol etmek için, çağrı getPendingAuthResult :

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    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 be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // Yahoo OAuth ID token can be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .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.
    }
    

    Akışındaki işaretini başlatmak için çağrı 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 be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Den başarıyla tamamlayan sağlayıcısı ile bağlantılı belirteç OAuth erişim alınabilir OAuthCredential nesnesi geri döndü.

    OAuth erişim jetonu kullanarak, çağırabilir Yahoo API .

    Burada YAHOO_USER_UID ayrıştırılan edilebilir Yahoo kullanıcının ID firebaseAuth.getCurrentUser().getProviderData().get(0).getUid() alan veya dan authResult.getAdditionalUserInfo().getProfile() .

  5. Yukarıdaki örnekler odaklanırken oturum açma akışları, ayrıca kullanarak mevcut kullanıcıya bir Yahoo sağlayıcı bağlama yetkisi vardır startActivityForLinkWithProvider . Örneğin, birden çok sağlayıcıyı aynı kullanıcıya bağlayarak her ikisiyle de oturum açmalarını sağlayabilirsiniz.

    // 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) {
                // Yahoo credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
  6. Aynı desen ile kullanılabilir startActivityForReauthenticateWithProvider son girişi gerektiren hassas operasyonlar için taze kimlik bilgilerini almak için 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ının kimlik bilgileriyle (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcısı 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ığından bağımsız olarak projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

  • Senin uygulamalarda, gelen kullanıcının temel profil bilgileri alabilirsiniz FirebaseUser nesnesi. Bkz Kullanıcıları Yönetme .

  • Senin Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama yılında Güvenlik Kuralları , alabilirsiniz, kullanıcının benzersiz bir kullanıcı kimliği imzalı auth değişkeni ve hangi verilerin kullanıcı teneke erişimi kontrol etmek için kullanabilirsiniz.

Kullanıcıların birden çok kimlik doğrulama sağlayıcıları kullanarak uygulamada oturum izin verebilir mevcut bir kullanıcı hesabına auth sağlayıcı kimlik bilgilerini birbirine bağlayan.

Bir kullanıcı Oturumu kapatmak için çağrı signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()