Unity ile Google Play Instant'ı kullanma

Unity için Google Play Instant eklentisi, Unity projenizi oyununuzun anında uygulama sürümünü oluşturacak şekilde yapılandırır. Bu kılavuzda, bu eklentinin nasıl yükleneceği ve kullanılacağı açıklanmaktadır.

Eklentiyi indirin ve içe aktarın

Eklenti, Unity için Google Play Eklentileri'nin bir parçasıdır. Eklentiyi içe aktarmak için şu adımları uygulayın:

  1. Unity sürümleri için Google Play Eklentileri'nden en son sürümü indirin.
  2. Unity IDE menü seçeneğini Öğeler > Paketi içe aktar > Özel Paket'i seçip tüm öğeleri içe aktararak .unitypackage dosyasını içe aktarın.

Unity Editor özellikleri

Unity'de Google > Play Instant alt menüsünü eklemek için eklentiyi içe aktarın. Bu alt menüde aşağıdaki seçenekler sunulur.

Derleme Ayarları

Yüklü ve Anında geliştirme modları arasında geçiş yapmayı sağlayan bir pencere açar. Anında Arama'ya geçildiğinde aşağıdaki değişiklikler gerçekleştirilir:

  • #if PLAY_INSTANT ve #endif ile komut dosyası yazmak için kullanılabilecek PLAY_INSTANT adında bir Komut Dosyası Tanımlama Sembolü oluşturur.
  • android:targetSandboxVersion gibi gerekli değişiklikler için AndroidManifest.xml güncellemelerini yönetir.

Oynatıcı Ayarları

Şekil 1'de gösterilen Oynatıcı Ayarları iletişim kutusu, Google Play Instant için desteği optimize etmenize, daha uyumlu grafik API'lerine göre geliştirmenize ve APK'nızın boyutunu küçültmenize yardımcı olacak öneriler görüntüler.

Spesifik öneriler arasında yalnızca OpenGL ES 2.0 kullanılması ve Çoklu İş Parçacıklı Oluşturmanın devre dışı bırakılması bulunur.
Şekil 1. Oynatıcı Ayarları iletişim kutusu

Bu Oynatıcı Ayarları Zorunlu ve Önerilen olarak ikiye ayrılır. Bir ayara karşılık gelen bir Güncelle düğmesi varsa ayarı tercih edilen değerle değiştirmek için bu düğmeyi tıklayın.

APK boyutunu daha da küçültmek için Unity Paket Yöneticisi'ni açın ve kullanılmayan paketleri kaldırın.

Hızlı Dağıtım

Hızlı Dağıtım, bazı öğeleri AssetBundle içinde paketleyerek Unity tabanlı hazır uygulamaların boyutunu küçültebilir. Hızlı Dağıtım kullanılırken Unity oyun motoru ve yükleme ekranı, bir hazır uygulama APK'sına paketlenir ve hazır uygulama başladıktan sonra bir sunucudan AssetBundle alır.

Destek yükleme iş akışları

Birçok hazır uygulamanın amacı, kullanıcılara tam sürümü yüklemeden önce uygulamayı deneme fırsatı vermektir. Unity için Google Play Instant eklentisi, Play Store yükleme iletişim kutusunu görüntülemek ve durumu anında uygulamadan yüklü uygulamaya aktarmak için API'ler sağlar.

Yükleme istemi göster

Yükle düğmesi olan bir hazır uygulama, yükleme düğmesi tıklama işleyiciden şunu çağırarak bir Play Store yükleme iletişim kutusu görüntüleyebilir:

Google.Play.Instant.InstallLauncher.ShowInstallPrompt();

ShowInstallPrompt() yöntemi, aşağıdakilerden birine veya daha fazlasına izin veren bir aşırı yük içerir:

  • Kullanıcının yükleme işlemini iptal edip etmediği belirleniyor. Hazır uygulamanın ana etkinliğinde onActivityResult() öğesini geçersiz kılın ve belirtilen requestCode öğesinde RESULT_CANCELED olup olmadığını kontrol edin.
  • referrer parametresiyle bir yükleme yönlendiren dizesi iletin.
  • Mevcut oyun oturumuyla ilgili durum PutPostInstallIntentStringExtra() üzerinden aktarılıyor.

Bunlar aşağıdaki örnekte gösterilmiştir:

using Google.Play.Instant;
...
const int requestCode = 123;
var sessionInfo = /* Object serialized as a string representing player's current location, etc. */;
using (var activity = UnityPlayerHelper.GetCurrentActivity())
using (var postInstallIntent = InstallLauncher.CreatePostInstallIntent(activity))
{
    InstallLauncher.PutPostInstallIntentStringExtra(postInstallIntent, "sessionInfo", sessionInfo);
    InstallLauncher.ShowInstallPrompt(activity, requestCode, postInstallIntent, "test-referrer");
}

Kullanıcı uygulama yüklemeyi tamamlarsa Play Store, sağlanan postInstallIntent kodunu kullanarak uygulamayı yeniden başlatır. Yüklü uygulama, postInstallIntent içinde ayarlanan bir değeri aşağıdakileri kullanarak alabilir:

var sessionInfo = InstallLauncher.GetPostInstallIntentStringExtra("sessionInfo");

Notes:

  • Kullanıcı uygulamayı yükler ancak yükleme sonrası başlatmayı iptal ederse postInstallIntent içeriğinde yer alan ekstralar, yüklü uygulamaya erişemeyebilir. Amaç ekstralarını iletmek, etkin oturum durumunu korumak için kalıcı durumu korumaktan daha uygundur. İkincisi için Cookie API'ye bakın.
  • Herkes, yüklü uygulamayı başlatmak için ek alanlar içeren bir intent oluşturabilir. Bu nedenle, yük değerli bir şey sağlıyorsa yükü yalnızca bir kez kullanılabilecek şekilde tasarlayın, kriptografik olarak imzalayın ve bir sunucuda imzayı doğrulayın.

Cookie API, bir çerezi (ör. oynatıcı kimliği veya seviye tamamlama verileri) hazır uygulamadan karşılık gelen yüklü uygulamaya geçirmek için yöntemler sağlar. postInstallIntent ekstralarından farklı olarak, kullanıcı yüklü uygulamayı hemen başlatmasa bile çerez durumu kullanılabilir. Örneğin, bir hazır uygulama yükleme düğmesi tıklama işleyicisinden aşağıdaki kodu çağırabilir:

using Google.Play.Instant;
...
var playerInfo = /* Object serialized as a string representing game levels completed, etc. */;
var cookieBytes = System.Text.Encoding.UTF8.GetBytes(playerInfo);
try
{
    var maxCookieSize = CookieApi.GetInstantAppCookieMaxSize();
    if (cookieBytes.Length > maxCookieSize)
    {
        UnityEngine.Debug.LogErrorFormat("Cookie length {0} exceeds limit {1}.", cookieBytes.Length, maxCookieSize);
    }
    else if (CookieApi.SetInstantAppCookie(cookieBytes))
    {
        UnityEngine.Debug.Log("Successfully set cookie. Now display the app install dialog...");
        InstallLauncher.ShowInstallPrompt();
    }
    else
    {
        UnityEngine.Debug.LogError("Failed to set cookie.");
    }
}
catch (CookieApi.InstantAppCookieException ex)
{
    UnityEngine.Debug.LogErrorFormat("Failed to set cookie: {0}", ex);
}

Kullanıcı uygulamayı yüklemeyi tamamlarsa, yüklenen uygulama aşağıdaki kodu kullanarak çerez verilerini alabilir:

var cookieBytes = CookieApi.GetInstantAppCookie();
var playerInfoString = System.Text.Encoding.UTF8.GetString(cookieBytes);
if (!string.IsNullOrEmpty(playerInfoString))
{
    // Initialize game state based on the cookie, e.g. skip tutorial level completed in instant app.
}