Menggunakan Google Play Instan dengan Unity

Plugin Google Play Instan untuk Unity mengonfigurasi project Unity Anda untuk membuat game versi aplikasi instan. Panduan ini menjelaskan cara menginstal dan menggunakan plugin ini.

Mendownload dan mengimpor plugin

Plugin ini adalah bagian dari Plugin Google Play untuk Unity. Untuk mengimpor plugin, ikuti langkah-langkah berikut:

  1. Download rilis terbaru Plugin Google Play untuk Unity.
  2. Impor file .unitypackage dengan memilih opsi menu Unity IDE Assets > Import package > Custom Package, lalu mengimpor semua item.

Fitur Unity Editor

Impor plugin untuk menambahkan submenu Google > Play Instant di Unity. Submenu ini menyediakan opsi berikut.

Build Settings

Membuka jendela yang memungkinkan peralihan antara mode pengembangan Installed dan Instant. Beralih ke Instant akan membuat perubahan berikut:

  • Membuat Scripting Define Symbol yang disebut PLAY_INSTANT yang dapat digunakan untuk membuat skrip dengan #if PLAY_INSTANT dan #endif.
  • Mengelola update atas AndroidManifest.xml untuk perubahan tertentu yang diwajibkan seperti android:targetSandboxVersion.

Player Settings

Dialog Player Settings, seperti ditunjukkan pada Gambar 1, menampilkan saran untuk membantu Anda mengoptimalkan dukungan untuk Google Play Instan, melakukan pengembangan dengan API grafis yang lebih kompatibel, dan mengurangi ukuran APK.

Saran spesifik mencakup hanya menggunakan OpenGL ES 2.0 dan
  menonaktifkan Multithreaded Rendering.
Gambar 1. Dialog Player Settings

Player Settings ini dibagi ke dalam dua setelan, Required dan Recommended. Jika setelan memiliki tombol Update yang sesuai, klik tombol tersebut untuk mengubah setelan ke nilai yang diinginkan.

Untuk mengurangi ukuran APK lebih lanjut, buka Unity Package Manager, lalu hapus setiap paket yang tidak digunakan.

Quick Deploy

Quick Deploy dapat mengurangi ukuran aplikasi instan berbasis Unity dengan mengemas beberapa aset ke dalam AssetBundle. Saat menggunakan Quick Deploy, mesin game Unity dan layar pemuatan akan dikemas ke dalam sebuah APK aplikasi instan, dan setelah aplikasi instan dimulai, AssetBundle akan diambil dari server.

Mendukung alur kerja penginstalan

Sasaran banyak aplikasi instan adalah memberikan kesempatan kepada pengguna untuk mencoba aplikasi sebelum menginstal versi lengkapnya. Plugin Google Play Instan untuk Unity menyediakan API untuk menampilkan dialog penginstalan Play Store dan untuk mentransfer status dari aplikasi instan ke aplikasi terinstal.

Menampilkan perintah penginstalan

Aplikasi instan dengan tombol Install dapat menampilkan dialog penginstalan Play Store dengan memanggil kode berikut dari pengendali klik tombol instal:

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

Metode ShowInstallPrompt() memiliki overload yang memungkinkan satu atau beberapa hal berikut:

  • Menentukan apakah pengguna membatalkan proses penginstalan. Mengganti onActivityResult() pada aktivitas utama aplikasi instan dan memeriksa RESULT_CANCELED pada requestCode yang ditentukan.
  • Meneruskan string perujuk penginstalan melalui parameter referrer.
  • Meneruskan status sesi game saat ini melalui PutPostInstallIntentStringExtra().

Ini ditunjukkan dalam contoh berikut:

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");
}

Jika pengguna menyelesaikan penginstalan aplikasi, Play Store akan meluncurkan kembali aplikasi menggunakan postInstallIntent yang tersedia. Aplikasi terinstal dapat mengambil nilai yang ditetapkan di postInstallIntent menggunakan kode berikut:

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

Catatan:

  • Tambahan yang disertakan dalam postInstallIntent mungkin tidak menjangkau aplikasi terinstal jika pengguna menginstal aplikasi, tetapi membatalkan peluncuran setelah proses instal. Penerusan intent tambahan lebih sesuai untuk mempertahankan status sesi aktif daripada mempertahankan status persisten; untuk mengetahui detail status persisten, lihat Cookie API.
  • Siapa saja dapat membuat intent dengan kolom tambahan untuk meluncurkan aplikasi terinstal. Jadi, jika payload memberikan semacam nilai, desain payload agar hanya dapat digunakan sekali, tanda tangani secara kriptografis, dan verifikasi tanda tangan tersebut di server.

Cookie API menyediakan metode untuk meneruskan cookie (misalnya, ID pemain atau data penyelesaian level) dari aplikasi instan ke aplikasi terinstal terkait. Tidak seperti tambahan postInstallIntent, status cookie tetap tersedia meskipun pengguna tidak segera meluncurkan aplikasi terinstal. Misalnya, aplikasi instan dapat memanggil kode berikut dari pengendali klik tombol instal:

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);
}

Jika pengguna menyelesaikan penginstalan aplikasi, aplikasi terinstal dapat mengambil data cookie menggunakan kode berikut:

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