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_start、level_successd3bc78ef61a261d7.png

#2 漏斗名称:激励广告完成率事件:ad_reward_prompt、ad_reward_impression、ad_reward45c9542dfa663014.png

#3 漏斗名称:游戏完成率 事件:game_start、game_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 = 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 -> 添加您的首个参数按钮。

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 的完整代码。