如 Google Play 即时体验 中所述,设置应用在 Google Play 即时体验上运行的步骤(如 创建您的第一个即时体验应用 中所述)也适用于游戏。本指南重点介绍了一些特定于游戏的设置步骤。
您可以使用 Unity(使用或不使用 Google Play 即时体验 Unity 插件)、Cocos2D、Android Studio 或您自己的自定义引擎开发 Google Play 即时体验游戏。
本指南假设您已经知道想要提供的游戏体验类型。如果您想了解有关制作高质量游戏的创意和最佳实践,请阅读 Google Play 即时体验上游戏的 UX 最佳实践。
此外,在发布可在 Google Play 即时体验上运行的游戏之前,您应该查看 技术要求清单。
指定入口点
包含以下意图过滤器的活动将成为 Google Play 即时体验的入口点
<activity android:name=".GameActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
当用户点击 Play 商店中的“立即试用”按钮或 Google Play 游戏应用中的 “即时玩” 按钮时,将启动此活动。您还可以使用 深度链接 API 直接启动此活动。
定义正确的版本代码
游戏的即时体验的版本代码需要小于可安装游戏的版本代码。通过这种方式对应用进行版本控制,允许玩家从 Google Play 即时体验过渡到下载和安装游戏到其设备上。Android 框架将此过渡视为应用更新。
为确保遵循建议的版本控制方案,请遵循以下策略之一
- 将 Google Play 即时体验的版本代码重新开始为 1。
- 将可安装应用的版本代码增加一个大数字,例如 1000,以确保有足够的空间供即时体验的版本号增加。
在两个单独的 Android Studio 项目中开发即时游戏和可安装游戏是可以的。但是,如果您这样做,则必须执行以下操作才能在 Google Play 上发布游戏
- 在两个 Android Studio 项目中使用相同的包名。
- 在 Google Play Console 中,将这两个变体上传到同一个应用。
有关设置游戏版本的更多详细信息,请参阅 对应用进行版本控制。
支持执行环境
与其他应用一样,Google Play 即时体验上的游戏在设备上的有限沙盒中运行。要支持此执行环境,请完成以下各节中显示的步骤。
选择不使用明文流量
Google Play 即时体验上的游戏不支持 HTTP 流量。如果游戏以 Android 9(API 级别 28)或更高版本为目标,则 Android 默认情况下会在游戏中禁用明文支持。
但是,如果游戏以 Android 8.1(API 级别 27)或更低版本为目标,则必须创建一个 网络安全配置 文件。在此文件中,将 cleartextTrafficPermitted
设置为 false
,如下面的代码片段所示
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">secure.example.com</domain> </domain-config> </network-security-config>
更新目标沙盒版本
更新您的即时游戏 AndroidManifest.xml
文件,使其面向 Google Play 即时游戏支持的沙盒环境。您可以通过将 android:targetSandboxVersion
属性添加到游戏的 <manifest>
元素来完成此更新,如下面的代码片段所示。
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
...
android:targetSandboxVersion="2" ...>
有关更多信息,请参阅有关 targetSandboxVersion
属性的文档。
不要依赖缓存或应用数据的存在
用户的设备上会保留您的即时体验,直到即时体验缓存被清除,这种情况会在以下几种情况下发生:
- 由于设备可用内存不足,即时体验缓存被垃圾回收。
- 用户重新启动设备。
如果发生上述任一过程,用户必须重新下载您的即时体验才能与其交互。
如果系统存储空间非常不足,则您的即时体验的用户数据可能会从内部存储中删除。因此,建议您定期将用户数据与游戏的服务器同步,以保留用户进度。
减小应用大小
与其他类型的应用不同,Google Play 即时游戏的下载大小限制为 15 MB。要创建此大小的游戏,您可能需要重构游戏的逻辑。本节介绍了一些工具和技巧,可帮助您优化游戏的大小。
工具
以下工具列表可以帮助您确定哪些因素导致了游戏的大小。
- APK 分析器:提供已编译 APK 内容的整体视图。使用此视图,您可以确定每个元素对整体大小的字节数贡献。使用此工具快速检查游戏使用的资源、资产、逻辑和原生库的大小。
- Bloaty McBloatface:显示二进制文件的大小概要。
- Android GPU 检查器:查看减少纹理大小对文件大小的影响,而无需重新编译游戏。
技巧
以下是您可以用来减小游戏大小的一些技巧。
- 提取部分游戏逻辑并将其放置在一个或多个 功能模块 中,这些模块不计入大小限制。
- 降低游戏纹理的分辨率。
- 考虑使用 WebP 格式,尤其是在 GPU 上使用未压缩纹理时。WebP 格式创建的图像质量与 JPEG 图像相同,但大小却减少了 15% 到 30%。虽然解压缩 WebP 图像需要更长的时间,但此解压缩时间仍然大大短于游戏纹理的下载时间。Google 还将其集成到一个 开源游戏引擎 中。
- 压缩或重复使用声音和音乐。
- 使用不同的编译标志来帮助减小二进制文件的大小。
-fvisibility=hidden
– 最重要的一个。在cmake
中,您可以按如下方式指定它。$ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
-Oz
– 也非常重要,可以减小大小。如果您使用gcc
编译,请改用-Os
。-flto
– 有时可以减小文件大小。- 链接器标志 – 将
--gc-sections
与编译器标志(如-ffunction-sections
和-fdata-sections
)结合使用。
- 使用 Proguard 缩减代码和资源。
- 使用 Gradle 4.4 或更高版本生成更小的 DEX 文件。
- 实施 资产的云交付。
将大型游戏分成多个 APK
即使在应用了 减小 APK 大小 的建议后,优化 Google Play 即时体验以使游戏适合单个 15 MB APK 仍然很困难。为了应对这一挑战,您可以将游戏分成多个 APK。玩家首先下载主基础 APK;在他们玩游戏的过程中,其余的 *拆分 APK* 会在后台提供给游戏。
例如,基础 APK 可以包含核心游戏引擎以及显示加载屏幕所需的资产。当基础 APK 启动时,它会显示加载屏幕并立即请求包含游戏和关卡数据的另一个拆分 APK。该拆分 APK 可用后,它可以将其资产加载到游戏引擎中,并为玩家提供开始游戏所需的内容。
采用 UX 最佳实践
在配置游戏以支持即时体验后,添加以下各节中所示的逻辑以提供良好的用户体验。
支持 64 位架构
在 Google Play 上发布的应用需要支持 64 位架构。添加应用的 64 位版本可以提高性能,并为仅支持 64 位硬件的设备做好准备。详细了解 64 位支持。
检查游戏是否正在运行即时体验
如果游戏的一些逻辑取决于用户是否参与了您的即时体验,请调用 isInstantApp()
方法。如果当前正在运行的进程是即时体验,则此方法返回 true
。
通过执行此检查,您可以确定您的应用是否需要在 受限执行环境 中运行,或者是否可以利用平台功能。
显示安装提示
如果您构建了一个试用版 Google Play 即时体验,则在某些时候,游戏应该提示玩家将完整版安装到他们的设备上。为此,请在 Android 的 Google API 中使用 showInstallPrompt()
方法。
要详细了解您应该何时以及如何提示玩家进行安装,请参阅 Google Play 即时游戏的 UX 最佳实践。
将数据传输到已安装的体验
如果玩家喜欢您的试用体验,他们可能会决定安装游戏的完整版。为了提供良好的用户体验,重要的是将玩家的进度从您的即时体验传输到游戏的完整版。
如果您的游戏 指定了 targetSandboxVersion
为 2
,则玩家的进度会自动传输到游戏的完整版。否则,您必须手动传输与玩家进度相关的数据。为此,请使用 Cookie API - 示例应用
其他资源
从以下其他资源中了解有关 Google Play 即时的更多信息。
- Codelab:构建您的第一个即时应用
- 在现有应用中添加对 Google Play 即时的支持。
- Codelab:构建多功能即时应用
- 模块化多功能应用。