Documentation Index
Fetch the complete documentation index at: https://docs.stringboot.com/llms.txt
Use this file to discover all available pages before exploring further.
Stringboot includes a native A/B testing engine that allows you to test different string variations without changing your code.
How It Works
Assignment
The SDK generates a unique Device ID and assigns the user to an experiment variant (e.g., “Control”, “Variant A”).
Delivery
When you request a string (e.g., StringProvider.get("cta_button")), the SDK automatically returns the text for the assigned variant.
Tracking
You log the assignment to your analytics provider to track conversion.
Setup
No additional code is required to run the experiment. The SDK handles variant delivery automatically. To track the experiment, follow these steps:
Implement Analytics Handler
Create a class implementing StringbootAnalyticsHandler. Choose your analytics provider below: Firebase
Mixpanel
Amplitude
class MyAnalyticsHandler : StringbootAnalyticsHandler {
override fun onExperimentAssigned(assignment: ExperimentAssignment) {
Firebase.analytics.logEvent("experiment_assigned") {
param("experiment_key", assignment.experimentKey)
param("variant_name", assignment.variantName)
param("string_key", assignment.stringKey)
}
}
override fun onExperimentViewed(experimentKey: String, variantName: String) {
Firebase.analytics.logEvent("experiment_viewed") {
param("experiment_key", experimentKey)
param("variant_name", variantName)
}
}
}
class MyAnalyticsHandler : StringbootAnalyticsHandler {
override fun onExperimentAssigned(assignment: ExperimentAssignment) {
mixpanel.track("Experiment Assigned", JSONObject().apply {
put("experiment_key", assignment.experimentKey)
put("variant_name", assignment.variantName)
put("string_key", assignment.stringKey)
})
}
override fun onExperimentViewed(experimentKey: String, variantName: String) {
mixpanel.track("Experiment Viewed", JSONObject().apply {
put("experiment_key", experimentKey)
put("variant_name", variantName)
})
}
}
class MyAnalyticsHandler : StringbootAnalyticsHandler {
override fun onExperimentAssigned(assignment: ExperimentAssignment) {
Amplitude.getInstance().logEvent("Experiment Assigned", JSONObject().apply {
put("experiment_key", assignment.experimentKey)
put("variant", assignment.variantName)
put("string_key", assignment.stringKey)
})
}
override fun onExperimentViewed(experimentKey: String, variantName: String) {
Amplitude.getInstance().logEvent("Experiment Viewed", JSONObject().apply {
put("experiment_key", experimentKey)
put("variant", variantName)
})
}
}
Register Handler
Pass the handler during initialization:StringProvider.initialize(
context = this,
cacheSize = 1000,
analyticsHandler = MyAnalyticsHandler()
)
Debugging Experiments
You can check the current experiment assignments for debugging purposes:
val experiments = StringProvider.getActiveExperiments()
experiments.forEach { exp ->
Log.d("Stringboot", "Experiment: ${exp.experimentKey}, Variant: ${exp.variantName}")
}