When a user opens the app, Leanplum.start is called and a session starts. At that time, the user is evaluated against the targets of all active A/B tests, in-app message campaigns, and any targeted variables for which they may be eligible.
For in-app messages, the message is synced to the user’s device at start, and the message will be shown at the specified “Display when” trigger. Typically this is either on App Start or Resume, or another event within the app.
For A/B tests, after the user matches the targeting requirements, any relevant content and/or messages are synced to their device. They will then be randomly assigned to either the control or one of the variants, at the distributions you have specified. When they reach the point in the experience that is being tested, they will be served whichever version they have been assigned.
Note: If an impression criteria has been set, the user will not be reflected in the A/B test’s analytics until they have reached the impression criteria event, even though they have in fact been assigned to the test.
If an impression criteria is added to a test after the test has started, it will not retroactively remove un-impressed users from analytics. The analytics will still include all users who were added to the test before adding the impression criteria. Going forward, all users who reach the impression criteria are also shown in the test's analytics.