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

Abh*_*tra 12 android ab-testing

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

Vic*_*cVu 5

我是Taplytics的首席 Android 工程师。我们完全按照你说的做!

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

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

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

现在,要解决您的“一行代码”注释,这就是秘诀。在 iOS 上,那些开发人员很幸运地拥有方法 swizzling,他们可以从字面上看到何时调用方法并将其替换为他们自己的东西。这让事情变得相对容易!

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

神奇之处在于 AppContext。Appcontext 本质上是 Android 本身的一个接口。这就是使它成为 Android 而不仅仅是 Java 的原因。AppContext 包含有关所有内容的信息:正在运行哪些活动、何时运行、正在传递哪些意图,几乎所有内容。有了 AppContext,您就拥有了大量关于应用程序的控制权和信息。

从那里,您基本上构建了一个 AppContext 树。您从应用程序中需要的每一点信息都只是从 AppContext 分支出来的。AppContext -> 活动 -> 视图。AppContext -> Activites -> Views -> Fragments -> Fragment Views。AppContext -> 服务 -> 推送。Mixpanel 在他们的解决方案中实际上将其称为“ViewCrawling”,这可以让您更好地了解正在发生的事情。

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

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

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

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