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'sını kullanarak kullanıcılarınızın Apple kimliklerini kullanarak Firebase ile kimlik doğrulama yapmasını sağlayabilirsiniz.

Başlamadan önce

Apple kullanarak kullanıcıların oturumunu açmak için önce Apple'ın geliştirici sitesinde Apple ile Oturum Açma'yı yapılandırın, ardından Apple'ı Firebase projeniz için oturum açma sağlayıcısı olarak etkinleştirin.

Apple Developer Program'a katılın

Apple ile Oturum Açma, yalnızca Apple Geliştirici Programı üyeleri tarafından yapılandırılabilir.

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

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 devam etmeden önce iOS+ ve/veya Android kılavuzlarının "Apple ile Oturum Açmayı Yapılandırma" bölümünü inceleyin.

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ını boş bırakabilirsiniz.
    2. Android cihazlarda destek için:
      1. Firebase'i Android projenize ekleyin. Firebase konsolunda uygulamanızı kurarken uygulamanızın SHA-1 imzasını kaydettiğinizden emin olun.
      2. Firebase konsolunda Auth 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 bir önceki bölümde oluşturduğunuz özel anahtarı ve anahtar kimliğini belirtin.

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

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

Buna, doğrudan tanımlayıcı kişisel bilgileri anonimleştirilmiş bir Apple kimliğiyle ilişkilendirmeden önce gerekli tüm kullanıcı izinlerini almak da dahildir. Firebase Authentication'ı kullanırken aşağıdaki işlemleri yapabilirsiniz:

  • 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 kimlik bilgisini (Facebook, Google vb.) anonimleştirilmiş bir Apple kimliğine (veya tam tersi) bağlayın.

Yukarıdaki listede olası her duruma yer verilmemiştir. Uygulamanızın Apple'ın şartlarını 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şmesi'ne bakın.

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ısı ve jeton oluşturma işlemi için Unity'nin Apple Asset Storage ile Oturum Açma Paketi gibi bir üçüncü taraf eklentisi yükleyin. Firebase işlemlerinde kullanılmak üzere, oluşturulan rastgele tek seferlik rastgele dizeyi ham dize durumuna eşleştirmek için kodu değiştirmeniz gerekebilir (yani tek seferlik rastgele sayının SHA256 özet biçimi oluşturulmadan önce bir kopyasını depolayın).

  2. Firebase Kimlik Bilgisi oluşturmak ve Firebase'de oturum açmak için elde edilen jeton dizesini ve ham tek seferlik rastgele sayı 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ı kalıp, yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgileri almak amacıyla ReauthenticateAsync ile kullanılabilir. Daha fazla bilgi için Kullanıcıları Yönetme bölümüne bakın.

  4. Apple platformlarında Apple ile Oturum Açma ile bağlantı oluştururken, mevcut bir Firebase hesabının Apple hesabına zaten bağlandığını belirten bir hatayla karşılaşabilirsiniz. Bu gerçekleştiğinde standart Firebase.FirebaseException yerine bir Firebase.Auth.FirebaseAccountLinkException atılır. Bu durumda istisna, geçerli olduğu durumlarda Apple ile bağlantılı kullanıcının FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync üzerinden oturum açmak için kullanılabilecek UserInfo.UpdatedCredential özelliğini içerir. Güncellenen kimlik bilgisi, oturum açma işlemi için tek seferlik rastgele sayı içeren yeni Apple oturum açma jetonu oluşturma ihtiyacını atlatmaktadı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ışı gerçekleştirmek için Firebase SDK'sı ile uygulamanıza web tabanlı genel OAuth Girişi'ni entegre ederek kullanıcılarınızın kimliklerini Firebase ile doğrulayın.

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

  1. Apple'a 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ıdan istemek istediğiniz varsayılan kapsam dışında 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 parametresini ayarlayın. Desteklenen yerel ayarlar için Apple ile Oturum Açma 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, bu verileri kullanarak FederatedOAuthProvider oluşturun.

    // 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. Diğer FirebaseAuth işlemlerinin aksine bu işlem, kullanıcının kimlik bilgilerini girebileceği bir web görünümü açarak kullanıcı arayüzünüzü kontrol eder.

    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ı kalıp, yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgileri almak amacıyla 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, kullanıcıların Apple hesaplarını diğer verilere bağlamadan önce onlardan açık izin almanızı zorunlu kılar.

    Örneğin, bir Facebook hesabını mevcut Firebase hesabına bağlamak için kullanıcının Facebook'ta oturum açtığında aldığınız 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çma

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-posta adresini uygulamayla paylaşmamayı seçtiğinde Apple, bu kullanıcı için xyz@privaterelay.appleid.com biçiminde benzersiz bir e-posta adresi sağlar. Bu adresi uygulamanızla paylaşır. Ö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 yönlendirir.

Apple, görünen ad gibi kullanıcı bilgilerini yalnızca kullanıcı ilk kez oturum açtığında uygulamalarla paylaşır. Firebase, görünen adı genellikle bir kullanıcı Apple'da ilk kez oturum açtığında depolar. Bunu auth.CurrentUser.DisplayName ile alabilirsiniz. Ancak daha önce Firebase'i kullanmadan uygulamada bir kullanıcının oturumunu açmak 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 (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.