Как сделать простое тестирование AB в iOS
Я хочу разделить свою пользовательскую базу на 10 групп, показать 10 различных интерфейсов и посмотреть, что они думают об этом.
поэтому у каждой группы пользователей всегда будет один тип интерфейса.
то есть, скажем, у меня есть 10 тыс. пользователей, и когда я выложу свой следующий выпуск при установке пользователя, я буду показывать для 1000 пользователей 1 пользовательский интерфейс и еще для 1000 пользователей 1 пользовательский интерфейс, как и все пользователи 10 тыс.
Я знаю, что это можно сделать с помощью среды тестирования AB.
В основном я хочу вызвать один API при запуске приложения, и оно должно возвращать значение от 1 до 10, после чего я могу сохранить его в своей цепочке для ключей, и в следующий раз, когда приложение будет запущено, я увижу, есть ли оно уже в цепочке для ключей, и я не буду вызовите API.
Таким образом, в основном API будет знать, сколько запросов поступило, и он разделит и отправит правильные значения обратно
поэтому, основываясь на значении в цепочке для ключей, я покажу другой, другой пользовательский интерфейс, и здесь работа инфраструктуры тестирования AB будет давать мне значение от 1 до 10 части API.
В Интернете доступно так много фреймворков для тестирования AB. Но я не смог найти фреймворк, который бы соответствовал моим потребностям.
любая помощь приветствуется!
3 ответа
Представьте себе изменение шрифтов, цвета или некоторых значений в вашем приложении iOS без отправки новой сборки. Это довольно легко, используя Remote config. Это руководство научит вас A/B-тестированию, но перед A/B-тестированием я бы порекомендовал вам посмотреть Remote Config.
Наилучшим подходом было бы разделение пользователей на группы в базе данных и позволить API входа в систему или некоторому другому API возвращать некоторый флаг, чтобы указать, к какой группе принадлежит каждый пользователь, и вы можете соответственно отобразить пользовательский интерфейс.
Но если это невозможно
Тогда самым простым подходом будет генерирование случайного числа в диапазоне от 1 до 10 и его сохранение в цепочке для ключей, а также показ определенного пользовательского интерфейса для него, чтобы в следующий раз при запуске приложения вы могли найти значение в цепочке для ключей, а если его нет, тогда Вы можете создать новое случайное значение и сохранить его в цепочке для ключей. Таким образом, вы всегда будете показывать один и тот же пользовательский интерфейс для этого пользователя.
Такой подход не является точным на 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, но если они будут реализованы в масштабе предприятия, они могут взять за это деньги.
Если я столкнусь с какой-либо такой платформой, которая предоставляет только эту конкретную функциональность, как вы просили, я бы обновил ее здесь.
Я хотел бы отнести кредит этого ответа к этому посту, так как он указал на FireBase Remote Config и A/B-тестирование.
Как спросил спрашивающий, я объясню шаги, необходимые для этого.
Конфигурация на сервере
Посетите https://console.firebase.google.com/ и войдите в свою учетную запись Google.
Выберите Создать проект и нажмите iOS
Введите идентификатор приложения и никнейм и нажмите " Зарегистрировать приложение".
Появится ссылка на загрузку GoogleService-Info.plist, а затем перетащите ее в проект.
Выберите Далее
Он покажет вам Запустить приложение, чтобы проверить установку, вы можете выбрать пропустить этот шаг
Выберите удаленный конфиг с целевой страницы
Выберите Добавить переменную и введите имя переменной по вашему выбору, но я ввожу ABTestVariationType, оставляю значение пустым и выбираю Опубликовать изменения
Выберите A/B-тестирование на боковой панели, затем нажмите " Создать эксперимент", затем выберите " Удаленная настройка".
В появившемся всплывающем окне Введите имя по вашему выбору, которое я ввожу в качестве A/B теста POC, введите некоторое описание об этом, и это все равно необязательно
В целевых пользователях выберите идентификатор вашего приложения, а в процентах от целевых пользователей выберите 100% и нажмите " Далее", после чего отобразится раздел вариантов.
В разделе вариантов будет общая категория с именем " Контрольная группа", по умолчанию загруженная на 50%, и поле варианта с заполненным на 50% и пустым полем, и вы можете ввести любое имя, но я бы ввел вариант 2. Теперь нажмите "Добавить". параметр 8 раз теперь вы можете видеть, что каждый вариант имеет 10% и назвать все варианты, и я бы назвал вариант 3, вариант 4 для варианта 10.
В этом же разделе вариантов нажмите " Добавить параметр из удаленной конфигурации".
Теперь вы можете видеть поле, появляющееся рядом с каждым параметром варианта. Вы можете ввести уникальное значение для идентификации каждого аромата. Я бы ввел значение 1 для первого варианта и 2 для второго варианта, так что я закончу со значением 10 для последнего варианта. вариант и нажмите ДалееЗатем появится раздел цели, вы можете выбрать один из них, но я бы выбрал Срок хранения (более 15 дней), нажмите кнопку " Обзор", нажмите " начать эксперимент" и в появившемся окне выберите " начать заново"
Интеграция в приложение
Добавьте следующие модули в ваш проект
pod 'Firebase/Core' pod 'Firebase/RemoteConfig'
Перетащите GoogleService-Info.plist, который был загружен во время настройки сервера.
Запустите пожарную базу, следуя коду котельной плиты
@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;
В зависимости от значения ключа вы можете отображать различные интерфейсы по своему желанию.
Firebase позаботится об отправке правильного значения, и вам не нужно беспокоиться о том, чтобы разделить пользователей на группы самостоятельно.
PS
Пожалуйста, следуйте приведенным ниже учебникам для получения более подробной информации, это всего лишь резюме, и я постараюсь обобщить или добавить больше картинок, когда у меня будет свободное время, чтобы сделать его более понятным, если это возможно. Я постараюсь добавить пример проекта в github и связать его здесь.