Splitting rules decide who can enter an experiment and which variant they receive.

Assignment inputs

AppActor experiment targeting uses the same condition shape as Remote Config: All targeting conditions must pass before a user can enter the experiment.

Experiment keys

Use experiment keys when one app can run tests on multiple surfaces:
  • onboarding_paywall
  • settings_upsell
  • winback_screen
  • post_trial_reminder
An experiment key keeps the SDK read specific. The app asks for getExperimentAssignment("onboarding_paywall") only where that surface is rendered.

Traffic allocation

Traffic is stored in basis points: AppActor deterministically hashes userId plus the experiment salt into a 0...9999 bucket. If the bucket is outside trafficAllocationBp, the user receives no assignment.

Variant weights

After the traffic gate, AppActor rescales the bucket into the active traffic range and chooses a variant by weightBp. Variant weights must sum to 10000. Example: At 10% traffic, only 10% of eligible users enter the experiment. Inside that 10%, control and treatment split 50/50.

Launch rules

An experiment can start only when it is in draft status, has at least two variants, has exactly one control variant, and has total variant weights of 10000. Start conservative when the experiment changes purchase UI or pricing presentation. Increase traffic only after SDK diagnostics, sandbox purchase completion, entitlement refresh, and fallback behavior are clean.

Collision rules

Avoid running two active experiments against the same placement unless the product explicitly supports layering. If two tests change the same paywall decision, the app can become impossible to interpret.