Используйте Google Play Instant с Unity

Плагин Google Play Instant для Unity настраивает ваш проект Unity для создания мгновенной версии приложения вашей игры. В этом руководстве описывается, как установить и использовать этот плагин.

Загрузите и импортируйте плагин

Плагин является частью плагинов Google Play для Unity. Чтобы импортировать плагин, выполните следующие действия:

  1. Загрузите последнюю версию плагинов Google Play для выпусков Unity .
  2. Импортируйте файл .unitypackage , выбрав пункт меню Unity IDE «Активы» > «Импортировать пакет» > «Пользовательский пакет» и импортировав все элементы.

Возможности редактора Unity

Импортируйте плагин, чтобы добавить подменю Google > Play Instant в Unity. Это подменю предоставляет следующие параметры.

Настройки сборки

Открывает окно, позволяющее переключаться между установленным и мгновенным режимами разработки. Переключение на Instant приводит к следующим изменениям:

  • Создает символ определения сценария с именем PLAY_INSTANT , который можно использовать для сценариев с #if PLAY_INSTANT и #endif .
  • Управляет обновлениями AndroidManifest.xml для некоторых необходимых изменений, таких как android:targetSandboxVersion .

Настройки проигрывателя

Диалоговое окно «Настройки проигрывателя» , показанное на рис. 1, отображает предложения, которые помогут вам оптимизировать поддержку Google Play Instant, разрабатывать приложения с использованием более совместимых графических API и уменьшить размер APK.

Конкретные предложения включают использование только OpenGL ES 2.0 и отключение многопоточного рендеринга.
Рисунок 1. Диалоговое окно «Настройки проигрывателя»

Эти настройки проигрывателя разделены на обязательные и рекомендуемые . Если для параметра имеется соответствующая кнопка «Обновить» , нажмите ее, чтобы изменить параметр на предпочтительное значение.

Чтобы еще больше уменьшить размер APK, откройте диспетчер пакетов Unity и удалите все неиспользуемые пакеты.

Быстрое развертывание

Quick Deploy может уменьшить размер мгновенного приложения на основе Unity, упаковав некоторые ресурсы в AssetBundle . При использовании Quick Deploy игровой движок Unity и экран загрузки упаковываются в APK-файл приложения с мгновенным запуском, и после запуска приложения с мгновенным запуском оно получает AssetBundle с сервера.

Поддержка рабочих процессов установки

Цель многих мгновенных приложений — дать пользователям возможность опробовать приложение перед установкой полной версии. Плагин Google Play Instant для Unity предоставляет API для отображения диалогового окна установки Play Store и для передачи состояния из мгновенного приложения в установленное.

Показать приглашение на установку

Приложение с мгновенным запуском с кнопкой «Установить» может отображать диалоговое окно установки Play Store, вызывая следующую команду из обработчика нажатия кнопки установки:

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

Метод ShowInstallPrompt() имеет перегрузку, которая позволяет выполнять одно или несколько из следующих действий:

  • Определение того, отказывается ли пользователь от процесса установки. Переопределите onActivityResult() в основном действии мгновенного приложения и проверьте наличие 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 Store перезапустит приложение, используя предоставленный postInstallIntent . Установленное приложение может получить значение, установленное в postInstallIntent используя следующее:

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

Примечания:

  • Дополнительные элементы, включенные в postInstallIntent могут не достичь установленного приложения, если пользователь устанавливает приложение, но отменяет запуск после установки. Передача дополнительных намерений лучше подходит для сохранения активного состояния сеанса, чем для сохранения постоянного состояния; для последнего обратитесь к API cookie.
  • Любой может создать намерение с дополнительными полями для запуска установленного приложения, поэтому, если полезная нагрузка предоставляет что-то ценное, спроектируйте полезную нагрузку так, чтобы ее можно было использовать только один раз, криптографически подпишите ее и проверьте подпись на сервере.

API файлов cookie предоставляет методы для передачи файлов cookie (например, идентификатора игрока или данных о прохождении уровня) из мгновенного приложения в соответствующее установленное приложение. В отличие от дополнительных возможностей postInstallIntent , состояние cookie доступно, даже если пользователь не запускает установленное приложение сразу. Например, приложение с мгновенным запуском может вызвать следующий код из обработчика нажатия кнопки установки:

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

Если пользователь завершает установку приложения, установленное приложение может получить данные cookie, используя следующий код:

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