我试图找出A / B测试SDK如何通过仅包含一行代码从服务器发送时替换资产。我知道这可以通过对各种UI元素进行子类化来完成,但这需要大量的代码修改。
答案 0 :(得分:4)
我是Taplytics的首席Android工程师。我们正在做你正在谈论的事情!
核心,它实际上非常简单。显然我无法详细了解我们正在做什么魔术,但我可以给你一个大致的想法!
首先,如果您是构建这些A / B测试的人,我绝对建议您继承您的UI元素。这样做比其他解决方案要快得多,因为它是你的代码运行时(我稍后会解释)。最简单的方法是继承View
并从那里开始工作。
A / B测试背后的技术与从服务器获得并呈现给用户的任何信息相同。确实没有区别。
现在,为了解决你的“一行代码”评论,那就是秘密的问题。在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的子类,你根本不需要很多代码。 One-line安装非常方便,使得 me (SDK dev)的一切变得更加困难。但我不能去请求人们将他们应用中的每个视图都更改为我自己的东西的子类,是吗?
就是这样。它需要对Android SDK的深入了解才能在必要时抓取其中的每个方面。这个想法很简单,但更深层次的执行变得异常复杂。
我对任何问题持开放态度!这是一个真实粗略的概述,它变得更加复杂,所以请求。
答案 1 :(得分:1)
事实上,我在A / B测试方面的经验是使用Google跟踪代码管理器,这有助于我管理“动态捆绑”。将此捆绑包放在我的应用程序中,我会扩展布局,为元素着色,以便根据此捆绑包提供的值。看看GTM docs,我相信你会发现一些有用的东西。
答案 2 :(得分:1)
例如,Leanplum公司为iOS和Android提供了一个可视化界面编辑器:这不需要编码,Leanplum将自动检测元素并允许您更改它们。无需工程师或应用商店重新提交。
我是Leanplum的工程师;因此,让我更多地了解它:
要了解有关Leanplum Visual Interface Editor的更多信息,请查看leanplum.com。他们提供30天的免费试用。