У нас проблема с диспропорцией вариантов теста AB.Теоретически, варианты должны быть почти одинаково представлены для обоих вариантов, что на самом деле работало довольно хорошо с предыдущими тестами AB, которые мы сделали.
Как видно на скриншотах с текущим общим количеством пользователей 161 тыс., Варианты имеют 75,4 тыс. И 85,9 тыс.Мы несколько раз запускали этот тест с небольшими изменениями кода, но каждый раз, когда диспропорция присутствовала аналогично.
В текущем тесте AB мы устанавливаем в качестве значения по умолчанию для параметра удаленной конфигурации "ios_show_recent_searches_v2" пустую строку.
Код, запускающий ab-тест с событием активации, выглядит следующим образом:
@objc class FireBaseService: NSObject {
struct Constants {
static let recentSearchesABTestToggleKey: String = "ios_show_recent_searches_v2"
static let abTestNotAvailableKey: String = "N/A"
}
@objc class func start() {
FirebaseApp.configure()
let remoteConfig = RemoteConfig.remoteConfig()
let oldShowRecentSearches = showRecentSearches
remoteConfig.fetch(withExpirationDuration: 0.0) { (status, error) -> Void in
DispatchQueue.main.async {
if status == .success {
remoteConfig.activateFetched()
FireBaseService.notifyRecentSearchesVisiblityChangeIfNeeded(oldValue: oldShowRecentSearches)
FireBaseService.sendRecentSearchesActivationEventIfNeeded()
}
}
}
}
private class func hasConfigs(for key: String) -> Bool {
return (RemoteConfig.remoteConfig()[key].stringValue?.count ?? 0) > 0
}
}
// MARK: - Recent Searches A/B Test
extension FireBaseService {
@objc class var showRecentSearchesValue: String {
if hasConfigs(for: Constants.recentSearchesABTestToggleKey) {
return RemoteConfig.remoteConfig()[Constants.recentSearchesABTestToggleKey].stringValue ?? Constants.abTestNotAvailableKey
}
return Constants.abTestNotAvailableKey
}
class var showRecentSearches: Bool {
return RemoteConfig.remoteConfig()[Constants.recentSearchesABTestToggleKey].boolValue
}
private class func sendRecentSearchesActivationEventIfNeeded() {
if FireBaseService.showRecentSearchesValue != Constants.abTestNotAvailableKey {
AnalyticsServiceAdapter.activateRecentSearchesExperiment()
}
}
private class func notifyRecentSearchesVisiblityChangeIfNeeded(oldValue: Bool) {
if oldValue != showRecentSearches {
NotificationCenter.default.post(name: Notification.Name(FireBaseService.ShowRecentSearchesNotification), object: nil)
}
}
}
Функция GEFireBaseService.start
вызывается при запуске приложения.