Google ile Oturum Açma ve Unity'yi Kullanarak Kimlik Doğrula

Google ile Oturum Açma özelliğini uygulamanıza entegre ederek kullanıcılarınızın Google Hesaplarını kullanarak Firebase'de kimlik doğrulaması yapmasına izin verebilirsiniz.

Başlamadan önce

Unity projenizi oluşturma

Firebase Authentication kullanmaya başlamak için şunları yapmanız gerekir:

  • Unity projenizi kaydedin ve Firebase'i kullanacak şekilde yapılandırın.

    • Unity projeniz Firebase'i kullanıyorsa Firebase için zaten kayıtlı ve yapılandırılmış demektir.

    • Unity projeniz yoksa örnek uygulama indirebilirsiniz.

  • Firebase Unity SDK'sını (özellikle FirebaseAuth.unitypackage) Unity projenize ekleyin.

Firebase'i Unity projenize eklemek için hem Firebase konsolunda hem de açık Unity projenizde görevler gerçekleştirmeniz gerekir (örneğin, Firebase yapılandırma dosyalarını konsoldan indirip Unity projenize taşımanız gerekir).

Firebase projenizi ve kimlik bilgilerinizi ayarlama

  1. Android: Firebase konsolunda uygulamanızın SHA-1 parmak izini belirtin:

    1. Firebase konsolunda Ayarlar > Genel sekmesine gidin.
    2. Uygulamalarınız kartına gidin, Android uygulamanızı seçin ve SHA sertifikası parmak izleri alanına SHA-1 parmak izinizi ekleyin.

      Anahtar deponuzun SHA-1 parmak izini keytool kullanarak alabilirsiniz:

      keytool -keystore path-to-keystore.keystore -list -v
      

      Uygulamanızın SHA parmak izini alma hakkında daha fazla bilgi için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.

  2. Google ile Oturum Açma'yı etkinleştirme ve web istemci kimliğinizi kopyalama:

    1. Firebase konsolunda Güvenlik > Kimlik doğrulama'ya gidin.
    2. Sign-in method (Oturum açma yöntemi) sekmesinde Google oturum açma sağlayıcısını etkinleştirin.
    3. Web SDK yapılandırması bölümünü genişletin ve Web istemci kimliğinizi (ör. 123456-abc.apps.googleusercontent.com) kopyalayın. Bu, kimlik jetonlarınızın kitle (aud) talebini temsil eder ve hem Android hem de iOS için gereklidir.
    4. Kaydet'i tıklayın.
  3. Firebase yapılandırma dosyalarınızı güncelleyin ve iOS ters istemci kimliğinizi kopyalayın:

    1. Firebase konsolundan en yeni Firebase yapılandırma dosyalarını indirin (Android için google-services.json ve iOS için GoogleService-Info.plist) ve Unity projenizdeki eski kopyaları değiştirin. (Firebase'i Unity projenize ekleme başlıklı makaleyi inceleyin.)
    2. iOS: GoogleService-Info.plist dosyanızı açın ve REVERSED_CLIENT_ID anahtarının değerini (ör. com.googleusercontent.apps.12345-abc) kopyalayın. Bu değer, iOS yönlendirme URL şemasını yapılandırmak için gereklidir.

Google ile Oturum Açma eklentisini Unity projenize entegre etme

  1. Eklentiyi içe aktarma:

    1. Mevcut bir projeye entegrasyon yapıyorsanız devam etmeden önce projenizi yedekleyin ve eski Google ile Oturum Açma eklentilerini kaldırın.
    2. GoogleSignInNative.unitypackage dosyasını GitHub'dan indirin ve Unity projenize aktarın (Assets > Import Package > Custom Package). Tüm dosyaların seçildiğinden emin olun ve İçe aktar'ı tıklayın.
  2. Eklenti ayarlarını yapılandırma:

    1. Unity Editor'da Window > Google Sign-In Native > Settings'e (Pencere > Google Oturum Açma Yerel > Ayarlar) gidin.
    2. Web istemci kimliğinizi ilk alana yapıştırın.
    3. iOS Ters İstemci Kimliğinizi ikinci alana yapıştırın.
    4. Save Settings (Ayarları Kaydet) seçeneğini tıklayın.
  3. Yerel bağımlılıkları çözme:

    1. Assets > External Dependency Manager > Android Resolver > Force Resolve'a gidin.
    2. İşlemin başarılı olduğunu belirten mesajın gösterilmesini bekleyin. Bu işlem, yerel googleid ve androidx Kimlik Bilgisi Yöneticisi kitaplıklarını indirir.

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

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

Firebase ile kimlik doğrulama

  1. Sahnenizde GoogleSignInManager ayarlama:

    1. GoogleSignInManager adlı ilk sahnenizde boş bir GameObject oluşturun.
    2. GoogleSignInManager.cs komut dosyasını buna ekleyin.
    3. GoogleSignInNativeSettings öğesini (Assets/GoogleSignInNative/Resources içinde bulunur) komut dosyasındaki Sign In Settings alanına sürükleyin.
  2. Google ile Oturum Açma'yı tetikleyin ve kimlik jetonunu Firebase kimlik bilgisiyle değiştirin:

    GoogleSignInManager.OnSignInCompleted ve GoogleSignInManager.OnSignInFailed öğelerine abone olan, GoogleSignInManager.Instance.StartSignIn() ile oturum açmayı tetikleyen ve elde edilen Google kimlik jetonunu GoogleAuthProvider.GetCredential kullanarak Firebase kimlik bilgisiyle değiştiren bir denetleyici komut dosyası oluşturun:

    using Firebase.Auth;
    using Firebase.Extensions;
    using UnityEngine;
    
    public class MyAuthController : MonoBehaviour
    {
        private FirebaseAuth auth;
    
        private void Awake()
        {
            auth = FirebaseAuth.DefaultInstance;
        }
    
        private void OnEnable()
        {
            GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed += HandleSignInFailure;
        }
    
        private void OnDisable()
        {
            GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed -= HandleSignInFailure;
        }
    
        public void OnSignInButtonClick()
        {
            GoogleSignInManager.Instance.StartSignIn();
        }
    
        private void HandleSignInSuccess(string idToken)
        {
            Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase...");
    
            Credential credential = GoogleAuthProvider.GetCredential(idToken, null);
            auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => {
                if (task.IsCanceled)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
                    return;
                }
                if (task.IsFaulted)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
                    return;
                }
    
                AuthResult result = task.Result;
                Debug.LogFormat("User signed in successfully: {0} ({1})",
                    result.User.DisplayName, result.User.UserId);
            });
        }
    
        private void HandleSignInFailure(string error)
        {
            Debug.LogError($"[Auth] Google Sign-In failed: {error}");
        }
    }
    

Uygulamanızı geliştirin

Android

  • Oyuncu Ayarları'ndaki Paket Adı'nın Firebase ve Google Cloud OAuth kimlik bilgilerinizle tam olarak eşleştiğinden emin olun.
  • Minimum API düzeyinizin 34 veya daha yüksek bir değere ayarlandığından emin olun.
  • Build and Run'ı (Derle ve Çalıştır) tıklayın.

iOS

  • Xcode projesi oluşturmak için projenizi Unity'de derleyin, ardından oluşturulan .xcworkspace dosyasını açın.
  • Xcode'da Signing & Capabilities (İmzalama ve Özellikler) sekmesine gidin ve Development Team'inizi (Geliştirme Ekibi) seçin.
  • Eklenti, özel URL şemasını (REVERSED_CLIENT_ID) Xcode projenize otomatik olarak ekler. Fiziksel bir cihazda derleme ve çalıştırma

Sonraki adımlar

Kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açarken kullandığı 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:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların birden fazla kimlik doğrulama sağlayıcı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.

Bir kullanıcının oturumunu kapatmak için SignOut() yöntemini çağırın:

auth.SignOut();