如何在iOS中进行简单的AB测试

时间:2018-06-21 15:32:07

标签: ios mobile-application ab-testing abtest

我希望将用户群划分为10个组,并显示10个不同的UI,并了解他们的感受。

因此每个用户组将始终具有单一类型的UI。

也就是说,我有1万个用户,当我在安装用户时推出下一个发行版时,将显示1000个用户1个UI和另一个1000个用户1个UI,如所有1万个用户。

我知道可以借助AB测试框架来做到这一点。

基本上,我想在应用启动时调用一个API,并且它必须返回1到10之间的值,然后可以将其存储在钥匙串中,下次启动应用时,我将查看它是否已存在于钥匙串中,并且我不会调用该API。

因此,基本上,API会知道有多少个请求,它将进行划分并将正确的值发送回去

因此,根据钥匙串中的值,我将显示不同的UI,并且AB测试框架的工作将为我提供价值1到10的API部分。

网上有很多AB测试框架可用。但是我找不到适合我需要的框架。

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

最好的方法是将用户分成数据库中的组,然后让登录API或其他API返回一些标志以指示每个用户所属的组,然后您可以相应地显示UI。

但是如果不可能的话

然后,最简单的方法是在1-10之间生成一个随机数,并将其保留在钥匙串中,并为其显示一个特定的UI,以便下次启动应用程序时,可以在钥匙串中查找值,以及是否需要在那里,您可以创建一个新的随机值并将其存储在钥匙串中。这样,您将始终为该用户显示相同的用户界面。

这种拆分方法并非100%准确,但我想说的足够接近

arc4random_uniform

- (NSInteger)randomNumberBetween:(NSInteger)min maxNumber:(NSInteger)max
{
    return min + arc4random_uniform((uint32_t)(max - min + 1));
}

如果您对这些随机数进行10000次采样,则可以看到每个数字出现900-1000次,即9-10%,并且其接近度

 for(int i=0;i<10000;i++){
      NSLog(@"random:%ld",[self randomNumberBetween:1 maxNumber:10]);
    }

当前时间秒数

您可以使用当前日期和时间的秒数,如果秒数在1-6之间,则可以在钥匙串中保存值1,对于7-12,您可以在钥匙串中保存值2。54-60您可以将价值10保留在钥匙串中。

其他

您可以考虑根据地理位置,国家/地区或时区来划分用户,并且这样做也有其自身的失误。

像这样,您可以设计自己的策略来划分用户

但是,如果以上建议都不符合您的标准,那么最好的方法就是寻找第三方AB测试框架,但是如果要在企业规模中实施,他们可能会为此付费。

如果我遇到了任何一个仅提供此特定功能的框架(如您所要求的,我将在此处进行更新)。

答案 1 :(得分:3)

想象一下在不提交新版本的情况下更改iOS应用程序中的字体,颜色或某些值。使用远程配置非常简单。 tutorial将教您A / B测试,但是在A / B测试之前,我建议您先了解一下Remote Config。

答案 2 :(得分:2)

我想将此答案归功于post,因为他指出了 FireBase远程配置 A / B测试

正如提问者所问,我将解释实现该目标所涉及的步骤。

服务器上的配置

  • 访问https://console.firebase.google.com/并使用您的登录 google帐户。

  • 选择创建项目,然后单击 iOS

  • 键入应用ID 昵称,然后单击注册应用

  • 它将显示指向 GoogleService-Info.plist 下载的链接,然后将其拖放到项目中

  • 选择下一步

  • 它将向您显示运行您的应用以验证安装,您可以选择跳过此步骤

  • 从登录页面选择远程配置

  • 选择添加变量并输入您选择的变量名称,但我输入 ABTestVariationType 并将值保留为空,然后选择发布更改

  • 侧边栏中选择 A / B测试,然后单击创建实验,然后选择远程配置

  • 在随后出现的弹出窗口中,输入您选择的名称,作为 A / B测试POC 输入有关它的一些描述,但这仍然是可选的

  • 目标用户中选择您的应用ID ,并在目标用户百分比中选择 100%< / strong>,然后点击下一步,它将显示变体部分

  • 在“变体”部分中,将有一个名为 Control group 的常规类别,默认情况下已加载50%,并填充了50%的变体框和空框,您可以输入任何名称这样,我将输入变体2。现在单击添加参数8次,现在您可以看到每个变体具有10%的名称,并将所有变体命名,然后将变体3,变体4命名为变体10。

  • 在同一变体部分中,从远程配置
    中单击添加参数。 现在您可以看到每个变体参数旁边都出现一个框,您可以输入唯一的值来识别每种口味。我将为第一个变体输入值1,为第二个变体输入值2,就像我最后一个输入值10变体,然后单击下一步

  • 然后出现目标部分,您可以选择其中之一,但我会选择保留(15+)天,然后点击查看,然后点击开始实验,然后在出现的提示中,再次选择开始

集成到应用程序中

  1. 在您的项目中添加以下Pod

    pod 'Firebase/Core'
    
    pod 'Firebase/RemoteConfig'
    
  2. 拖放在服务器配置期间下载的 GoogleService-Info.plist

  3. 使用以下样板代码启动Firebase

      @import Firebase;
    
      -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions 
     {
    
       [FIRApp configure];
    
       return YES;
    
     }
    

4。具有类 RcValues ,这是项目中的另一个样板代码

     #import "RcValues.h"  

     @import Firebase;

     @implementation RcValues

     +(RcValues *)sharedInstance 
     {

      static RcValues *sharedInstance = nil;

      static dispatch_once_t onceToken;

      dispatch_once(&onceToken, ^{

        sharedInstance = [[RcValues alloc] init];
      });

       return sharedInstance; 

     }

   -(id)init{

     self=[super init];

     if(self)
     {

      [self AcivateDebugMode];

      [self LoadDefaultValues];

      [self FetchCloudValues];

     }

     return self;

    }

   -(void)LoadDefaultValues    
   { 

    [FIRRemoteConfig.remoteConfigsetDefaults:
    @{@"appPrimaryColor":@"#FBB03B"}]; 

   }

   -(void)FetchCloudValues
   {

     NSTimeInterval fetchInterval=0;

    [FIRRemoteConfig.remoteConfigfetchWithExpirationDuration:
    fetchInterval completionHandler:^(FIRRemoteConfigFetchStatus 
    status, NSError *_Nullable error) 

     {

       NSLog(@"error:%@",error);

      [FIRRemoteConfig.remoteConfig activateFetched];

      }]; 
    }

  -(void)AcivateDebugMode{ //    

   FIRRemoteConfig.remoteConfig.configSettings=debugSettings;

   FIRRemoteConfigSettings *config = [[FIRRemoteConfigSettings alloc] initWithDeveloperModeEnabled:YES];

   FIRRemoteConfig.remoteConfig.configSettings=config;
  }

  @end

5。在appdelegate didFinishinglaunchoptions中调用该类

    RcValues *Obj=[RcValues sharedInstance]; 

这将下载用于ABtesting的键值

6。使用下面的代码将AB测试密钥从firebase获取到您的应用程序

    self.flavourNumber.text=[FIRRemoteConfig.remoteConfig
    configValueForKey:@"ABTestVariationType"].stringValue;

根据键值,您可以根据需要显示不同的UI。

Firebase将负责发送正确的值,您不必担心自己将用户分为几类。

P.S

请按照以下教程获取更多详细信息,这只是一个摘要,如果有空闲时间,我将尝试总结或添加更多图片,以便于更容易理解,我将尝试在github中添加示例项目,在这里链接

firebase-tutorial-ios-ab-testing

firebase-remote-config-tutorial-for-ios