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

1. 简介

假设您需要在 Play 商店中发布应用后调整应用中某些参数的值。通常,您应重新发布新版应用,并且用户也应在手机上更新应用。

一般来说,如果您想对应用进行持久性更改,应用更新会很有用。不过,如果您要经常调整应用中某些形参的值,该怎么办?或者,如果您想运行一些实验来找到最佳应用配置,该怎么办?

在这些情况下,应用更新将无法正常运行。因为更新需要一些时间才能完全传播给用户。此外,跨多个应用版本运行实验也相当具有挑战性。

此外,您如何确定应用的用户历程是否按预期运行?您可以参考 Play 管理中心内的用户评论。不过,它可能不够精确,无法做出明确的决定。

如果在此 Codelab 操作期间遇到任何问题(代码错误、语法错误、措辞含义不明等),都可以通过 Codelab 左下角的报告错误链接报告相应问题。

学习内容

  • 如何在 Google Analytics for Firebase 中创建漏斗
  • 如何使用 Firebase Remote Config
  • 如何运行 Firebase A/B 测试

所需条件

  • Android Studio 4.1 或更高版本
  • Google 账号
  • 搭载 Android 5.0 或更高版本的测试设备,以及用于连接设备的 USB 线;或者运行 AVD(Android 虚拟设备)的 Android 模拟器,且该模拟器具有支持 Play 商店/Google API 的系统映像

您如何评价自己在 AdMob 方面的经验水平?

新手水平 中等水平 熟练水平

您如何评价自己在 Firebase 方面的经验水平?

新手水平 中等水平 熟练水平

2. 设置开发环境

下载代码

点击以下按钮可下载本 Codelab 的所有代码:

解压下载的 ZIP 文件。此操作将解压缩名为 admob-firebase-codelabs-android-master 的根文件夹。

…或从命令行克隆 GitHub 代码库。

$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android

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

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

导入起始应用

启动 Android Studio,然后在欢迎界面中选择“导入项目”。然后,从下载的代码中选择 101-complete_and_102-base 目录。

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

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

  1. Awesome Drawing Quiz 项目的概览界面中,点击“设置”图标。9bacb5ada7cbaaf6.png
  2. 常规标签页下,选择要下载 google-service.json 文件的 Android 应用。
  3. 将配置文件移至项目中的 android_studio_folder.pngapp 目录中。797cde1881a38fdf.png

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 使奖励金额(观看激励视频广告后要公开的字母数)可调整,而无需更新应用。

将 Remote Config 添加到应用依赖项

我们先将 Firebase Remote Config 添加到应用依赖项中。

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Add Firebase Remote Config dependency (102)
    implementation 'com.google.firebase:firebase-config-ktx'

    ...
}

...

将您的项目与 Gradle 文件同步

为确保您的应用拥有所有依赖项,请将项目与 Gradle 文件同步。选择 File > Sync Project with Gradle Files 菜单,以将项目与 Gradle 文件同步。

设置 Remote Config 参数的默认值

从 Remote Config 中提取值需要网络连接。如果网络不可用,您应为每个 Remote Config 参数定义一个默认值。

res/xml 文件夹下创建 remote_config_defaults.xml 文件。然后,设置奖励金额的默认值(reward_amount)),如下所示。

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>reward_amount</key>
        <value>1</value>
    </entry>
</defaultsMap>

请注意,reward_amount 是 Remote Config 中参数的名称。

从 Remote Config 中提取奖励金额

修改 AwesomeDrawingQuiz.kt,使 GameSettings 类能够保存对 RemoteConfig 实例的引用。

请注意,RemoteConfig 实例已配置为在调试模式下从服务器提取最新值,以帮助完成开发流程。(通过调用 fetch(0L) 将最小提取间隔设置为 0 秒)

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    // COMPLETE: Provide FirebaseRemoteConfig instance (102)
    private fun provideGameSettings() = GameSettings(provideRemoteConfig())

    // COMPLETE: Add a function that provides a FirebaseRemoteConfig instance (102)
    private fun provideRemoteConfig(): FirebaseRemoteConfig {
        val rc = Firebase.remoteConfig.apply {
            setDefaultsAsync(R.xml.remote_config_defaults)
        }
        val fetchTask = if (BuildConfig.DEBUG) rc.fetch(0L) else rc.fetch()
        fetchTask.addOnCompleteListener {
            if (it.isSuccessful) {
                Log.d("AwesomeDrawingQuiz", "Remote config value fetched")
                rc.activate()
            }
        }
        return rc
    }
}

然后,更改 GameSettings 类以从 Remote Config 中提取奖励金额。

GameSettings.kt

// TODO: Add FirebaseRemoteConfig as a class member
class GameSettings(private val rc: FirebaseRemoteConfig) {

  ...

  // TODO: Apply reward amount from the Remote Config (102)
  val rewardAmount: Int
    get() = rc.getLong(KEY_REWARD_AMOUNT).toInt()

  companion object {
    ...

    // TODO: Add a key for 'reward_amount' Remote Config parameter (102)
    private const val KEY_REWARD_AMOUNT = "reward_amount"
  }
}

通过控制台创建 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 Android Codelab。您可以在 android_studio_folder.png102-complete 文件夹中找到此 Codelab 的完整代码。