Unity ile Google Play Instant'ı kullanma

Uyarı: Google Play Instant artık kullanılamayacak. Aralık 2025'ten itibaren, Hazır Uygulamalar Google Play üzerinden yayınlanamayacak ve tüm Google Play Hizmetleri Instant API'leri artık çalışmayacak. Kullanıcılara artık Play tarafından herhangi bir mekanizma kullanılarak Anında Uygulamalar sunulmayacak.

Bu değişikliği, geliştiricilerden gelen geri bildirimler ve Google Play Anında'nın kullanıma sunulmasından bu yana ekosistemi iyileştirmek için yaptığımız sürekli yatırımlar doğrultusunda yapıyoruz.

Kullanıcı sayısını artırmaya yönelik optimizasyona devam etmek için geliştiricilerin, kullanıcıları normal uygulamalarına veya oyunlarına yönlendirmelerini öneririz. Geliştiriciler, derin bağlantılar kullanarak kullanıcıları uygun durumlarda belirli yolculuklara veya özelliklere yönlendirebilir.

Unity için Google Play Instant eklentisi, Unity projenizi oyununuzun hazır 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 indirip içe aktarma

Eklenti, Unity için Google Play eklentilerinin bir parçasıdır. Eklentiyi içe aktarmak için aşağıdaki adımları uygulayın:

  1. En son sürümü Unity'ye özel Google Play eklentileri sürümlerinden indirin.
  2. Unity IDE menü seçeneği Öğeler > Paketi içe aktar > Özel Paket'i belirleyip tüm öğeleri içe aktararak .unitypackage dosyasını içe aktarın.

Unity Editor özellikleri

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

Derleme Ayarları

Yüklü ve Anında geliştirme modları arasında geçiş yapmayı sağlayan bir pencere açar. Anında'ya geçiş yapıldığında aşağıdaki değişiklikler uygulanır:

  • PLAY_INSTANT adlı bir Scripting Define Symbol oluşturur. Bu sembol, #if PLAY_INSTANT ve #endif ile komut dosyası oluşturmak için kullanılabilir.
  • AndroidManifest.xml dosyasında android:targetSandboxVersion gibi belirli zorunlu değişikliklerle ilgili güncellemeleri yönetir.

Oynatıcı Ayarları

Şekil 1'de gösterilen Player Settings (Oynatıcı Ayarları) iletişim kutusunda, Google Play Instant desteğini optimize etmenize, daha uyumlu grafik API'leri kullanarak geliştirme yapmanıza ve APK'nızın boyutunu küçültmenize yardımcı olacak öneriler gösterilir.

Özel öneriler arasında yalnızca OpenGL ES 2.0'ın kullanılması ve çok iş parçacıklı oluşturmanın devre dışı bırakılması yer alır.
1. şekil. Oynatıcı Ayarları iletişim kutusu

Bu oynatıcı ayarları Gerekli ve Önerilen ayarlar olarak ikiye ayrılır. Bir ayarın karşılığında Güncelle düğmesi varsa ayarı tercih edilen değere 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'a paketleyerek Unity tabanlı bir hazır uygulamanı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ında paketlenir. Hazır uygulama başlatıldıktan sonra AssetBundle bir sunucudan alınır.

Yükleme iş akışlarını destekleme

Birçok hazır uygulamanın amacı, kullanıcılara uygulamanın tam sürümünü yüklemeden önce deneyimleme fırsatı sunmaktır. Unity için Google Play Instant eklentisi, Play Store yükleme iletişim kutusunu göstermeye ve durumu anlık uygulamadan yüklenen uygulamaya aktarmaya yönelik API'ler sağlar.

Yükleme istemi gösterme

Yükle düğmesi olan bir hazır uygulama, yükleme düğmesi tıklama işleyicisinden aşağıdakiler çağrılarak Play Store yükleme iletişim kutusunu gösterebilir:

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

ShowInstallPrompt() yönteminde, aşağıdakilerden bir veya daha fazlasına izin veren bir aşırı yükleme vardır:

  • Kullanıcının yükleme işlemini iptal edip etmediğini belirleme Hazır uygulamanın ana etkinliğinde onActivityResult() işlevini geçersiz kılın ve belirtilen requestCode üzerinde RESULT_CANCELED işlevini kontrol edin.
  • referrer parametresi aracılığıyla yükleme yönlendiren dizesini iletme.
  • PutPostInstallIntentStringExtra() aracılığıyla mevcut oyun oturumuyla ilgili durumu iletme.

Bunlar aşağıdaki örnekte gösterilmektedir:

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üklemesini tamamlarsa Play Store, sağlanan postInstallIntent 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ükleyip yükleme sonrası başlatma işlemini iptal ederse postInstallIntent içinde yer alan ekstralar yüklenen uygulamaya ulaşmayabilir. Niyet ekstralarını iletmek, kalıcı durumu korumaktan ziyade etkin oturum durumunu korumak için daha uygundur. Kalıcı durumu korumak için Cookie API'ye bakın.
  • Herkes, yüklü uygulamayı başlatmak için ek alanlar içeren bir amaç oluşturabilir. Bu nedenle, yük değerli bir şey veriyorsa yükü yalnızca bir kez kullanılabilecek şekilde tasarlayın, şifreleyerek imzalayın ve imzayı bir sunucuda doğrulayın.

Cookie API, bir çerezi (ör. oyuncu kimliği veya seviye tamamlama verileri) anlık uygulamadan karşılık gelen yüklü uygulamaya geçirmek için yöntemler sağlar. postInstallIntent ekstralarının aksine, kullanıcı yüklü uygulamayı hemen başlatmasa bile çerez durumu kullanılabilir. Örneğin, bir anlık 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ı uygulama yüklemesini 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.
}