Dan*_*Ram 6 mobile-application ab-testing abtest ios
我希望将我的用户群分成10组并显示10个不同的用户界面,看看他们对此感觉如何.
所以每个用户组总是会有单一类型的UI.
也就是说我有10k用户,当我在用户安装时推出我的下一个版本时,我将展示1000个用户1 UI和另外1000个用户1个UI,就像所有10K用户一样.
我知道这可以在AB测试框架的帮助下完成.
基本上我想在app的启动时调用一个API,它必须返回1到10之间的值,然后我可以将它存储在我的钥匙串中,下次启动应用程序时,我会看到它是否已经存在于钥匙串中,我不会调用API.
因此,基本上API将知道已经有多少请求,它将分割并发回正确的值
因此,基于钥匙串中的值,我将展示不同的,不同的UI,这里AB测试框架的工作将给我1到10的API部分值.
网上有很多AB测试框架.但我找不到任何适合我需要的框架.
任何帮助表示赞赏!
最好的方法是将用户分成数据库中的组,让登录API或其他一些API返回一些标志,以指示每个用户所属的组,并相应地显示UI.
但如果那是不可能的
然后最简单的方法是生成1-10之间的随机数,并将其保存在钥匙串中并显示特定的UI,以便下次启动应用程序时,您可以在Keychain中查找值,如果不存在则您可以创建一个新的随机值并将其存储在钥匙串中.这样,您将始终为该用户显示相同的UI.
这种分裂方法不是100%准确,但我会说它足够接近
- (NSInteger)randomNumberBetween:(NSInteger)min maxNumber:(NSInteger)max
{
return min + arc4random_uniform((uint32_t)(max - min + 1));
}
Run Code Online (Sandbox Code Playgroud)
如果您将这些随机数的样本进行10000次,您可以看到每个数字达到900-1000次,即9-10%且足够接近
for(int i=0;i<10000;i++){
NSLog(@"random:%ld",[self randomNumberBetween:1 maxNumber:10]);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用当前日期和时间的秒数,如果第二个在1-6之间,那么您可以在钥匙串中保存值1,对于7-12,您可以在钥匙串等中保存值2.54-60您可以保持值10在钥匙串.
你可以考虑根据地理位置或国家或时区来划分用户,这样做也有自己的陷阱.
像这样你可以设计自己的策略来分裂用户
但如果上述建议都不符合您的标准,那么最好的方法是寻找第三方AB测试框架,但如果它将以企业规模实施,他们可能会为此收取一些费用.
如果我遇到任何这样的框架,只提供这个特定的功能,你会问我会在这里更新它.
我想将此答案归功于这篇文章,因为他指出了FireBase 远程配置和A/B 测试。
正如提问者所问的那样,我将解释实现它所涉及的步骤。
访问https://console.firebase.google.com/并使用您的 google 帐户登录。
选择创建项目,然后单击iOS
输入应用id和昵称,点击注册应用
它将显示指向GoogleService-Info.plist下载的链接,然后将其拖放到项目中
选择下一步
它将显示您运行您的应用程序以验证安装您可以选择跳过此步骤
从登陆页面选择远程配置
选择添加变量并输入您选择的变量名称,但我输入ABTestVariationType并将值留空并选择发布更改
从侧边栏中选择A/B 测试,然后单击创建实验,然后选择远程配置
在即将到来的弹出窗口中输入您选择的名称我作为A/B 测试 POC输入一些关于它的描述,无论如何这是可选的
在目标用户中选择您的应用程序 ID,在目标用户的百分比中选择100%并单击下一步,然后它将显示变体部分
在变体部分将有一个名为Control group的一般类别,默认情况下加载 50% 和一个变体框,填充了 50% 和空框,您可以在其中输入任何名称,但我会输入变体 2.现在单击添加一个参数 8 次现在您可以看到每个变体都有 10% 并命名所有变体,我将命名变体 3、变体 4 到变体 10。
在同一个变体部分单击从远程配置添加参数
现在您可以看到每个变体参数旁边出现一个框。您可以输入唯一值来标识每种口味。我将为第一个变体输入值 1,为第二个变体输入值 2,例如我将完成最后一个变体的值 10,然后单击下一步
然后目标部分出现,您可以选择它的一个,但我会选择保留(15岁以上)天,然后点击评论,点击开始试验和提示,的显现选择开始再次
在您的项目中添加以下 pod
pod 'Firebase/Core'
pod 'Firebase/RemoteConfig'
Run Code Online (Sandbox Code Playgroud)拖放服务器配置时下载的GoogleService-Info.plist
使用以下样板代码启动 firebase
@import Firebase;
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions
{
[FIRApp configure];
return YES;
}
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
5.在appdelegate didFinishinglaunchoptions中调用类
RcValues *Obj=[RcValues sharedInstance];
Run Code Online (Sandbox Code Playgroud)
这将下载 ABtesting 的键值
6.使用以下代码将 AB 测试密钥从 firebase 获取到您的应用程序
self.flavourNumber.text=[FIRRemoteConfig.remoteConfig
configValueForKey:@"ABTestVariationType"].stringValue;
Run Code Online (Sandbox Code Playgroud)
根据键值,您可以根据需要显示不同的 UI。
Firebase 会负责发送正确的值,您不必担心自己将用户分组。
请按照以下教程获取更详细的信息这只是一个摘要,我会在空闲时间尝试总结或添加更多图片以使其更容易理解如果可能的话我将尝试在github中添加示例项目并将其链接到这里
firebase-tutorial-ios-ab-testing
firebase-remote-config-tutorial-for-ios