Apple ve Unity Kullanarak Kimlik Doğrulama

Kullanıcılarınızın Apple Kimliklerini kullanarak Firebase ile kimlik doğrulamalarını aşağıdaki şekilde sağlayabilirsiniz: uçtan uca OAuth 2.0 oturum açma akışını gerçekleştirmek için Firebase SDK'sını kullanın.

Başlamadan önce

Apple kullanarak kullanıcıların oturumunu açmak için önce Apple ile oturum açma özelliğini yapılandırın Apple'ın geliştirici sitesinde Apple'ı oturum açma sağlayıcısı olarak etkinleştirin Firebase projesi.

Apple Developer Program'a katılın

Apple ile Oturum Açma özelliği, yalnızca Apple Developer'ın üyeleri tarafından yapılandırılabilir Program'ı tıklayın.

Apple ile oturum açma özelliğini yapılandırın

Apple ile Oturum Açma, Firebase projenizde etkinleştirilmiş ve doğru şekilde yapılandırılmış olmalıdır. Apple Developer yapılandırması, Android ve Apple platformlarında farklılık gösterir. Lütfen "Apple ile Oturum Açma'yı yapılandırma" adımını uygulayın. iOS+ ve/veya önceki Android kılavuzları devam ediyor.

Apple'ı oturum açma sağlayıcısı olarak etkinleştir

  1. Firebase konsolunda Auth bölümünü açın. Oturum açma yöntemi sekmesinde, Apple sağlayıcısını etkinleştirin.
  2. Apple Oturum Açma sağlayıcı ayarlarını yapılandırın:
    1. Uygulamanızı yalnızca Apple platformlarına dağıtıyorsanız Hizmet Kimliği, Apple Ekip Kimliği, özel anahtar ve anahtar kimliği alanları boş.
    2. Android cihazlarda destek için:
      1. Firebase'i Android projenize ekleyin. uygulamanızı Firebase konsolu.
      2. Firebase konsolunda Auth bölümünü açın. Sign in method (Oturum açma yöntemi) sekmesinden Apple sağlayıcısını etkinleştirin. Belirtin: Önceki bölümde oluşturduğunuz hizmet kimliği. Ayrıca, OAuth kodunda akış yapılandırma bölümünde Apple Ekip Kimliğinizi ve özel anahtarı belirtin ve anahtar kimliğini kullanabilirsiniz.

Apple'ın anonimleştirilmiş veri şartlarına uyma

Apple ile Oturum Açma, kullanıcılara verilerini anonimleştirme seçeneği sunar. oturum açarken kullandıkları e-posta adresleri de dahil. Bu seçeneği belirleyen kullanıcılar privaterelay.appleid.com alan adına sahip e-posta adresleri var. Zaman Uygulamanızda Apple ile Oturum Açma özelliğini kullanıyorsanız geçerli tüm bu anonimleştirilmiş Apple ile ilgili geliştirici politikaları veya Apple'ın şartları Kimlikler.

Buna, hesabınızı kullanmadan önce gerekli kullanıcı rızasının alınması da dahildir. doğrudan tanımlayıcı kişisel bilgileri anonimleştirilmiş bir Apple ile ilişkilendirme Kimlik. Firebase Authentication kullanılırken şunlar dahil olabilir: işlemler:

  • Bir e-posta adresini anonimleştirilmiş Apple kimliğine (veya tam tersi) bağlayın.
  • Telefon numarasını anonimleştirilmiş bir Apple kimliğine (veya tam tersi) bağlama
  • Anonim olmayan bir sosyal kimliği (ör. Facebook, Google) veya tam tersi de geçerlidir.

Yukarıdaki listede olası her duruma yer verilmemiştir. Apple Developer Program'ı inceleyin Geliştirici hesabınızın Üyelik bölümündeki Lisans Sözleşmesi'ni Uygulamanızın Apple'ın gereksinimlerini karşıladığından emin olun.

Firebase.Auth.FirebaseAuth sınıfına erişme

FirebaseAuth sınıfı, tüm API çağrılarına yönelik ağ geçididir. FirebaseAuth.DefaultInstance üzerinden erişilebilir.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

Apple ile Oturum Açma işlemi, Apple ve Android platformlarında değişiklik gösterir.

Apple platformlarında

  1. Apple oturum açma tek seferlik rastgele sayı ve jetonunu işlemek için üçüncü taraf eklentisi yükleyin Unity'nin Apple Asset Storage ile Oturum Açma işlevi gibi Paket. Oluşturulan rastgele tek seferlik rastgele sayı dizesini yüklemek için kodu Firebase işlemlerinde kullanılmak üzere ham dize durumu (yani tek seferlik rastgele sayısının SHA256 özet biçimi oluşturulmadan önce özetlenmelidir.

  2. Firebase oluşturmak için elde edilen jeton dizesini ve ham tek seferlik rastgele sayı kullanın Kimlik bilgisini doğrulayın ve Firebase'de oturum açın.

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

  3. Aynı desen ReauthenticateAsync ile de kullanılabilir. gereken hassas işlemler için yeni kimlik bilgileri almak üzere kullanılır. son giriş. Daha fazla bilgi için bkz. Kullanıcıları Yönetme

  4. Apple platformlarında Apple ile Oturum Açma özelliğiyle bağlantı oluştururken, Mevcut Firebase hesabı, Apple hesabına zaten bağlanmış. Zaman bu gerçekleştiğinde bir Firebase.Auth.FirebaseAccountLinkException atılır var.Firebase.FirebaseException Bu durumda istisna bir UserInfo.UpdatedCredential özelliği içeriyor ve geçerliyse Apple ile bağlantılı kullanıcıyı FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync. Güncellenen kimlik bilgisi, yeni Apple oturum açma jetonu oluşturma ihtiyacını atlatıyor tek seferlik rastgele sayılarla değiştirin.

    auth.CurrentUser.LinkWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompletedSuccessfully) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( authResultTask => {
                      // Handle Auth result.
                    });
                } else {
                  Debug.Log("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });

Android'de

Android'de, web tabanlı entegrasyon sayesinde Firebase ile kullanıcılarınızın kimliğini doğrulayın Firebase SDK'sını kullanarak genel OAuth'a giriş yapın. oturum açma akışını sonlandırın.

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

  1. Şununla yapılandırılmış bir FederatedOAuthProviderData örneği oluşturun: Apple için uygun sağlayıcı kimliğini girin.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. İsteğe bağlı: Varsayılan dışında kalan OAuth 2.0 kapsamlarını belirtin kimlik doğrulama sağlayıcısından istekte bulunmak istiyorum.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. İsteğe bağlı: Apple'ın oturum açma ekranını bir dilde görüntülemek istiyorsanız İngilizce dışında bir seçenek varsa locale parametresini ayarlayın. Bkz. Apple belgeleriyle oturum açma bakın.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. Sağlayıcı verileriniz yapılandırıldıktan sonra, verilerinizi kullanarak FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Auth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Unutmayın, diğer FirebaseAuth işlemleri için, bu işlem, Kullanıcının kimlik bilgilerini girebileceği bir web görünümü sunar.

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

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. Aynı desen ReauthenticateWithProvider ile de kullanılabilir. gereken hassas işlemler için yeni kimlik bilgileri almak üzere kullanılır. son giriş.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. Farklı kimlik sağlayıcıları bağlamak için LinkWithCredentialAsync() kullanabilirsiniz. .

    Apple, uygulamanızı kullanmadan önce kullanıcılardan açık izin almanızı zorunlu kılar. Apple hesaplarını başka verilere bağlama.

    Örneğin, bir Facebook hesabını mevcut Firebase hesabına bağlamak için kullanıcının Facebook'ta oturum açmasını sağlayarak aldığınız erişim jetonu:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.AuthResult result = task.Result;
          Firebase.Auth.FirebaseUser user = result.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

Apple Notes ile oturum açma

Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine, Apple fotoğraf URL'si.

Ayrıca kullanıcı, e-postalarını uygulamayla paylaşmamayı seçtiğinde Apple, söz konusu kullanıcı için benzersiz bir e-posta adresi ( xyz@privaterelay.appleid.com) çıkar ve bunları uygulamanızla paylaşır. Şu durumda: özel e-posta geçiş hizmetini yapılandırdıktan sonra, Apple, kullanıcının gerçek e-posta adresine anonimleştirilmiş adres ekleme.

Apple yalnızca görünen ad gibi kullanıcı bilgilerini uygulamalarla paylaşır. Kullanıcı ilk kez oturum açtığında. Genellikle Firebase, görünen adı kullanıcı Apple ile ilk kez oturum açtığında auth.CurrentUser.DisplayName Ancak daha önce Apple'ı kullanarak uygulamada bir kullanıcının Firebase kullandığında, Apple, kullanıcının görünen adını Firebase'e sağlamaz.

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ı 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 kullanıcıyı tanımlamak için kullanılabilir.

Uygulamalarınızda, kullanıcının temel profil bilgilerini Firebase.Auth.FirebaseUser nesnesinden alabilirsiniz. Kullanıcıları Yönetme başlıklı makaleye göz atın.

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