When a user opens the app, Leanplum.start is called and a session is started. 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 then synced to the user’s device, and will be shown at the specified “Display when” trigger. Typically this is either on App Start or Resume or an event within the app.
For A/B tests, after the user has passed 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 the reach the point in the experience that is being tested, they will be served whichever version they have been assigned.
Note that 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. But again, they have in fact been assigned to the test.
Note that if an an impression criteria is added to a test after the test has been started, it will not retroactively remove un-impressed users from analytics. The analytics would then include all users who were targeted to the test prior to adding the impression criteria, and all users who have been impressed since the impression criteria was added.