Apple ve Unity Kullanarak Kimlik Doğrulama

Uçtan uca OAuth 2.0 oturum açma akışını gerçekleştirmek için Firebase SDK'yı kullanarak kullanıcılarınızın Apple Kimliklerini kullanarak Firebase ile kimlik doğrulaması yapmasına izin verebilirsiniz.

Sen başlamadan önce

Apple kullanarak kullanıcıların oturum açmasını sağlamak için önce Apple'ın geliştirici sitesinde Apple ile Giriş Yap'ı yapılandırın, ardından Apple'ı Firebase projeniz için bir oturum açma sağlayıcısı olarak etkinleştirin.

Apple Geliştirici Programına Katılın

Apple ile Giriş Yap, yalnızca Apple Developer Program üyeleri tarafından yapılandırılabilir.

Apple ile Oturum Açmayı Yapılandırın

Apple Sign In, Firebase projenizde etkinleştirilmeli ve uygun şekilde yapılandırılmalıdır. Apple Geliştirici yapılandırması, Android ve Apple platformlarına göre değişir. Devam etmeden önce lütfen iOS+ ve/veya Android kılavuzlarının "Apple ile Oturum Açmayı Yapılandırın" bölümünü takip edin.

Oturum açma sağlayıcısı olarak Apple'ı etkinleştirin

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın. Oturum açma yöntemi sekmesinde, Apple sağlayıcısını etkinleştirin.
  2. Apple Sign In sağlayıcı ayarlarını yapılandırın:
    1. Uygulamanızı yalnızca Apple platformlarında dağıtıyorsanız Hizmet Kimliği, Apple Ekip Kimliği, özel anahtar ve anahtar kimliği alanlarını boş bırakabilirsiniz.
    2. Android cihazlarda destek için:
      1. Firebase'i Android projenize ekleyin . Uygulamanızı Firebase konsolunda ayarlarken uygulamanızın SHA-1 imzasını kaydettiğinizden emin olun.
      2. Firebase konsolunda Kimlik Doğrulama bölümünü açın. Oturum açma yöntemi sekmesinde, Apple sağlayıcısını etkinleştirin. Önceki bölümde oluşturduğunuz Hizmet Kimliğini belirtin. Ayrıca, OAuth kod akışı yapılandırması bölümünde, Apple Ekip Kimliğinizi ve önceki bölümde oluşturduğunuz özel anahtarı ve anahtar kimliğini belirtin.

Apple anonimleştirilmiş veri gereksinimlerine uyun

Apple ile Giriş Yap, kullanıcılara oturum açarken e-posta adresleri dahil olmak üzere verilerini anonimleştirme seçeneği sunar. Bu seçeneği tercih eden kullanıcıların e-posta adresleri privaterelay.appleid.com etki alanına sahiptir. Uygulamanızda Apple ile Giriş Yap'ı kullandığınızda, bu anonimleştirilmiş Apple Kimlikleri ile ilgili Apple'ın geçerli tüm geliştirici politikalarına veya koşullarına uymalısınız.

Bu, doğrudan tanımlayıcı herhangi bir kişisel bilgiyi anonimleştirilmiş bir Apple Kimliği ile ilişkilendirmeden önce gerekli tüm kullanıcı onayını almayı içerir. Firebase Authentication kullanılırken bu, aşağıdaki eylemleri içerebilir:

  • Bir e-posta adresini anonimleştirilmiş bir Apple kimliğine bağlayın veya tam tersini yapın.
  • Bir telefon numarasını anonimleştirilmiş bir Apple kimliğine bağlama veya tam tersi
  • Anonim olmayan bir sosyal kimlik bilgisini (Facebook, Google vb.) anonimleştirilmiş bir Apple Kimliğine bağlayın veya tam tersini yapın.

Yukarıdaki liste ayrıntılı değildir. Uygulamanızın Apple gereksinimlerini karşıladığından emin olmak için geliştirici hesabınızın Üyelik bölümündeki Apple Geliştirici Programı Lisans Sözleşmesine bakın.

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

FirebaseAuth sınıfı, tüm API çağrıları için ağ geçididir. FirebaseAuth.DefaultInstance aracılığıyla erişilebilir.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

Apple ile Oturum Açma işlemi, Apple ve Android platformlarına göre değişir.

Apple platformlarında

  1. Unity'nin Apple Asset Storage Paketi ile Giriş Yap gibi, Apple oturum açma ve belirteç oluşturma işlemini işlemek için üçüncü taraf bir eklenti yükleyin. Oluşturulan rasgele nonce dizesini Firebase işlemlerinde kullanmak üzere ham dize durumuna getirmek için kodu değiştirmeniz gerekebilir (yani, nonce'nin SHA256 özet formu oluşturulmadan önce bunun bir kopyasını saklayın).

  2. Bir Firebase Kimlik Bilgisi oluşturmak ve Firebase'de oturum açmak için elde edilen belirteç dizesini ve ham nonce'u kullanı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ı model, yakın zamanda oturum açmayı gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilen ReauthenticateAsync ile kullanılabilir. Daha fazla bilgi için bkz. Kullanıcıları Yönetme .

  4. Apple platformlarında Apple Sign In ile bağlantı kurarken, mevcut bir Firebase hesabının Apple hesabına zaten bağlanmış olduğuna dair bir hatayla karşılaşabilirsiniz. Bu meydana geldiğinde, standart Firebase.FirebaseException yerine bir Firebase.Auth.FirebaseAccountLinkException oluşturulur. Bu durumda istisna, geçerliyse, FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync aracılığıyla Apple bağlantılı kullanıcıda oturum açmak için kullanılabilecek bir UserInfo.UpdatedCredential özelliği içerir. Güncellenen kimlik bilgisi, oturum açma işlemi için nonce ile yeni Apple Oturum Açma belirteci oluşturma gereksinimini ortadan kaldırır.

    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, 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 Firebase ile kullanıcılarınızın kimliğini doğrulayın.

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

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

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz varsayılanın ötesinde ek OAuth 2.0 kapsamları belirtin.

    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ı İngilizce dışında bir dilde görüntülemek istiyorsanız locale parametreyi ayarlayın. Desteklenen yerel ayarlar için Apple ile Giriş Yap belgelerine 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, bunu bir FederatedOAuthProvider oluşturmak için kullanın.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Kimlik Doğrulama sağlayıcısı nesnesini kullanarak Firebase ile kimlik doğrulaması yapın. Diğer FirebaseAuth işlemlerinden farklı olarak, bu işlemin, kullanıcının kimlik bilgilerini girebileceği bir web görünümü açarak kullanıcı arabiriminizin kontrolünü ele geçireceğini unutmayın.

    Oturum açma akışını başlatmak için signInWithProvider öğesini 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ı model, yakın zamanda oturum açmayı gerektiren hassas işlemler için yeni kimlik bilgilerini almak için kullanılabilen ReauthenticateWithProvider ile kullanılabilir.

    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. Ayrıca, farklı kimlik sağlayıcıları mevcut hesaplara bağlamak için LinkWithCredentialAsync() kullanabilirsiniz.

    Apple hesaplarını başka verilere bağlamadan önce Apple'ın kullanıcılardan açık onay almanızı gerektirdiğini unutmayın.

    Örneğin, bir Facebook hesabını mevcut Firebase hesabına bağlamak için, kullanıcıyı Facebook'ta oturum açarken elde ettiğiniz erişim jetonunu kullanın:

    // 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çın

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

Ayrıca, kullanıcı e-postasını uygulamayla paylaşmamayı seçtiğinde, Apple söz konusu kullanıcı için uygulamanızla paylaştığı benzersiz bir e-posta adresi ( xyz@privaterelay.appleid.com biçiminde) sağlar. Özel e-posta geçiş hizmetini yapılandırdıysanız Apple, anonimleştirilmiş adrese gönderilen e-postaları kullanıcının gerçek e-posta adresine iletir.

Apple, görünen ad gibi kullanıcı bilgilerini yalnızca bir kullanıcı ilk kez oturum açtığında uygulamalarla paylaşır. Genellikle Firebase, bir kullanıcı Apple'da ilk oturum açtığında görünen adı depolar ve bunu auth.CurrentUser.DisplayName ile alabilirsiniz. Ancak, daha önce bir kullanıcının Firebase kullanmadan uygulamada oturum açması için Apple'ı kullandıysanız, 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 (yani, kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak saklanı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 Firebase.Auth.FirebaseUser nesnesinden alabilirsiniz. Bkz . Kullanıcıları Yönetin .

Firebase Gerçek Zamanlı Veritabanı 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.