از Google Play Instant با Unity استفاده کنید

هشدار: قابلیت Instant در گوگل پلی دیگر در دسترس نخواهد بود. از دسامبر ۲۰۲۵، انتشار Instant Apps از طریق گوگل پلی امکان‌پذیر نخواهد بود و تمام APIهای Instant سرویس‌های گوگل پلی دیگر کار نخواهند کرد. کاربران دیگر با استفاده از هیچ مکانیزمی، Instant Apps را از طریق Play دریافت نخواهند کرد.

ما این تغییر را بر اساس بازخورد توسعه‌دهندگان و سرمایه‌گذاری‌های مداوم خود برای بهبود اکوسیستم از زمان معرفی Google Play Instant انجام می‌دهیم.

برای ادامه بهینه‌سازی برای رشد کاربر، ما توسعه‌دهندگان را تشویق می‌کنیم که کاربران را به برنامه یا بازی معمولی خود ارجاع دهند و در صورت لزوم از لینک‌های عمیق برای هدایت آنها به مسیرهای خاص یا ویژگی‌های مربوطه استفاده کنند.

افزونه Google Play Instant برای Unity، پروژه Unity شما را برای ایجاد یک نسخه اپلیکیشن فوری از بازی‌تان پیکربندی می‌کند. این راهنما نحوه نصب و استفاده از این افزونه را شرح می‌دهد.

افزونه را دانلود و وارد کنید

این افزونه بخشی از افزونه‌های گوگل پلی برای یونیتی است. برای وارد کردن افزونه، این مراحل را دنبال کنید:

  1. آخرین نسخه افزونه‌های مخصوص یونیتی را از گوگل پلی دانلود کنید.
  2. با انتخاب گزینه‌ی Assets > Import package > Custom Package از منوی Unity IDE و وارد کردن همه‌ی موارد، فایل .unitypackage را وارد کنید.

ویژگی‌های ویرایشگر یونیتی

افزونه را وارد کنید تا زیرمنوی Google > Play Instant در یونیتی اضافه شود. این زیرمنو گزینه‌های زیر را ارائه می‌دهد.

تنظیمات ساخت

پنجره‌ای باز می‌شود که امکان جابجایی بین حالت‌های توسعه نصب‌شده و فوری را فراهم می‌کند. جابجایی به حالت فوری تغییرات زیر را اعمال می‌کند:

  • یک نماد تعریف اسکریپت به نام PLAY_INSTANT ایجاد می‌کند که می‌تواند برای اسکریپت‌نویسی با #if PLAY_INSTANT و #endif استفاده شود.
  • به‌روزرسانی‌های AndroidManifest.xml را برای تغییرات مورد نیاز خاص مانند android:targetSandboxVersion مدیریت می‌کند.

تنظیمات پخش کننده

پنجره تنظیمات پخش‌کننده ، که در شکل ۱ نشان داده شده است، پیشنهادهایی را برای کمک به شما در بهینه‌سازی پشتیبانی از Google Play Instant، توسعه در برابر APIهای گرافیکی سازگارتر و کاهش حجم APK شما نمایش می‌دهد.

پیشنهادهای ویژه شامل استفاده از OpenGL ES 2.0 و غیرفعال کردن رندرینگ چندرشته‌ای (Multithreaded Rendering) می‌شود.
شکل ۱. پنجره تنظیمات پخش‌کننده

این تنظیمات پخش‌کننده به تنظیمات الزامی و توصیه‌شده تقسیم می‌شوند. اگر برای هر تنظیم دکمه به‌روزرسانی مربوطه وجود دارد، روی آن کلیک کنید تا تنظیمات به مقدار دلخواه تغییر کند.

برای کاهش بیشتر حجم APK، Unity Package Manager را باز کنید و بسته‌های بلااستفاده را حذف کنید.

استقرار سریع

Quick Deploy می‌تواند با بسته‌بندی برخی از دارایی‌ها در یک AssetBundle ، اندازه یک برنامه فوری مبتنی بر Unity را کاهش دهد. هنگام استفاده از Quick Deploy، موتور بازی Unity و صفحه بارگذاری در یک APK برنامه فوری بسته‌بندی می‌شوند و پس از شروع برنامه فوری، AssetBundle را از یک سرور بازیابی می‌کند.

پشتیبانی از گردش‌های کاری نصب

هدف بسیاری از برنامه‌های فوری این است که به کاربران فرصتی داده شود تا قبل از نصب نسخه کامل، برنامه را تجربه کنند. افزونه Google Play Instant برای Unity، APIهایی را برای نمایش کادر نصب Play Store و انتقال وضعیت از برنامه فوری به برنامه نصب شده ارائه می‌دهد.

نمایش اعلان نصب

یک برنامه فوری با دکمه نصب می‌تواند با فراخوانی موارد زیر از یک کنترل‌کننده کلیک دکمه نصب، یک کادر محاوره‌ای نصب در پلی استور نمایش دهد:

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

متد ShowInstallPrompt() دارای یک overload است که امکان انجام یک یا چند مورد از موارد زیر را فراهم می‌کند:

  • تعیین اینکه آیا کاربر از فرآیند نصب انصراف می‌دهد یا خیر. تابع onActivityResult() را در activity اصلی برنامه‌ی آنی بازنویسی کنید و RESULT_CANCELED را در requestCode مشخص شده بررسی کنید.
  • ارسال یک رشته ارجاع نصب از طریق پارامتر referrer .
  • ارسال وضعیت مربوط به جلسه بازی فعلی از طریق PutPostInstallIntentStringExtra() .

این موارد در مثال زیر نشان داده شده است:

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

اگر کاربر نصب برنامه را کامل کند، فروشگاه Play برنامه را با استفاده از postInstallIntent ارائه شده مجدداً راه‌اندازی می‌کند. برنامه نصب شده می‌تواند با استفاده از موارد زیر، مقداری را که در postInstallIntent تنظیم شده است، بازیابی کند:

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

یادداشت‌ها:

  • اگر کاربر برنامه را نصب کند اما اجرای پس از نصب را لغو کند، ممکن است موارد اضافی موجود در postInstallIntent به برنامه نصب شده دسترسی پیدا نکنند. ارسال موارد اضافی intent برای حفظ حالت فعال session نسبت به حفظ حالت پایدار مناسب‌تر است؛ برای مورد دوم به API کوکی مراجعه کنید.
  • هر کسی می‌تواند یک اینتنت با فیلدهای اضافی برای اجرای برنامه نصب شده ایجاد کند، بنابراین اگر payload چیز ارزشمندی را ارائه می‌دهد، payload را طوری طراحی کنید که فقط یک بار قابل استفاده باشد، آن را به صورت رمزنگاری امضا کنید و امضا را روی سرور تأیید کنید.

API کوکی، متدهایی را برای ارسال یک کوکی (مثلاً شناسه بازیکن یا داده‌های تکمیل مرحله) از یک برنامه فوری به برنامه نصب شده مربوطه ارائه می‌دهد. برخلاف افزونه‌های postInstallIntent ، وضعیت کوکی حتی اگر کاربر بلافاصله برنامه نصب شده را اجرا نکند، در دسترس است. برای مثال، یک برنامه فوری می‌تواند کد زیر را از یک کنترل‌کننده کلیک دکمه نصب فراخوانی کند:

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

اگر کاربر نصب برنامه را کامل کند، برنامه نصب شده می‌تواند داده‌های کوکی را با استفاده از کد زیر بازیابی کند:

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