馃И ABTesting
System A/B test贸w z integracj膮 Remote Config i Analytics
Opis
Modu艂 ABTesting pozwala na przeprowadzanie eksperyment贸w A/B z deterministycznym przypisywaniem u偶ytkownik贸w do wariant贸w, 艣ledzeniem konwersji i integracj膮 z Remote Config oraz Analytics.
Definiowanie eksperymentu
// Prosty eksperyment
ADict.ABTesting.experiment("checkout_flow") {
variant("control", weight = 50)
variant("new_ui", weight = 50)
}
// Z payload'em i targetingiem
ADict.ABTesting.experiment("pricing_page") {
variant("default", weight = 33, payload = mapOf("discount" to 0))
variant("aggressive", weight = 33, payload = mapOf("discount" to 20))
variant("soft", weight = 34, payload = mapOf("discount" to 10))
targetSegments("high_engagement", "paying_user")
syncWithFeatures("pricing_variant")
}
Sprawdzanie wariantu
when (ADict.ABTesting.getVariant("checkout_flow")) {
"control" -> showOldCheckout()
"new_ui" -> showNewCheckout()
else -> showOldCheckout()
}
// Inline helper
val result = ADict.ABTesting.withVariant(
experimentId = "checkout_flow",
onControl = { oldCheckoutLogic() },
onTreatment = { newCheckoutLogic() }
)
// Pobierz payload
val payload = ADict.ABTesting.getPayload("pricing_page")
val discount = payload["discount"] as? Int ?: 0
艢ledzenie konwersji
// Podstawowa konwersja
ADict.ABTesting.trackConversion("checkout_flow", "purchase")
// Z warto艣ci膮 (dla revenue tracking)
ADict.ABTesting.trackConversion(
experimentId = "pricing_page",
eventName = "purchase",
value = 29.99,
metadata = mapOf("product" to "premium")
)
Statystyki i graduacja
val stats = ADict.ABTesting.getStats("checkout_flow")
if (stats?.isSignificant(confidenceLevel = 0.95) == true) {
val winner = stats.getWinner()
val uplift = stats.getUplift("control")
Log.d("ABTest", "Winner: $winner, Uplift: $uplift%")
// Graduuj - ustaw zwyci臋zc臋 jako domy艣lny
ADict.ABTesting.graduate("checkout_flow", winner!!)
}
Remote Config Override
// W艂膮cz override przez Remote Config
ADict.ABTesting.enableRemoteOverrides()
// W Remote Config ustaw klucz: ab_checkout_flow = "new_ui"
// Wszyscy u偶ytkownicy zobacz膮 wariant "new_ui"
Callbacks
ADict.ABTesting.onAssignment { experimentId, variantId ->
analytics.log("ab_assigned", mapOf(
"experiment" to experimentId,
"variant" to variantId
))
}
ADict.ABTesting.onConversion { experimentId, variantId, eventName ->
analytics.log("ab_conversion", mapOf(
"experiment" to experimentId,
"variant" to variantId,
"event" to eventName
))
}
Strategie przypisywania
| Cecha | Opis |
|---|---|
| Deterministyczne | Ten sam u偶ytkownik zawsze trafia do tego samego wariantu |
| Weighted | Przypisanie na podstawie wag wariant贸w |
| Persistent | Przypisanie zapisywane mi臋dzy sesjami |
| Segmented | Mo偶liwo艣膰 targetowania segment贸w u偶ytkownik贸w |
Debug
// Wymuszenie wariantu (do test贸w)
ADict.ABTesting.forceVariant("checkout_flow", "new_ui")
// Pobierz wszystkie przypisania
val assignments = ADict.ABTesting.getAllAssignments()
// Reset
ADict.ABTesting.resetAssignment("checkout_flow")
ADict.ABTesting.reset() // Reset wszystkiego