10

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

所以每个用户组总是有单一类型的 UI。

即假设我有 10k 用户,当我在用户安装时推出下一个版本时,我将显示 1000 个用户 1 UI 和另外 1000 个用户 1 UI,就像所有 10K 用户一样。

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

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

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

所以基于钥匙串中的价值,我将展示不同的、不同的 UI,在这里 AB 测试框架的工作将给我价值 1 到 10 的 API 部分。

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

任何帮助表示赞赏!

4

3 回答 3

7

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

但如果那不可能

然后最简单的方法是生成一个介于 1-10 之间的随机数并将其保存在钥匙串中并为其显示特定的 UI,以便下次启动应用程序时,您可以查看钥匙串中的值,如果不存在则您可以创建一个新的随机值并将其存储在钥匙串中。这样您将始终为该用户显示相同的 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 测试框架,但如果要在企业规模上实施,他们可能会为此收取一些费用。

如果我遇到任何这样的框架,只要按照你的要求提供这个特定的功能,我就会在这里更新它。

于 2018-06-27T17:04:57.137 回答
6

我想将这个答案的功劳归功于这篇文章,因为他指出了FireBase Remote Config and A/B testing

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

服务器上的配置

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

  • 选择创建项目并单击iOS

  • 输入应用ID昵称,然后点击注册应用

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

  • 选择下一步

  • 它会告诉你运行你的应用程序来验证安装你可以选择跳过这一步

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

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

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

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

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

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

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

  • 然后出现目标部分,您可以选择其中一个,但我会选择Retention(15+) days并单击Review并单击start Experiment并在出现的提示中选择start again

在应用程序中集成

  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.使用以下代码从firebase获取AB测试密钥到您的应用程序

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

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

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

附言

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

firebase-tutorial-ios-ab-testing

firebase-remote-config-tutorial-for-ios

于 2018-07-05T13:54:36.137 回答
5

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

于 2018-06-27T16:40:42.250 回答