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

1. 简介

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

一般来说,如果您想对应用提交长期更改,可以通过应用更新。但是,如果您要频繁调整应用中某些参数的值,该怎么办?或者,如果您想运行一些实验来找到最佳应用配置,该怎么办?

在这种情况下,应用更新将无法正常运作。因为更新完全传播到用户需要一些时间。此外,跨多个应用版本运行实验也是一项极具挑战性的工作。

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

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

学习内容

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

所需条件

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

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

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

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

<ph type="x-smartling-placeholder"></ph> 新手 中级 熟练

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,然后在欢迎屏幕中选择 Import project。然后,从您下载的代码中选择 101-complete_and_102-base 目录。

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

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

  1. Awesome Drawing Quiz 项目的概览屏幕中,点击“Settings”图标。9bacb5ada7cbaaf6.png
  2. 常规标签页下,选择 Android 应用以下载 google-service.json 文件。
  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

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

查看漏斗分析

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

620c0e84587c8ad4

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

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 文件同步。选择文件 >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

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

cbc771fd1685b29c.png

点击发布更改按钮,使更改对用户生效。

d6a6aa4a60e06ee9.png

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

现在,您可以在 Firebase 控制台中配置 Awesome Drawing Quiz 中的奖励数量,而无需更新应用代码。

在本部分中,您需要将奖励数量从 1 改为 2,使应用在观看激励广告后显示另外 2 个角色作为提示。

更新 Reward_amount 参数的默认值

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

9a9bd8a26a39bfe3

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

d6a6aa4a60e06ee9.png

验证应用行为变更

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

观看激励广告之前

显示了额外的两个字母作为奖励

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

现在,您无需发布应用更新即可更改奖励数量。不过,如何确定您做出的更改对应用是否有利呢?

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

设计实验

在创建新实验之前,您应该先设定明确的实验目的。在创建新实验之前,请务必通读以下核对清单。

  • 内容:您希望优化哪些方面?(例如,游戏难度、广告投放时机/展示率等)
  • 原因:您运行实验的业务目标是什么?(例如,尽可能提高广告收入、提高留存率等)
  • 参与者: 哪些人需要参与实验?(例如 所有用户、特定用户受众群体等)

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

创建实验

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

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

f38a85328ab54e7e.png

将实验命名为“Amount of the Reward”(奖励金额),如以下屏幕截图所示。

15d552adb61c0b08.png

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

61b316741a63050f

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

694641b57d90ff65

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

10ed7f5b06858519

采用这种配置时,“较少奖励”组中的参与者将收到一封信作为奖励,对照组中的成员将收到两封字母作为奖励。因此,您将看到奖励数量对用户有何影响。

点击审核按钮后,您会看到如下实验概览。

ae6477ce79f6265d.png

运行实验

点击启动实验按钮以运行实验。请注意,实验开始后便无法更改配置。

7131bf9b4fa74fa5

8. 管理实验

查看实验进度

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

8a7009bdd8871d95

点击列表中的实验后,即可查看实验详情。在实验可以声明领先变体(即效果最佳的变体)之前,您会看到“声明领先变体为时过早”消息。

a4e7ca3e3f4711cd.png

实验运行了一段时间后,就会开始在改进情况概览部分下显示实验期间到目前为止收集的数据。您可以比较各个变体的效果,了解哪个变体的效果更好。以下屏幕截图显示了“改进概览”部分的示例。

e2d00fc27c053fd3.png

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

c3859d642f85cc52.png

向所有用户发布主要版本

在实验运行了很长时间后,只要您找到领先变体(即胜出变体),就可以向所有用户发布该实验了。一旦 A/B Testing 找到明显领先的变体,就会鼓励您向所有用户发布领先变体。

86cb6a6c07516634

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

在实验详情屏幕上,点击上下文菜单 ( 73afe611adf58774),然后点击发布变体

374e1c72be1d0656

选择要向所有用户发布的变体,然后点击在 Remote Config 中查看按钮,先查看相应更改,然后再在 Remote Config 中进行更改。

e176f6e6a72c754.png

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

d65d545620ce93f6.png

9. 全部完成!

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