版本记录
版本号 | 时间 |
---|---|
V1.0 | 2021.04.03 星期六 |
前言
Firebase是一家实时后端数据库创业公司,它能帮助开发者很快的写出Web端和移动端的应用。自2014年10月Google收购Firebase以来,用户可以在更方便地使用Firebase的同时,结合Google的云服务。Firebase能让你的App从零到一。也就是说它可以帮助手机以及网页应用的开发者轻松构建App。通过Firebase背后负载的框架就可以简单地开发一个App,无需服务器以及基础设施。接下来几篇我们就一起看一下基于Firebase平台的开发。感兴趣的看下面几篇文章。
1. 基于Firebase平台开发(一) —— 基于ML Kit的iOS图片中文字的识别(一)
2. 基于Firebase平台开发(二) —— 基于ML Kit的iOS图片中文字的识别(二)
3. 基于Firebase平台开发(三) —— Firebase基本使用简介(一)
4. 基于Firebase平台开发(四) —— Firebase基本使用简介(二)
5. 基于Firebase平台开发(五) —— Firebase基本使用简介(三)
6. 基于Firebase平台开发(六) —— 基于Firebase Analytics的App使用率的跟踪(一)
开始
首先我们看下写作内容:
iOS A / B
测试是测试iOS应用中用户体验的有效方法。 了解Firebase
如何使运行实验和查看结果变得容易。内容来自翻译。
接着看下写作环境:
Swift 5, iOS 14, Xcode 12
下面就是正文啦。
我们都听说过有关某个开发人员如何更改按钮标签或欢迎屏幕流程的故事,突然发现他们的保留率或应用程序内购买率猛增了一些。
也许您的待办事项清单包含“experiment with my purchase button”
项仍在等待检查中,因为您发现正确运行这些实验是一项繁重的工作。
Firebase Remote Config Tutorial for iOS教程向您展示了如何使用远程配置即时更新应用程序的某些部分,以及如何向特定国家/地区的用户提供自定义内容。
本后续教程将通过试验不同的值并查看结果以找出哪个值更有效,来探索如何使用Firebase Remote Config
进行A / B
测试。
先决条件:本教程旨在遵循 Firebase Remote Config Tutorial for iOS。也就是说,如果您已经熟悉
Firebase Remote Config
并曾经使用过它,则可能无需完成第一个教程就可以跳入该教程。
即使您具有以前的Remote Config
教程中的项目,也最好从新的启动程序项目开始,因为它使用最新的Firebase
版本。必需的库已作为Swift Package Manager
的软件包添加,并且在第一次打开项目时可能需要一些时间来加载。
注意:在撰写本文时,
Firebase
支持通过Beta
中的SwiftPM
进行安装。存在一些已知问题,如果尝试在设备上运行该应用程序,则可能会出错。如果您这样做,请参考this workaround来修复它。
1. Creating a Firebase Project
如果您已经使用Google Analytics
(分析)为之前的Remote Config
教程创建了一个项目,则可以跳过此部分。如果没有,请按照以下说明创建您的项目:
- 1) 前往https://console.firebase.google.com。
- 2) 如果这是您的第一个项目,请单击
Create a project
。否则,请单击Add project
。 - 3) 将您的项目命名为
Planet Tour
,然后单击Continue
。
- 4) 将
Google Analytics
(分析)添加到您的项目中(默认情况下处于打开状态),然后单击Continue
:
- 5) 选择您的地区,阅读并接受使用条款。 然后单击
Create project
:
接下来,将iOS应用添加到项目中。 单击iOS
按钮,然后按照以下说明进行操作:
- 1) 添加项目的
bundle ID
——com.raywenderlich.PlanetTour
—— 给它一个有趣的昵称,将App Store ID
字段留空,然后单击Register app
:
- 2) 下载
GoogleServices-info.plist
文件,然后单击Next
。 - 3) 在
Xcode
中打开PlanetTour.xcodeproj
,然后将下载的GoogleServices-info.plist
文件拖到Planet Tour
项目中(如果需要,请选择Copy Items if Needed
)。 - 4) 返回浏览器,转到
Firebase
控制台。 单击下一步按钮,完成接下来的几个步骤(数字3和4)。 - 5) 在第5步上按
Continue to the console
构建并运行您的应用程序。 您应该会看到我们太阳系的美丽之旅。 单击一些行星以查看有关它们的详细信息:
如果您不熟悉该项目,请查看RCValues.swift
以了解如何在项目中使用Remote Config
。 然后,返回主屏幕并查看底部的横幅,该横幅中的应用程序要求您注册newsletter
。
单击“Get our newsletter!”
。 现在,您将要通过一些A / B
测试来优化此屏幕。
An Introduction to iOS A/B Testing
Planet Tour Inc.
的高层担心,没有足够的人订阅Planet Tour newsletter
。 毕竟,如果您无法通过电子邮件向人们发送有关激动人心的Planet Tour
新优惠的信息,那么如何建立成功的业务呢?
市场营销人员有一个理论。如果将Subscribe
按钮的标签更改为Continue
,则可能会获得更多订阅者。在阅读时,也许您应该尝试将横幅文本从Get our newsletter
更改为Get more facts
。
现在,您的应用程序已从Remote Config
获取其数据,因此可以轻松进行这些更改。在Firebase
控制台中发布这些新值仅需花费几秒钟的时间。然后,一周后,您可以查看是否有更多的新闻通讯订阅者。简单吧?
如果您无法将更改与newsletter sign-up
的更改区分开,则可能会得出错误的结论。
理想情况下,您希望同时发布两个版本的应用程序。 一组随机用户可以看到新的新闻标签,另一组用户可以看到当前的新闻标签。 只要这两个组没有偏差,就可以比较它们之间的结果。 每个组中的用户越多,您越有信心将差异归因于您所做的更改,而不是某些外部因素。
嗯,这就是A / B
测试,这是进行此类实验的常用方法。许多大型公司已经建立了自己的基础架构来运行和衡量这些测试。您可以使用Firebase Remote Config
随附的便捷工具加入这些较大的公司。
Adding Analytics to Your App
创建A / B
测试的主要步骤之一就是告诉Firebase
实验目标。有时,这可能是一个高层目标,例如增加保留率(几天后有多少用户返回)或用户参与度(每天用户在应用上花费了多少时间)。但有时,这可能是一个特定的目标,例如增加访问您的应用内商店的用户数量。或者,在这种情况下,增加了注册Planet Tour newsletter
的用户数量。
当然,Firebase
知道用户是否已注册newsletter
的唯一方法是告诉您。为此,您将使用Firebase Analytics
。因此,在开始在您的应用中创建A / B
测试之前,您应该在应用中添加一些分析数据,以便为您制定一些目标。
注意:有关
Firebase Analytics
的更多信息,请查看Firebase Analytics: Getting Started。
1. Adding Events
与大多数其他移动分析解决方案一样,Firebase Analytics
也使用基于事件的模型。 当用户在您的应用中执行操作时,Firebase Analytics
会将事件发送到其服务器。 稍后,这些服务器将处理这些事件,并将其转变为有意义的图形,供您分析。
打开ContainerViewController.swift
。 将以下内容添加到文件的顶部:
import Firebase
接下来,将以下内容添加到viewDidLoad()
的末尾:
Analytics.logEvent("mainPageLoaded", parameters: nil)
当您的用户首次启动应用程序并将其发送到主屏幕时,这将发送一个名为mainPageLoaded
的事件。parameters
参数是与此事件关联的键/值对的可选字典。 您此处不需要任何内容,因此请保留为nil
。
接下来,打开GetNewsletterViewController.swift
。 将以下内容添加到文件的顶部:
import Firebase
将以下内容添加到viewDidLoad()
的末尾:
Analytics.logEvent("newsletterPageLoaded", parameters: nil)
最后,将以下内容添加到submitButtonWasPressed(_ :)
的末尾:
Analytics.logEvent("newsletterSubscribed", parameters: nil)
现在,当用户首次访问主页或新闻稿页面以及单击Submit
按钮注册newsletter
时,您的应用程序将触发不同的分析事件。
2. Enabling Debug View
在构建和运行之前,您需要打开Firebase Analytics
调试模式,该模式可让您在控制台中查看所有这些Analytics
(分析)调用的结果。
为此,选择Product ▸ Scheme ▸ Edit Scheme
。 在Run scheme
中,选择Arguments
。 在Arguments Passed On Launch
中,单击+
符号,然后输入参数-FIRAnalyticsDebugEnabled
。 确保在开始处包含破折号。
完成后,您应该会看到以下内容:
关闭对话框,然后构建并运行。 现在,您将在控制台中看到更多输出。 文本如下:
[Firebase/Analytics][I-ACS023051] Logging event: origin, name, params: app, mainPageLoaded, {
firebase_event_origin (_o) = app;
firebase_screen_class (_sc) = WaitingViewController;
firebase_screen_id (_si) = 5917351895999520221;
}
如果您无法手动找到控制台,则可以单击控制台并按Command-F
,然后在搜索框中输入mainPageLoaded
进行查找。
当您点击Get our newsletter!
(或Get more facts!
),该应用程序还将将此内容记录到您的控制台中:
[Firebase/Analytics][I-ACS023051] Logging event: origin, name, params: app, newsletterPageLoaded, {
firebase_event_origin (_o) = app;
firebase_screen_class (_sc) = ContainerViewController;
firebase_screen_id (_si) = 5917351895999520222;
}
当您点击Subscribe
时,它将记录一个类似的事件。
通过转到Firebase
控制台的Debug View部分,您还应该能够几乎实时地看到这些结果。 这将使您知道Firebase
从启用了调试模式的设备收到的任何事件。 这些不仅包括您添加的事件,还包括Firebase
为您测量的其他事件,例如screen_view
和user_engagement
。
3. Debug Mode Considerations
由于您已打开调试模式,因此Firebase Analytics
在向其服务器发送数据方面非常积极。当其拥有的数据超过10秒时,或者当您的应用移至后台时,它都会发送一批数据。在正式版(production)
应用中,这种行为可能会耗尽手机的电池寿命。因此,当您未打开调试模式时,Firebase Analytics
会在其数据使用时间超过一个小时或您的应用进入后台时发送数据。
顺便说一句,此debug
设置确实存在。因此,如果您想关闭Analytics debug
调试模式(例如,要对应用程序的电池性能进行压力测试),则可以禁用该标志,然后删除并重新安装该应用程序,或者通过更改该标志为-noFIRAnalyticsDebugEnabled
显式关闭调试模式。
注意:在撰写本教程时,您创建的事件大约需要24小时才能传到
A / B
测试系统。您无需等待那么长时间即可继续学习本教程。但是请记住,您可能需要选择与这些事件之一不同的目标。
注意:在
RCValues.swift
中,您设置了minimumFetchInterval = 0
,因此Firebase
不会限制更新。但是有时,尤其是对于一个新项目,您仍然会受到限制。如果发生这种情况,请等待一个小时或重置模拟器,然后重试。
Creating Your First A/B Test
转到Firebase
控制台的A/B Testing部分。 如果系统提示您选择一个项目,请选择您创建的Planet Tour
项目。 点击Create experiment
:
选择Remote Config
以使用远程配置服务器端配置参数创建具有应用程序行为的实验:
您会看到一个用于创建新实验的表格。前几个Field
应该很容易填写。给您的实验起一个名称,例如Newsletter sign-ups
以及所需的任何描述,然后单击Next
。
注意:您会在此处看到一条注释,说明
Firebase A / B
测试最多可以持续90天。值得一提的是,在这段时间之后,如果您想继续收集数据,则需要开始一个新的A / B
测试。
1. Defining Targeting
对于Targeting
,请确保您从下拉列表中选择您的iOS应用(完整面板请参见下文)。您没有Android
应用程序,但是即使您安装了Android
应用程序,也有必要在不同平台上分别进行试验,因为您的应用程序(或用户)在不同平台上的行为可能会大不相同。
因为您正在尝试使用text label
,所以将实验范围限制在说英语的用户是很有意义的。单击and
按钮,选择Languages
,然后从第二个下拉列表中选择English
。
最后,您可以决定要投入此实验的用户百分比。参与您的实验的用户越多,您对结果的信心就越大。但是,如果您尝试的某些冒险活动可能激怒您的社区或使您的应用内经济陷入混乱,那么将这类人群保持在较小水平可能是有道理的。
因为您的更改看起来很安全,所以您可能可以负担得起增加此百分比。开始时30
似乎是一个很好的百分比。
完成后,实验面板的第一部分应如下所示:
2. Defining Goals
单击Next
转到Goals
部分。 这就是您想要在您的应用程序中实现最大化的东西。 就您而言,您希望增加之前创建的newsletterSubscribed
事件的发生。
假设已经过去了足够的时间使您在上一节中创建的事件已进入A / B
测试系统,则您应该在下拉列表中看到newsletterSubscribed
作为您的目标之一列出。 如果有,请选择它。 如果尚不存在,请创建它:
Firebase
已经包含了一些其他次要目标以及主要目标。这些额外的目标有助于获得实验的“全景”视图。它们有助于确保您不会意外地损害您的保留率,因为您过于专注于newsletter
订阅。
3. Defining Variants
单击Next
移至Variants
部分。在这里,您将为实验中的不同人员分配不同的Remote Config
值。
首先尝试在主屏幕底部的小横幅中显示不同的文本变体。此值由Remote Config
变量subscriptionBannerButton
设置。
单击Choose or create new
。如果您在以前的 Firebase Remote Config Tutorial for iOS中使用了此应用程序,则可能会在下拉列表中看到这些参数的名称。如果您不必使用它们,也可以创建新的!因此,输入subscribeBannerButton
并选择Create parameter
选项:
现在,您可以选择为实验中的不同变体添加不同的subscriptionBannerButton
值。
对于您的control group
,将此值保留为(empty string)
的默认值。 如果用户不在您的实验中,这将告诉Remote Config
使用它将使用的任何值。 对于您而言,这将是Get our newsletter!
的默认值! 如RCValues.swift
中的设置。 通常,最好将控制组值设置为(empty string)
。 这是将更改与应用程序中当前运行的内容进行比较的最佳方法。
对于下一个变体,将subscribeBannerButton
的值设置为Get more facts!
。
您的面板现在应如下所示:
您还将要尝试使用GetNewsletterViewController
中显示的按钮 —— 这是名为subscriptionVCButton
的参数。 单击Choose or create new
,然后使用该名称创建一个新参数。
4. Clarifying the Cause of a Change
您可以像这样在Variant A
中进行此更改:
更好的选择是尝试几种变体中的所有不同组合。 这项技术称为multi-variant testing
,现在您将执行一个简单的版本。 将Variant A
中的subscriptionVCButton
设置为(empty string)
。
单击Add Variant
,这一次,将subscribeBannerButton
设置为默认值,并将subscribeVCButton
的值设置为Continue
。 然后,再次单击Add Variant
,并给subscribeBannerButton
赋予Get more facts!
的值,并将subscribeVCButton
的值设置为Continue
。
现在,您的实验面板应如下所示:
您已经成功添加了三个variants
。 两个变量分别单独更改两个变量,而一个变量同时更改两个变量。 您也可以在此处创建其他变体来测试其他字符串!
创建实验已完成! 单击Review
。
Testing Your Experiment
您可能想在将实验推向世界之前对其进行测试。 幸运的是,Firebase
使得在单个设备上尝试所有实验变型变得容易。 为此,您将需要您的Instance ID token
,这是分配给您应用的每个实例的唯一标识符。
要获取它,请返回Xcode
中的Planet Tour
并打开AppDelegate.swift
。 然后,在对FirebaseApp.configure()
的调用之后添加以下内容:
Installations.installations().authToken { result, _ in
print("Your instance ID token is \(result?.authToken ?? "n/a")")
}
构建并运行您的应用程序。 您应该在Xcode控制台的某处看到类似以下内容的行:
返回Firebase Console
控制台中的实验,然后单击Start experiment
按钮旁边的Menu
按钮。 然后,单击Manage test devices
:
在出现的对话框中,从Xcode
控制台复制并粘贴大instance ID token
字符串。 然后,从下拉列表中选择一个变量 —— 我喜欢尝试variant C
,因为您可以一次测试两个更改:
单击Add
。 然后,单击Save
。
退出并重新启动您的应用程序。 由于您的应用程序明确将Remote Config
缓存时间设置为零(如果您需要对此进行刷新,请参阅以前的Firebase Remote Config Tutorial for iOS),因此您应该立即看到新值:
也可以尝试其他variations
。 只需重新访问Manage test devices
对话框,从下拉列表中选择其他变量,然后单击Save
,重新启动应用程序后,您应该在测试设备(或模拟器)上看到该变量。
Launching an Experiment
测试完所有变量后,您对每种变量在测试设备上的外观感到满意后,就可以开始进行真实的实验了。 返回Firebase A / B
测试控制台,单击Start Experiment
,然后单击Start
。
此时,将随机选择30%
的说英语的观众使用您的四种不同变量之一。 A / B
测试将衡量他们的进度,记下其中有多少人达到了订阅newsletter
的最终目标,并最终告诉您哪种变量可以最好地指导您的用户实现该目标。
Understanding Your Experiment Results
Firebase A / B
测试不仅告诉您哪个变量的user subscribed to newsletter
率最高。 它还使用一些称为贝叶斯统计的奇特数学来告知您这些差异是否是由于您对应用程序所做的更改而不是随机机会造成的。 这就是人们通常使用statistically significant
的意思。
为了使此数学有效,Firebase
需要在相当多的用户上尝试这些不同的变量。 尽管Planet Tour
是一款可爱的应用程序,但它仍然是一个测试应用程序,用户总数为1
。 这意味着,在本教程中,Firebase A / B
测试不会收集足够的数据以给您任何有意义的结果,并且可能会留下一个类似以下的屏幕:
这是一个通过真实的实时应用完成的实验示例,它带来了明显的改善:
这里有很多统计数据,但是这里有一些重要的统计数据:
顶部的巨大标签为您提供了实验的执行摘要。 在这种情况下,它告诉您名为Guidebot and group
的变体,并且组将基线提高了8%
。 请注意,您的变量被无聊地命名为Variant A, Variant B and Variant C
,但是,您可以根据需要实际重命名它们,以便为其命名。
在其下方,您将看到一个图表,比较了每个变量随时间变化的效果:
再往下看,您将看到每个变量与您的对照组的比较情况,作为您要衡量的每个目标的总体改进范围:
例如:
- 在
Modeled data
下,您可以看到它预测Guidebot and group
在提高保留率方面的表现将比对照组高0.3%
至16.6%
。 由于这肯定是一种改善,因此以绿色显示并带有向上箭头。 -
Observed data
可测量实验的更多原始数据。 在这种情况下,您可以看到Guidebot and group
保留了1,145
个用户,而对照组仅保留了1,064
个用户。
Rolling Out an Experiment
根据实验的结果,您可能需要采用其中一种变量,然后将其推送给应用程序的所有用户。 如果您的实验有明确的获胜者,您应该会看到一个按钮,显示Roll out variant
。
单击此按钮将停止实验,并为您提供一个对话框,该对话框允许您将获胜变量中的所有变量作为每个人的新默认值发布到Remote Config
中。 就像这样,您的new newsletter
选项已向全世界公开!
您可以使用Firebase Analytics和Remote Config进行更多操作,您随时可以阅读文档以了解更多信息。
后记
本篇主要讲述了
iOS
的A/B Test
,感兴趣的给个赞或者关注~~~