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

如何在iOS中进行简单的AB测试,ios,mobile-application,ab-testing,abtest,Ios,Mobile Application,Ab Testing,Abtest,我希望将我的用户群分成10个组,展示10个不同的UI,看看他们对此有何感受 因此,每个用户组将始终具有单一类型的UI i、 假设我有10k用户,当我在用户安装时推出下一个版本时,我将显示1000个用户1 UI和其他1000个用户1 UI,就像所有10k用户一样 我知道这可以在AB测试框架的帮助下完成 基本上,我想在应用程序启动时调用一个API,它必须返回1到10之间的值,然后我可以将其存储在我的密钥链中,下次启动应用程序时,我将查看它是否已经存在于密钥链中,我不会调用API 因此,基本上API将

我希望将我的用户群分成10个组,展示10个不同的UI,看看他们对此有何感受

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

i、 假设我有10k用户,当我在用户安装时推出下一个版本时,我将显示1000个用户1 UI和其他1000个用户1 UI,就像所有10k用户一样

我知道这可以在AB测试框架的帮助下完成

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

因此,基本上API将知道有多少请求已经到来,它将划分并发送正确的值

因此,基于keychain中的值,我将展示不同的UI,这里AB测试框架的工作将给我API部分的值1到10

网上有很多AB测试框架,但我找不到任何适合我需要的框架


感谢您的帮助

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

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

但如果不可能的话

然后,最简单的方法是生成一个介于1-10之间的随机数,并将其保存在keychain中,并为其显示一个特定的UI,以便下次启动应用程序时,您可以查看keychain中的值,如果没有,则可以创建一个新的随机值并将其存储在keychain中。这样,您将显示相同的UI对于该用户,始终

这种分割方法不是100%准确,但我认为它已经足够接近了

arc4random_均匀 如果你对这些随机数取样10000次,你可以看到每一个数都有900-1000次,这是9-10%,而且足够接近了

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

for(int i=0;i我想把这个答案归功于他指出的FireBase远程配置和A/B测试

正如提问者所问,我将解释实现它所涉及的步骤

服务器上的配置
  • 访问并使用您的 谷歌账户

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

  • 输入应用程序id和昵称,然后单击注册应用程序

  • 它将显示一个指向谷歌服务信息.plist下载的链接,然后将其拖放到项目中

  • 选择下一步

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

  • 从登录页选择远程配置

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

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

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

  • 目标用户中选择你的应用程序id,在目标用户百分比中选择100%,然后单击下一步,它将显示变体部分

  • 在变体部分,将有一个名为控制组的常规类别,默认情况下加载50%,变量框中填充50%,空框,您可以在其中输入任何名称,但我将输入变体2。现在单击添加参数8次,现在您可以看到每个变体有10%,并命名所有变体,我将d名称变体3、变体4至变体10

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

  • 然后出现目标部分,您可以选择其中一个,但我会选择保留(15天以上),然后单击回顾,然后单击开始实验,并在出现的提示中再次选择开始

在应用程序中集成
  • 在项目中添加以下pod

    pod 'Firebase/Core'
    
    pod 'Firebase/RemoteConfig'
    
         #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
    
  • 拖放在服务器配置期间下载的GoogleService Info.plist

  • 使用以下锅炉板代码启动firebase

      @import Firebase;
    
      -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions 
     {
    
       [FIRApp configure];
    
       return YES;
    
     }
    
  • 4.使用类RcValues,这是项目中的另一个锅炉板代码

    pod 'Firebase/Core'
    
    pod 'Firebase/RemoteConfig'
    
         #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]; 
    
    这将下载密钥值以进行测试

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

        self.flavourNumber.text=[FIRRemoteConfig.remoteConfig
        configValueForKey:@"ABTestVariationType"].stringValue;
    
    根据键值,您可以根据需要显示不同的UI

    Firebase将负责发送正确的值,您不必担心自己将用户分成多个组

    附笔 请按照下面的教程获取更详细的信息这只是一个摘要,我会尝试总结或添加更多的图片,当我有空闲时间,使它更容易理解如果可能的话,我会尝试在github中添加示例项目