适用于 Unity 的 Google Play 免安装体验插件可以配置 Unity 项目,用于打造游戏的免安装应用版本。本指南将介绍如何安装和使用此插件。
下载并导入插件
该插件是适用于 Unity 的 Google Play 插件的一部分。如需导入该插件,请按以下步骤操作:
.unitypackage
Unity 编辑器功能
导入该插件,以在 Unity 中添加 Google > Play Instant 子菜单。该子菜单提供以下选项。
Build Settings
打开一个窗口,用于在 Installed 和 Instant 开发模式之间切换。切换到 Instant 会执行以下更改:
PLAY_INSTANT#if PLAY_INSTANT#endif
Player Settings
Player Settings 对话框(如图 1 所示)中显示的建议可帮助您优化对 Google Play 免安装体验的支持、针对兼容性更强的图形 API 进行开发,以及缩减 APK 的大小。
这些 Player Settings 分为必需的设置和建议的设置。如果某项设置有对应的 Update 按钮,请点击此按钮将设置更改为首选值。
如需进一步缩减 APK 大小,请打开 Unity Package Manager 并移除所有未使用的软件包。
Quick Deploy
Quick Deploy 可以将一些资源打包到 AssetBundle 中,从而缩减基于 Unity 的免安装应用的大小。使用 Quick Deploy 时,Unity 游戏引擎和加载屏幕会被打包到免安装应用 APK 中,在免安装应用启动后,Quick Deploy 会从服务器中检索该 AssetBundle。
支持安装工作流
许多免安装应用的目的是让用户在安装完整版之前有机会先体验应用。适用于 Unity 的 Google Play 免安装体验插件提供了相关的 API,用于显示 Play 商店安装对话框以及将状态从免安装应用转换为安装式应用。
显示安装提示
包含 Install 按钮的免安装应用可以显示 Play 商店安装对话框,方法是从安装按钮点击处理程序中调用以下方法:
Google.Play.Instant.InstallLauncher.ShowInstallPrompt();
ShowInstallPrompt()
onActivityResult()requestCodeRESULT_CANCELEDreferrerPutPostInstallIntentStringExtra()
以下示例对这些操作进行了演示:
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");
}
postInstallIntentpostInstallIntent
var sessionInfo = InstallLauncher.GetPostInstallIntentStringExtra("sessionInfo");
注意:
postInstallIntent
使用 Cookie 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);
}
如果用户完成了应用安装,那么安装式应用可以使用以下代码检索 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.
}