AdMob+Firebase 102 Unity:无需更新即可优化应用行为

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

该代码库包含以下四个文件夹:

  • android_studio_folder.png101-base - 您在此 Codelab 中用作基础的起始代码。
  • android_studio_folder.png101-complete_and_102-base - 此 Codelab 完成后的代码以及 102 Codelab 的起始代码。
  • android_studio_folder.png102-complete - 102 Codelab 完成后的代码。

准备所需文件

超棒的绘画测验使用多个开源代码,这些代码是编译和运行项目所必需的。

打开终端,然后移动到代码库根目录。然后,从终端运行 ./gradlew :prepareThirdPartyFiles(在 Windows 上为 gradlew.bat :prepareThirdPartyFiles),将所需文件复制到项目中。

导入起始应用

启动 Unity,然后在欢迎界面中选择“打开”。然后,从下载的代码中选择 101-complete_and_102-base 目录。

现在,您应该已在 Unity 中打开项目。

添加 Google 移动广告 Unity 插件

如需在 Unity 应用中投放 AdMob 广告,您需要将 Google 移动广告 Unity 插件添加到项目中。

  1. 下载 Google 移动广告 Unity 插件 3.18.1 软件包。(请注意,此 Codelab 可能与插件的其他版本不兼容)
  2. Awesome Drawing Quiz Unity 项目中。在项目中,依次前往 Assets > Import Package > Custom Package
  3. 将下载的 GoogleMobileAds.unitypackage 导入到项目中。

您还需要设置 AdMob 应用 ID。在 Unity 编辑器中,从菜单中依次选择 Assets > Google Mobile Ads > Settings

44fc84fe88235c1f.png

启用 AdMob,方法是选中 Google AdMob 部分下的 Enabled 复选框。然后,按如下方式输入 AdMob 应用 ID:

  • Android:ca-app-pub-3940256099942544~3048611032
  • iOS:ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

将 Firebase 配置文件添加到 Unity 项目

  1. Awesome Drawing Quiz 项目的概览界面中,点击“设置”图标。9bacb5ada7cbaaf6.png
  2. 常规标签页下,选择每个 Android 和 iOS 应用,下载 google-service.json(适用于 Android)和 GoogleService-Info.plist(适用于 iOS)文件。
  3. 将这两个配置文件移到 Unity 项目中的 android_studio_folder.pngAssets 文件夹中。

704aa8e97df63c4e.png

添加 Firebase Analytics SDK

  1. 下载 Firebase Unity SDK 5.5.0,并将其解压缩到方便的位置。(如果您已下载 SDK,请跳过此步骤)
  2. 打开 Awesome Drawing Quiz Unity 项目,然后依次前往 Assets > Import Package > Custom Package
  3. 从解压缩的 SDK 中,导入 Firebase Analytics SDK (dotnet4/FirebaseAnalytics.unitypackage)。
  4. 在“Import Unity package”窗口中,点击 Import

3. 在控制台中打开 Firebase 项目

在继续执行下一步之前,请从 Firebase 控制台中打开您在 AdMob+Firebase 101 Codelab“设置 Firebase 项目”步骤中创建的项目。

e0a028059c9e00cb.png

4. 创建应用事件漏斗图

您可能添加了一些应用事件来跟踪应用内的用户活动。通过读取每个应用事件的报告,您可以获取与该事件关联的详细信息,例如总次数、每位用户的平均次数、受众特征等。

不过,如果您想查看一系列事件的完成率,而不是专注于特定事件,该怎么办?在 Google Analytics for Firebase 中,您可以使用漏斗来直观呈现并优化一系列应用事件的完成率。

创建漏斗

要创建渠道,请执行以下操作:

  1. 前往 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。
  2. 点击漏斗
  3. 点击新建渠道
  4. 输入渠道名称和说明。
  5. 选择要在渠道中用作步骤的前两个事件。
  6. 点击添加其他事件以添加更多步骤,然后选择相应事件。
  7. 点击创建

按照上述步骤创建以下漏斗:

#1 漏斗名称:级别成功率事件level_startlevel_successd3bc78ef61a261d7.png

#2 漏斗名称:激励广告完成率事件ad_reward_promptad_reward_impressionad_reward45c9542dfa663014.png

#3 漏斗名称:游戏完成率 事件game_startgame_completedab25e8501746d5f.png

查看漏斗分析

创建一些漏斗后,您可以在 Firebase 控制台的漏斗菜单中访问它们。点击列表中的漏斗名称,即可查看每个漏斗的详细分析。

620c0e84587c8ad4.png

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

c889f9b6ece15847.png

从上面的屏幕截图中,您可以看到在开始关卡(触发 level_start 事件)后通关(触发 level_success 事件)的用户百分比。在此处,您可以看到 46.2% 的用户已通关。

点击事件数后,系统会显示基于事件数量的指标,如下所示:

d044fb7b07e6e0d9.png

根据上图中的指标,在相应时间段内,有 116 次尝试(触发了 level_start 事件)和 57 次通关(触发了 level_success 事件)。

由于基于事件的完成率(49.1%) 略高于基于用户的完成率(46.2%),因此可以说,有少数人的表现优于其他人。

5. 将 Remote Config 集成到应用中

由于您可以根据应用事件和漏斗图获取一些有关应用的分析洞见,因此您可能需要优化应用。这通常包括对应用中的参数值进行微调。如需修改这些参数的值,您需要更新应用,以便将更改应用于用户。

通过使用 Firebase 中的 Remote Config,您无需更新应用即可调整这些值,这意味着您无需强制用户下载更新,即可更改应用行为,从而避免打扰用户。

在此 Codelab 中,您将学习如何使用 Remote Config 使奖励金额(观看激励视频广告后要公开的字母数)可调整,而无需更新应用。

添加 Firebase Remote Config SDK

  1. 下载 Firebase Unity SDK 5.5.0,并将其解压缩到方便的位置。
  2. 打开 Awesome Drawing Quiz Unity 项目,然后依次前往 Assets > Import Package > Custom Package
  3. 从解压缩的 SDK 中,导入 Remote Config SDK (dotnet4/FirebaseRemoteConfig.unitypackage)。
  4. 在“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 = trueFetchAsync(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 -> 添加您的首个参数按钮。

7f52617141c53726.png

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

cbc771fd1685b29c.png

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

d6a6aa4a60e06ee9.png

6. 使用 Remote Config 更改应用行为

现在,您可以在 Firebase 控制台中配置超棒的绘画测验中的奖励金额,而无需更新应用代码。

在本部分中,您将把奖励金额从 1 更改为 2,以便在观看激励广告后,应用再显示两个字符作为提示。

更新 reward_amount 参数的默认值

前往 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。点击 Remote Config,然后点击列表中的 reward_amount。接下来,将默认值更改为 2,然后点击更新按钮。

9a9bd8a26a39bfe3.png

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

d6a6aa4a60e06ee9.png

验证应用行为变更

如需确认应用行为变更,请再次运行项目。看完激励广告后,您会发现应用现在会显示两个字母作为奖励,这是我们在 Remote Config 控制台中配置的。

观看激励广告之前

奖励:揭示两个额外的字母

7. 创建实验以优化奖励金额

现在,您无需发布应用更新即可更改奖励金额。不过,如何确定更改量对应用有益?

借助 Firebase A/B Testing,您可以运行实验来优化应用的整体用户体验,而无需更新应用或构建单独的工具来运行和跟踪每个实验的效果。

设计实验

在创建新实验之前,您应先为实验设定明确的目标。在创建新实验之前,请务必检查以下清单。

  • 内容:您要优化什么?(例如,游戏难度、广告展示时间/可见性等)
  • 原因:您运行实验的业务目标是什么?(例如,最大限度地提高广告收入、提高用户留存率等)
  • Who:谁可以参与实验?(例如,所有用户、特定用户受众群体等)

在此 Codelab 中,您将创建一个实验来优化奖励金额值,以最大限度地提高 Awesome Drawing Quiz 的每日用户互动度。

创建实验

Firebase 控制台中打开“Awesome Drawing Quiz”项目。选择 A/B 测试菜单,然后点击创建实验按钮。

选择 Remote Config 以创建 Remote Config 实验。

f38a85328ab54e7e.png

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

15d552adb61c0b08.png

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

61b316741a63050f.png

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

694641b57d90ff65.png

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

10ed7f5b06858519.png

在此配置中,“奖励较少”组中的人员将获得一封信作为奖励,而对照组中的人员将获得两封信作为奖励。这样一来,您就可以了解奖励金额对用户的影响。

点击查看按钮后,您会看到实验概览,如下所示。

ae6477ce79f6265d.png

运行实验

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

7131bf9b4fa74fa5.png

8. 管理实验

查看实验进度

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

8a7009bdd8871d95.png

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

a4e7ca3e3f4711cd.png

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

e2d00fc27c053fd3.png

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

c3859d642f85cc52.png

向所有用户发布领先变体

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

86cb6a6c07516634.png

不过,即使实验尚未确定明确的领先变体,您仍然可以选择向所有用户发布某个变体。

在实验详情界面上,点击上下文菜单 ( 73afe611adf58774.png),然后点击发布变体

374e1c72be1d0656.png

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

e176f6e6a72c754.png

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

d65d545620ce93f6.png

9. 全部完成!

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