Google Play Games Hizmetleri'ni kullanarak Unity'de kimlik doğrulama

Firebase ve Unity'de oluşturulan bir Android oyununda oyuncuların oturum açması için Google Play Games Hizmetleri'ni kullanabilirsiniz. Firebase ile Google Play Games Hizmetleri oturum açma özelliğini kullanmak için önce oyuncunun Google Play Games oturumunu açın ve bunu yaparken bir OAuth 2.0 kimlik doğrulama kodu isteyin. Ardından, kimlik doğrulama kodunu PlayGamesAuthProvider'ye iletin. Böylece, Firebase ile kimlik doğrulama yapmak için kullanabileceğiniz bir Firebase kimlik bilgisi oluşturulur.

Başlamadan önce

Unity projenizi oluşturma

  1. Firebase'i Unity projenize ekleme bölümünde açıklandığı gibi Firebase yapılandırma dosyasını ve Firebase Unity SDK'sını Unity projenize ekleyin. Android için talimatları uygulayın.

    FirebaseAuth.unitypackage dosyasını içe aktardığınızdan emin olun.

  2. Unity Editor'da Derleme Ayarları > Oynatıcı Ayarları > Diğer Ayarlar bölümünde oyununuzun Android paket adını ayarlayın.

  3. Ardından, Derleme Ayarları > Oynatıcı Ayarları > Yayınlama Ayarları bölümünde, Android paketinizi imzalamak için kullanılacak bir anahtar mağazası ve anahtar seçin veya oluşturun. Play Games oturum açma özelliğinin çalışması için APK'nızın imzalanmış olması gerekir. Bu şart yalnızca yayınlama için değil, oyununuzun geliştirilmesi sırasında da geçerlidir.

Firebase projenizi ayarlama

  1. Firebase konsolunda, Unity projenizi kaydettiğiniz Firebase projesine gidin.

  2. Unity'de ayarladığınız anahtarı kullanarak Firebase konsolunun Ayarlar sayfasından oyununuzun SHA-1 parmak izini ayarlayın.

    Anahtarınızın SHA-1 parmak izini keytool komutuyla alabilirsiniz:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    Alternatif olarak, gradle signingReport komutuyla imzalama sertifikanızın SHA karmasını da alabilirsiniz:

    gradlew signingReport

    APK'nız, geliştirme aşaması da dahil olmak üzere bu anahtarla imzalanmış olmalıdır.

  3. Oturum açma sağlayıcısı olarak Google Play Games'ü etkinleştirme:

    1. Firebase konsolunda Authentication bölümünü açın.

    2. Projenizin web sunucusu istemci kimliğini ve istemci gizli anahtarını oluşturup alın:

      1. Oturum açma yöntemi sekmesinde Google ile oturum açma sağlayıcısını etkinleştirin.

      2. Google oturum açma sağlayıcısından web sunucusu istemci kimliğini ve gizli anahtarını kopyalayın.

    3. Oturum açma yöntemi sekmesinde Play Games oturum açma sağlayıcısını etkinleştirin ve projenizin web sunucusu istemci kimliğini ve son adımda aldığınız istemci gizli anahtarını belirtin.

Play Games services'ü Firebase uygulama bilgilerinizle yapılandırma

  1. Google Play Console'da Google Play uygulamanızı açın veya oluşturun.

  2. Büyüme bölümünde Play Games services > Kurulum ve Yönetim > Yapılandırma'yı tıklayın.

  3. Evet, oyunumda zaten Google API'leri kullanılıyor'u tıklayın, listeden Firebase projenizi seçin ve Kullan'ı tıklayın.

  4. Play Games services yapılandırma sayfasında Kimlik Bilgisi Ekle'yi tıklayın.

    1. Oyun sunucusu türünü seçin.
    2. OAuth istemcisi alanında projenizin web istemci kimliğini seçin. Bu kimliğin, Play Games oturum açma özelliğini etkinleştirirken belirttiğiniz istemci kimliği olduğundan emin olun.
    3. Yaptığınız değişiklikleri kaydedin.
  5. Play Games services yapılandırma sayfasındayken Kimlik Bilgisi Ekle'yi tekrar tıklayın.

    1. Android türünü seçin.
    2. OAuth istemcisi alanında projenizin Android istemci kimliğini seçin. (Android istemci kimliğinizi görmüyorsanız Firebase konsolunda oyununuzun SHA-1 parmak izini ayarladığınızdan emin olun.)
    3. Yaptığınız değişiklikleri kaydedin.
  6. Etkinlikler, Başarıları ve Skor Tabloları sayfalarında, oyununuzla kullanmak istediğiniz Play Games kaynaklarını oluşturun (Hemen kullanmak istemediğiniz kaynakları yer tutucu giriş olarak ekleyebilirsiniz). Ardından, Etkinlikler, Başarılarım veya Puan tabloları sayfalarından herhangi birinde Kaynak al'ı tıklayın ve Android kaynak snippet'ini uygun bir yere kopyalayın. Google Play Games services eklentisini ayarlamak için snippet'e ihtiyacınız vardır.

    Kaynak snippet'i aşağıdaki örnek gibi görünür:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. Test kullanıcıları sayfasında, oyununuzu Play Store'de yayınlamadan önce oyununuzda oturum açması gereken kullanıcıların e-posta adreslerini ekleyin.

Play Games'de oturum açma özelliğini oyununuza entegre etme

  1. Unity için Play Games eklentisinin en yeni sürümünü indirip açın.

  2. Eklentinin Unity paketini Unity projenize aktarın. Unity paketini, sürüm arşivinin current-build dizininde bulabilirsiniz.

  3. Play Games eklentisini ayarlayın:

    1. Android Yapılandırması ekranını açmak için Pencere > Google Play Games > Kurulum > Android Kurulumu'nu tıklayın.
    2. Play Console'dan aldığınız Android kaynak snippet'ini Kaynak Tanımı alanına yapıştırın.
    3. Firebase konsolunda Play Games oturum açma özelliğini etkinleştirirken sağladığınız web sunucusu istemci kimliğinizi İstemci Kimliği alanına yapıştırın.
    4. Kurulum'u tıklayın.
  4. Oyununuzda, RequestServerAuthCode ayarının etkin olduğu bir Play Games istemcisi yapılandırın:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. Ardından, bir oyuncu Play Games ile oturum açmayı seçtiğinde Social.localUser.Authenticate() çağrısını yapın:

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Firebase ile kimlik doğrulama

Oyununuza Play Games oturum açma özelliğini ekledikten sonra Firebase ile kimlik doğrulamak için Play Games Hizmetleri'ndeki kimlik doğrulama kodunu kullanabilirsiniz.

  1. Oyuncu Play Games'i kullanarak başarıyla oturum açtıktan sonra, oturum açma devam ettirme işleyicisinde oyuncunun hesabı için bir kimlik doğrulama kodu alın:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Ardından, Play Games Hizmetleri'ndeki kimlik doğrulama kodunu bir Firebase kimlik bilgisiyle değiştirin ve oyuncunun kimliğini doğrulamak için Firebase kimlik bilgisini kullanın:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    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);
    });
    

Sonraki adımlar

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve Play Games kimliğine bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

Oyununuzda kullanıcının Firebase UID'sini Firebase.Auth.FirebaseUser nesnesinden alabilirsiniz:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string playerName = user.DisplayName;

  // 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.

Kullanıcının Play Games oyuncu bilgilerini almak veya Play Games hizmetlerine erişmek için Play Games eklentisi tarafından sağlanan API'leri kullanın.

Bir kullanıcının oturumunu kapatmak için SignOut() işlevini çağırın:

auth.SignOut();