将 Google Play 即时体验与 Unity 结合使用

适用于 Unity 的 Google Play 即时体验插件可配置您的 Unity 项目以创建游戏的即时体验应用版本。本指南介绍了如何安装和使用此插件。

下载并导入插件

该插件是适用于 Unity 的 Google Play 插件的一部分。要导入插件,请按照以下步骤操作

  1. 适用于 Unity 的 Google Play 插件版本下载最新版本。
  2. 通过选择 Unity IDE 菜单选项 **Assets > Import package > Custom Package** 并导入所有项目来导入 .unitypackage 文件。

Unity 编辑器功能

导入插件以在 Unity 中添加 **Google > Play Instant** 子菜单。此子菜单提供以下选项。

构建设置

打开一个窗口,使您能够在 **已安装** 和 **即时体验** 开发模式之间切换。切换到 **即时体验** 会执行以下更改

  • 创建一个名为 PLAY_INSTANT 的脚本定义符号,可用于使用 #if PLAY_INSTANT#endif 进行脚本编写。
  • 管理对 AndroidManifest.xml 的更新,以进行某些必要的更改,例如 android:targetSandboxVersion

播放器设置

图 1 所示的 **播放器设置** 对话框显示了一些建议,以帮助您优化对 Google Play 即时体验的支持,针对更兼容的图形 API 进行开发,以及减小 APK 的大小。

Specific suggestions include using OpenGL ES 2.0 only and
  disabling Multithreaded Rendering.
图 1. 播放器设置 对话框

这些播放器设置分为 **必需** 和 **推荐** 设置。如果设置具有相应的 **更新** 按钮,请单击它以将设置更改为首选值。

为了进一步减小 APK 的大小,请打开 Unity 包管理器并删除所有未使用的包。

快速部署

快速部署可以通过将某些资源打包到 AssetBundle 中来减小基于 Unity 的即时体验应用的大小。使用快速部署时,Unity 游戏引擎和加载屏幕将打包到即时体验应用 APK 中,并且在即时体验应用启动后,它将从服务器检索 AssetBundle。

支持安装工作流程

许多即时体验应用的目标是让用户有机会在安装完整版本之前体验该应用。适用于 Unity 的 Google Play 即时体验插件提供了用于显示 Play 商店安装对话框以及用于将状态从即时体验应用传输到已安装应用的 API。

显示安装提示

带有 **安装** 按钮的即时体验应用可以通过从安装按钮点击处理程序调用以下内容来显示 Play 商店安装对话框

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

ShowInstallPrompt() 方法有一个重载,允许使用以下一项或多项

  • 确定用户是否取消了安装过程。在即时体验应用的主活动中覆盖 onActivityResult(),并在指定的 requestCode 上检查 RESULT_CANCELED
  • 通过 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 额外信息更适合保留活动会话状态,而不是保留持久性状态;对于后者,请参阅 Cookie API。
  • 任何人都可以构建一个带有额外字段的 Intent 来启动已安装的应用,因此,如果有效负载授予某些有价值的东西,请设计有效负载使其只能使用一次,对其进行加密签名,并在服务器上验证签名。

Cookie API 提供了从即时应用传递 cookie(例如,玩家 ID 或关卡完成数据)到其对应的已安装应用的方法。与 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.
}