Android:A/B 测试平台如何即时修改资产?

Android: How do A/B testing platforms modify assets on the fly?

我试图弄清楚 A/B 测试 SDK 如何仅通过包含一行代码来替换从服务器发送的资产。我知道这可以通过对各种 UI 元素进行子类化来完成,但这需要大量的代码修改。

事实上,我在 A/B 测试方面的经验是使用 Google 标签管理器,它可以帮助我管理 "dynamic bundle"。将此捆绑包放入我的应用程序后,我会根据此捆绑包提供的值扩充布局、为元素着色等。看看 GTM docs,我相信您会发现一些有用的东西。

我是 Taplytics 的首席 Android 工程师。我们做的正是您所说的!

从本质上讲,它实际上非常简单。显然我不能详细说明我们正在做什么魔术,但我可以给你一个大概的想法!

首先,如果您是构建这些 A/B 测试的人,我绝对建议您对 UI 元素进行子类化。这样做比其他解决方案要快得多,因为它是您的代码 运行 当您想要它时(我将在稍后解释)。最简单的方法是继承 View 并从那里开始工作。

A/B 测试背后的技术与您从服务器获取并呈现给用户的几乎所有信息相同。真的没有区别。

现在,要解决您的 'one line of code' 评论,好吧,这就是秘诀。在 iOS,这些开发人员很幸运拥有 method swizzling,他们可以在其中真正看到何时调用方法并将其替换为自己的东西。这使事情变得相对容易!

但是 Android?好吧,没有这样的运气。查看 Android 上每个 A/B 测试/分析平台的输入参数:Foo.start(AppContext, "apiKey");

神奇之处在于 AppContext。 Appcontext 本质上是 Android 本身的一个接口。这就是它 Android 而不仅仅是 Java 的原因。 AppContext 有关于一切的信息:什么活动是 运行,什么时候 它们是 运行,正在传递什么意图,几乎所有的东西。 有了 AppContext,您就拥有了很多关于应用程序的控制权和信息。

从那里,您基本上构建了一个 AppContext 树。您需要从应用程序中获取的每一点信息都只是 AppContext 的分支。 AppContext -> 活动 -> 视图。 AppContext -> 活动 -> 视图 -> 片段 -> 片段视图。 AppContext -> 服务 -> 推送。 Mixpanel 实际上在他们的解决方案中称此为 'ViewCrawling',这可能会让您更好地了解正在发生的事情。

您只需创建这棵蜿蜒的大树,树枝延伸到应用程序的每个小方面,这样当您想要更改某些内容时,您可以在树中找到它! 一旦你有了你想要的东西,你只需从服务器(或本地缓存)获取信息,无论是 JSON 或 XML 或其他任何东西,并根据该信息进行所需的更改.

但正如我之前所说,请使用您自己的 UI 元素。在绘制元素之前确定需要更改的内容要容易得多。特别是如果您将 View 子类化,则根本不需要很多代码。在线安装非常方便,让 me(SDK 开发人员)的一切变得更加困难。但是我不能去要求人们将他们应用程序中的每个视图都更改为我自己的东西的子类,可以吗?

就是这样。它需要对 Android 的 SDK 有深入的了解,以便能够根据需要深入了解它的各个方面。这个想法很简单,但更深入的执行变得异常复杂。

我愿意回答任何问题!这是对这一切的一个真正粗略的概述,而且它变得更加复杂,所以问吧。

例如,Leanplum 公司为 iOS 和 Android 提供了可视化界面编辑器:这不需要编码,Leanplum 会自动检测元素并允许您更改它们。无需工程师或应用商店重新提交。

我是 Leanplum 的一名工程师;因此,让我给你更多关于它的见解:

  1. 通过在您的应用中安装 iOS 或 Android SDK,您可以启用一项称为可视化编辑器的功能。在开发模式下并打开网站仪表板时,SDK 会将有关视图层次结构的信息实时发送到您的浏览器。视图层次结构的扫描方式与在常规网站上构建 DOM 的方式类似。
  2. 您可以在您的应用中选择任何 UI 元素并实时更改它的外观。这通过识别视图树中的确切元素并将更改发送到 SDK 来实现。
  3. 这可以通过添加自定义挂钩或称为 "swizzling" 的技术来实现。看看这个 blog post,它是如何工作的。

要了解有关 Leanplum 可视化界面编辑器的更多信息,请查看 leanplum.com。他们提供 30 天免费试用。