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

Firebase ve Unity'de geliştirilmiş bir Android oyununda oyuncuların oturum açmak için Google Play Games hizmetlerini kullanabilirsiniz. Google Play Games hizmetlerinde Firebase ile oturum açmak için öncelikle Google Play Games'de oturum açın ve bu işlem sırasında OAuth 2.0 yetkilendirme kodu isteyin. Ardından, Firebase kimlik bilgisi oluşturmak için yetkilendirme kodunu PlayGamesAuthProvider adresine iletin. Bu kimliği Firebase ile kimlik doğrulamak için kullanabilirsiniz.

Başlamadan önce

Unity projenizi oluşturun

  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, Build Settings (Derleme Ayarları) > Player Settings (Oyuncu Ayarları) > Other Settings (Diğer Ayarlar) bölümünden oyununuzun Android paket adını ayarlayın.

  3. Sonra Build Settings > Player Settings > Publishing Settings (Derleme Ayarları > Oynatıcı Ayarları > Yayınlama Ayarları) bölümünde, Android paketinizi imzalamak için kullanılacak bir anahtar deposu ve anahtar seçin veya oluşturun. Play Games'te oturum açma özelliğinin çalışması için APK'nızın imzalanması gerekir. Bu zorunluluk yalnızca yayınlama için değil, oyununuzun geliştirilmesi sırasında da geçerlidir.

Firebase projenizi oluşturun

  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.

    keytool komutunu kullanarak anahtarınızın SHA-1 dijital parmak izini alabilirsiniz:

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

    Alternatif olarak gradle signingReport komutunu kullanarak imza sertifikanızın SHA karmasını alabilirsiniz:

    gradlew signingReport

    APK'nız, geliştirme sırasında da dahil olmak üzere bu anahtarla imzalanmalıdır.

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

    1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.

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

      1. Oturum açma yöntemi sekmesinde Google 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 son adımda aldığınız web sunucusu istemci kimliği ile istemci gizli anahtarını belirtin.

Firebase uygulama bilgilerinizle Play Games hizmetlerini yapılandırma

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

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

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

  4. Play Games hizmetleri 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 istemcisi kimliğini seçin. Bunun, Play Games oturum açma özelliğini etkinleştirirken belirttiğiniz istemci kimliğiyle aynı olduğundan emin olun.
    3. Yaptığınız değişiklikleri kaydedin.
  5. Yine Play Games hizmetleri yapılandırma sayfasında 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 (hiçbirini hemen kullanmak istemiyorsanız bir yer tutucu girişi oluşturabilirsiniz). Ardından, Etkinlikler, Başarılar veya Skor tabloları sayfalarından herhangi birinde, Kaynakları al'ı tıklayın ve Android kaynakları snippet'ini uygun bir yere kopyalayın. Google Play Games hizmetleri eklentisini kurmak için snippet'e ihtiyacınız olacaktır.

    Kaynak snippet'i aşağıdaki örneğe benzer:

    <?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'da yayınlamadan önce oyununuzda oturum açabilmesi gereken tüm kullanıcıların e-posta adreslerini ekleyin.

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

  1. Unity için Play Games eklentisinin son sürümünü indirin ve dosyayı çıkarı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 kaynakları snippet'ini Kaynak Tanımı alanına yapıştırın.
    3. Firebase konsolunda Play Games oturum açma özelliğini etkinleştirdiğinizde 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 istemcisini 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() numaralı telefonu arayın:

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

Firebase ile kimlik doğrulama

Oyununuza Play Games oturum açma bilgilerini ekledikten sonra Firebase ile kimlik doğrulamak için Play Games hizmetlerindeki yetkilendirme kodunu kullanabilirsiniz.

  1. Oyuncu, Play Games'i kullanarak başarıyla oturum açtıktan sonra, oturum açma devamlılığı işleyicisinden oyuncunun hesabı için bir yetkilendirme kodu alın:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Ardından, Play Games hizmetlerindeki yetkilendirme kodunu Firebase kimlik bilgisi ile değiştirin ve Firebase kimlik bilgisini kullanarak oyuncunun kimliğini doğrulayı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 kullanıcının 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çan kullanıcının auth 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.

Kullanıcının Play Games oynatıcı 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() numaralı telefonu arayın:

auth.SignOut();