Диспропорция вариантов Firebase AB Test - PullRequest
0 голосов
/ 22 октября 2018

У нас проблема с диспропорцией вариантов теста AB.Теоретически, варианты должны быть почти одинаково представлены для обоих вариантов, что на самом деле работало довольно хорошо с предыдущими тестами AB, которые мы сделали.ab test config 1 ab test config 2

Как видно на скриншотах с текущим общим количеством пользователей 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 вызывается при запуске приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...