如创建您的第一个即时应用中所述,设置应用在Google Play 即时体验上运行的步骤也适用于游戏。本指南重点介绍一些特定于游戏的设置步骤。
您可以使用Unity(使用或不使用Google Play Instant Unity 插件)、Cocos2D、Android Studio或您自己的自定义引擎来开发 Google Play Instant 游戏。
本指南假设您已经知道您想要提供的游戏体验类型。如果您想了解制作高质量游戏的创意和最佳实践,请阅读Google Play Instant 游戏的 UX 最佳实践。
此外,在发布可在 Google Play Instant 上运行的游戏之前,您应该查看技术要求清单。
指定入口点
包含以下意图过滤器的活动将成为 Google Play Instant 体验的入口点
<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 Instant 体验过渡到将游戏下载并安装到他们的设备上。Android 框架认为此过渡是应用更新。
为确保您遵循推荐的版本控制方案,请遵循以下策略之一
- 将 Google Play Instant 体验的版本代码重新启动为 1。
- 将可安装应用的版本代码增加大量数字,例如 1000,以确保有足够的空间来增加即时体验的版本号。
在两个独立的 Android Studio 项目中开发即时游戏和可安装游戏是可以的。但是,如果您这样做,则必须执行以下操作才能在 Google Play 上发布游戏
- 在两个 Android Studio 项目中使用相同的包名称。
- 在 Google Play Console 中,将两个变体上传到同一个应用。
有关设置游戏版本的更多详细信息,请参阅为您的应用设置版本。
支持执行环境
与其他应用一样,Google Play Instant 上的游戏在设备上的有限沙盒中运行。要支持此执行环境,请完成以下部分中显示的步骤。
选择退出明文流量
Google Play Instant 上的游戏不支持 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 Instant 支持的沙盒环境。您可以通过向游戏的<manifest>
元素添加android:targetSandboxVersion
属性来完成此更新,如下面的代码片段所示
<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 即时的更多信息
- 代码实验室:构建您的第一个即时应用
- 在现有应用中添加对 Google Play 即时的支持。
- 代码实验室:构建多功能即时应用
- 模块化多功能应用。