Use synchronous or asynchronous initialization
You have two choices for when to instantiate the Optimizely client: synchronous and asynchronous. The behavioral difference between the two methods is whether your application pings the Optimizely servers for a new datafile during initialization. The functional difference between the two methods is whether your app prioritizes accuracy or speed.
Important
You much decide to initialize your SDK either synchronously or asynchronously. You cannot use both initialization methods.
Synchronous initialization
The synchronous method prioritizes speed over accuracy. Instead of attempting to download a new datafile every time you initialize an Optimizely client, your app uses a local version of the datafile. This local datafile can be cached from a previous network request (see Configure datafile polling) or embedded within your app (see Enable bundled datafiles).
When you initialize a client synchronously, the Optimizely manager first searches for a cached datafile. If one is available, the manager uses it to complete the client initialization. If the manager can't find a cached datafile, the manager searches for a bundled datafile. If the manager finds a the bundled datafile, it uses the datafile to complete the client initialization. If the manager can't find a bundled datafile, the manager can't initialize the client.
Asynchronous initialization
The asynchronous method prioritizes accuracy over speed. During initialization, your app requests the newest datafile from the CDN servers. Requesting the newest datafile ensures that your app always uses the most current project settings, but it also means your app cannot instantiate a client until it downloads a new datafile, discovers the datafile has not changed, or until the request times out. This process takes time.
Initializing a client asynchronously executes like the synchronous initialization, except the manager will first attempt to download the newest datafile. This network activity is what causes an asynchronous initialization to take longer to complete.
If the network request returns an error (such as when network connectivity is unreliable) or if the manager discovers that the cached datafile is identical to the newest datafile, the manager then uses the synchronous approach. If manager discovers that the datafile has been updated and now differs from the cached datafile, the manager downloads the new datafile and uses it to initialize the client.
Android
To initialize an OptimizelyClient
object synchronously, call OptimizelyManager#initialize()
and provide two arguments:
- The Application instance (from
android.app.Application
) - An
Integer
pointer to the application resource datafile
For more details on the specific requirements, view OptimizelyManager.java
from the publicly available Android SDK.
To initialize an OptimizelyClient
object asynchronously, call OptimizelyManager#initialize()
and three arguments:
- The Application instance (from
android.app.Application
) - An
Integer
pointer to the application resource datafile - A listener object
For more details on the specific requirements and to see how to build each object, view OptimizelyManager.java
from the publicly available Android SDK.
iOS
To initialize an OPTLYClient
object synchronously, call [manager initialize]
or [manager initializeWithDatafile:datafile]
.
To initialize an OPTLYClient
object asynchronously, call [manager initializeWithCallback:callback]
and pass it a callback function.
Important
The datafile you pass must have the same project ID that you provided when initializing the Optimizely manager.
Updated about 1 year ago