1. 简介
假设您需要在 Play 商店中发布应用后调整应用中某些参数的值。通常,您应重新发布新版应用,并且用户也应在手机上更新应用。
一般来说,如果您想对应用进行持久性更改,应用更新会很有用。不过,如果您要经常调整应用中某些形参的值,该怎么办?或者,如果您想运行一些实验来找到最佳应用配置,该怎么办?
在这些情况下,应用更新将无法正常运行。因为更新需要一些时间才能完全传播给用户。此外,跨多个应用版本运行实验也相当具有挑战性。
此外,如何确定应用的用户历程是否按预期运行?您可以参考 Play 管理中心内的用户评论。不过,它可能不够精确,无法做出明确的决定。
学习内容
- 如何在 Google Analytics for Firebase 中创建漏斗
- 如何使用 Firebase Remote Config
- 如何运行 Firebase A/B 测试
所需条件
- Unity 2018.4.4f1 或更高版本
- Xcode 10 或更高版本(用于构建 iOS 目标平台)
- Google 账号
- 搭载 Android 5.0 或更高版本的测试设备,以及用于连接设备的 USB 线;或者运行 AVD(Android 虚拟设备)的 Android 模拟器,且该模拟器具有支持 Play 商店/Google API 的系统映像
- 搭载 iOS 8.0 或更高版本的 iOS 设备或模拟器
您如何评价自己在 AdMob 方面的经验水平?
您如何评价自己在 Firebase 方面的经验水平?
2. 设置开发环境
下载代码
点击以下按钮可下载本 Codelab 的所有代码:
解压下载的 ZIP 文件。此操作将解压缩名为 admob-firebase-codelabs-unity-master 的根文件夹。
…或从命令行克隆 GitHub 代码库。
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity
该代码库包含以下四个文件夹:
101-base - 您在此 Codelab 中用作基础的起始代码。
101-complete_and_102-base - 此 Codelab 完成后的代码以及 102 Codelab 的起始代码。
102-complete - 102 Codelab 完成后的代码。
准备所需文件
超棒的绘画测验使用多个开源代码,这些代码是编译和运行项目所必需的。
打开终端,然后移动到代码库根目录。然后,从终端运行 ./gradlew :prepareThirdPartyFiles(在 Windows 上为 gradlew.bat :prepareThirdPartyFiles),将所需文件复制到项目中。
导入起始应用
启动 Unity,然后在欢迎界面中选择“打开”。然后,从下载的代码中选择 101-complete_and_102-base 目录。
现在,您应该已在 Unity 中打开项目。
添加 Google 移动广告 Unity 插件
如需在 Unity 应用中投放 AdMob 广告,您需要将 Google 移动广告 Unity 插件添加到项目中。
- 下载 Google 移动广告 Unity 插件 3.18.1 软件包。(请注意,此 Codelab 可能与插件的其他版本不兼容)
- 在 Awesome Drawing Quiz Unity 项目中。在项目中,依次前往 Assets > Import Package > Custom Package。
- 将下载的 GoogleMobileAds.unitypackage 导入到项目中。
您还需要设置 AdMob 应用 ID。在 Unity 编辑器中,从菜单中依次选择 Assets > Google Mobile Ads > Settings。

启用 AdMob,方法是选中 Google AdMob 部分下的 Enabled 复选框。然后,按如下方式输入 AdMob 应用 ID:
- Android:
ca-app-pub-3940256099942544~3048611032 - iOS:
ca-app-pub-3940256099942544~2753522596

将 Firebase 配置文件添加到 Unity 项目
- 在 Awesome Drawing Quiz 项目的概览界面中,点击“设置”图标。

- 在常规标签页下,选择每个 Android 和 iOS 应用,下载 google-service.json(适用于 Android)和 GoogleService-Info.plist(适用于 iOS)文件。
- 将这两个配置文件移到 Unity 项目中的
Assets 文件夹中。

添加 Firebase Analytics SDK
- 下载 Firebase Unity SDK 5.5.0,并将其解压缩到方便的位置。(如果您已下载 SDK,请跳过此步骤)
- 打开 Awesome Drawing Quiz Unity 项目,然后依次前往 Assets > Import Package > Custom Package。
- 从解压缩的 SDK 中,导入 Firebase Analytics SDK (
dotnet4/FirebaseAnalytics.unitypackage)。 - 在“Import Unity package”窗口中,点击 Import。
3. 在控制台中打开 Firebase 项目
在继续执行下一步之前,请从 Firebase 控制台中打开您在 AdMob+Firebase 101 Codelab 的“设置 Firebase 项目”步骤中创建的项目。

4. 创建应用事件漏斗图
您可能添加了一些应用事件来跟踪应用内的用户活动。通过读取每个应用事件的报告,您可以获取与该事件关联的详细信息,例如总次数、每位用户的平均次数、受众特征等。
不过,如果您想查看一系列事件的完成率,而不是专注于特定事件,该怎么办?在 Google Analytics for Firebase 中,您可以使用漏斗来直观呈现并优化一系列应用事件的完成率。
创建漏斗
要创建渠道,请执行以下操作:
- 前往 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。
- 点击漏斗。
- 点击新建渠道。
- 输入渠道名称和说明。
- 选择要在渠道中用作步骤的前两个事件。
- 点击添加其他事件以添加更多步骤,然后选择相应事件。
- 点击创建。
按照上述步骤创建以下漏斗:
#1 漏斗名称:级别成功率事件:level_start、level_success
#2 漏斗名称:激励广告完成率事件:ad_reward_prompt、ad_reward_impression、ad_reward
#3 漏斗名称:游戏完成率 事件:game_start、game_complete
查看漏斗分析
创建一些漏斗后,您可以在 Firebase 控制台的漏斗菜单中访问它们。点击列表中的漏斗名称,即可查看每个漏斗的详细分析。

例如,点击关卡成功率。系统会显示如下所示的漏斗详细信息:

从上面的屏幕截图中,您可以看到在开始关卡(触发 level_start 事件)后通关(触发 level_success 事件)的用户百分比。在此处,您可以看到 46.2% 的用户已通关。
点击事件数后,系统会显示基于事件数量的指标,如下所示:

根据上图中的指标,在相应时间段内,有 116 次尝试(触发了 level_start 事件)和 57 次通关(触发了 level_success 事件)。
由于基于事件的完成率(49.1%) 略高于基于用户的完成率(46.2%),因此可以说,有少数人的表现优于其他人。
5. 将 Remote Config 集成到应用中
由于您可以根据应用事件和漏斗图获取一些有关应用的分析洞见,因此您可能需要优化应用。这通常包括对应用中的参数值进行微调。如需修改这些参数的值,您需要更新应用,以便将更改应用于用户。
通过使用 Firebase 中的 Remote Config,您无需更新应用即可调整这些值,这意味着您无需强制用户下载更新,即可更改应用行为,从而避免打扰用户。
在此 Codelab 中,您将学习如何使用 Remote Config 使奖励金额(观看激励视频广告后要公开的字母数)可调整,而无需更新应用。
添加 Firebase Remote Config SDK
- 下载 Firebase Unity SDK 5.5.0,并将其解压缩到方便的位置。
- 打开 Awesome Drawing Quiz Unity 项目,然后依次前往 Assets > Import Package > Custom Package。
- 从解压缩的 SDK 中,导入 Remote Config SDK (
dotnet4/FirebaseRemoteConfig.unitypackage)。 - 在“Import Unity package”窗口中,点击 Import。
导入 Firebase.RemoteConfig
修改 Main.cs,以便您可以使用 Firebase.RemoteConfig 中的类型,而无需使用完全限定名。
Scenes/Main.cs
...
using AwesomeDrawingQuiz.Game;
// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;
namespace AwesomeDrawingQuiz.Scene {
...
}
初始化并提取 Remote Config 值
修改 Main.cs 中的 InitAndFetchRemoteConfig() 方法,以初始化 Remote Config 实例,如下所示。请注意,GameSettings.KEY_REWARD_AMOUNT 包含 Remote Config 中参数的名称。(您很快就会在此 Codelab 中声明此字段)
Scenes/Main.cs
private Task InitAndFetchRemoteConfig() {
// TODO: Initialize and Fetch values from the Remote Config (102)
Dictionary<string, object> defaults = new Dictionary<string, object>();
defaults.Add(GameSettings.KEY_REWARD_AMOUNT, 1);
FirebaseRemoteConfig.SetDefaults(defaults);
if (Debug.isDebugBuild) {
ConfigSettings config = new ConfigSettings();
config.IsDeveloperMode = true;
FirebaseRemoteConfig.Settings = config;
return FirebaseRemoteConfig.FetchAsync(System.TimeSpan.Zero);
} else {
return FirebaseRemoteConfig.FetchAsync();
}
}
您会看到,FirebaseRemoteConfig 实例已配置为在调试模式下从服务器提取最新值,以帮助完成开发流程。(IsDeveloperMode = true 胜 FetchAsync(System.TimeSpan.Zero) 负)
激活提取的 Remote Config 值
成功提取 Remote Config 值后,您应激活这些值,以便在应用中使用它们。按如下方式修改 ActivateRemoteConfigValues() 方法。
Scenes/Main.cs
private void ActivateRemoteConfigValues() {
// TODO: Activate fetched Remote Config values (102)
FirebaseRemoteConfig.ActivateFetched();
}
修改 Start() 方法
如需让应用在启动时提取并激活 Remote Config 值,请按如下方式修改 Main.cs 文件中的 Start() 方法。
Scenes/Main.cs
void Start () {
...
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
...
}).ContinueWith(task => {
// TODO: Call InitAndFetchRemoteConfig() (102)
InitAndFetchRemoteConfig();
}).ContinueWith(task => {
// TODO: Call ActivateRemoteConfigValues() (102)
ActivateRemoteConfigValues();
// Enable 'Start a game' button
UnityMainThreadDispatcher.Instance()
.Enqueue(() => buttonStartGame.interactable = true);
});
#else
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
// TODO: Call InitAndFetchRemoteConfig() (102)
InitAndFetchRemoteConfig().ContinueWith(task => {
// TODO: Call ActivateRemoteConfigValues() (102)
ActivateRemoteConfigValues();
});
#endif
}
从 Remote Config 中提取奖励金额
修改 GameSettings 类,以从 Remote Config 中提取奖励金额。
Game/GameSettings.cs
// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;
namespace AwesomeDrawingQuiz.Game {
public class GameSettings {
...
// TODO: Apply reward amount from the Remote Config (102)
public const string KEY_REWARD_AMOUNT = "reward_amount";
public static GameSettings Instance {
get {
return instance;
}
}
...
public int RewardAmount {
get {
// TODO: Apply reward amount from the Remote Config (102)
return (int) FirebaseRemoteConfig.GetValue(KEY_REWARD_AMOUNT).LongValue;
}
private set { }
}
}
}
通过控制台创建 Remote Config 参数
接下来,您将为奖励金额创建一个新的 Remote Config 参数,以便随时调整其值。
如需创建新形参,请前往 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。点击 Remote Config -> 添加您的首个参数按钮。

将形参命名为 reward_amount,并将其默认值设置为 1。然后,点击添加参数按钮。

点击发布更改按钮,以向用户发布更改。

6. 使用 Remote Config 更改应用行为
现在,您可以在 Firebase 控制台中配置超棒的绘画测验中的奖励金额,而无需更新应用代码。
在本部分中,您将把奖励金额从 1 更改为 2,以便在观看激励广告后,应用再显示两个字符作为提示。
更新 reward_amount 参数的默认值
前往 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。点击 Remote Config,然后点击列表中的 reward_amount。接下来,将默认值更改为 2,然后点击更新按钮。

点击发布更改按钮,向用户发布更改。

验证应用行为变更
如需确认应用行为变更,请再次运行项目。看完激励广告后,您会发现应用现在会显示两个字母作为奖励,这是我们在 Remote Config 控制台中配置的。
观看激励广告之前 | 奖励:揭示两个额外的字母 |
7. 创建实验以优化奖励金额
现在,您无需发布应用更新即可更改奖励金额。不过,如何确定更改量对应用有益?
借助 Firebase A/B Testing,您可以运行实验来优化应用的整体用户体验,而无需更新应用或构建单独的工具来运行和跟踪每个实验的效果。
设计实验
在创建新实验之前,您应先为实验设定明确的目标。在创建新实验之前,请务必检查以下清单。
- 内容:您要优化什么?(例如,游戏难度、广告展示时间/可见性等)
- 原因:您运行实验的业务目标是什么?(例如,最大限度地提高广告收入、提高用户留存率等)
- Who:谁可以参与实验?(例如,所有用户、特定用户受众群体等)
在此 Codelab 中,您将创建一个实验来优化奖励金额值,以最大限度地提高 Awesome Drawing Quiz 的每日用户互动度。
创建实验
在 Firebase 控制台中打开“Awesome Drawing Quiz”项目。选择 A/B 测试菜单,然后点击创建实验按钮。
选择 Remote Config 以创建 Remote Config 实验。

将实验命名为“奖励金额”,如以下屏幕截图所示。

配置定位选项。在此 Codelab 中,您将面向 Awesome Drawing Quiz 的所有用户。

由于实验的主要目标是找到可最大限度提高每日用户互动的最佳值,因此请选择每日用户互动作为要跟踪的主要指标。

最后,设置对照组和变体组,以便确定哪个组的效果更好。从对照组中选择 reward_amount,并保持其值不变。对于变体组,将其命名为“奖励较少”,然后将 reward_amount 的值更改为 1。

在此配置中,“奖励较少”组中的人员将获得一封信作为奖励,而对照组中的人员将获得两封信作为奖励。这样一来,您就可以了解奖励金额对用户的影响。
点击查看按钮后,您会看到实验概览,如下所示。

运行实验
点击开始实验按钮以运行实验。请注意,实验一旦开始,您就无法更改实验配置。

8. 管理实验
查看实验进度
您可以在 Firebase 控制台的 A/B 测试菜单中查看实验进度,该菜单将显示在以下屏幕截图中。请注意,您还可以在该卡片中查看过去 30 分钟内参与实验的用户数。

点击列表中的实验后,您就可以看到实验详情。在实验能够确定领先变体(即效果最佳的变体)之前,您会看到“现在还无法确定领先变体”消息。

实验运行一段时间后,系统会在效果提升概览部分开始显示实验期间收集的数据。您可以比较每个变体的效果,看看哪个变体的效果更好。以下屏幕截图显示了“改进概览”部分的示例。

在改进概览部分下方的表格中,您可以查看实验的目标指标的详细信息,以及实验中跟踪的其他指标。以下屏幕截图显示了“指标详情”部分的示例。

向所有用户发布领先变体
在实验运行了较长的一段时间,足以让您找到领先变体(即胜出变体)后,您就可以向所有用户发布该实验了。A/B Testing 确定明确的领先变体后,会建议您向所有用户发布该变体。

不过,即使实验尚未确定明确的领先变体,您仍然可以选择向所有用户发布某个变体。
在实验详情界面上,点击上下文菜单 (
),然后点击发布变体。

选择要向所有用户发布的变体,然后点击在 Remote Config 中查看按钮,以便在 Remote Config 中进行更改之前查看更改。

确认草稿没有任何问题后,点击发布更改按钮,即可向所有用户发布更改。

9. 全部完成!
您已完成 AdMob+Firebase 102 Unity Codelab。您可以在
102-complete 文件夹中找到此 Codelab 的完整代码。

