Configure event dispatcher
This topic describes how to configure the event dispatcher for HTTP requests made from every impression or conversion in the Optimizely Swift SDK.
The Optimizely SDKs make HTTP requests for every impression or conversion that gets triggered. Each SDK has a built-in event dispatcher for handling these events, but we recommend overriding it based on the specifics of your environment.
We recommend customizing the event dispatcher you use in production to ensure that you queue and send events in a manner that scales to the volumes handled by your application. Customizing the event dispatcher allows you to take advantage of features like batching, which makes it easier to handle large event volumes efficiently or to implement retry logic when a request fails. You can build your dispatcher from scratch or start with the provided dispatcher.
The examples show that to customize the event dispatcher, initialize the Optimizely client (or manager) with an event dispatcher instance.
// create OptimizelyClient with a custom EventDispatcher
let customEventDispatcher = CustomEventDispatcher()
// or you can simply adjust parameters of DefaultEventDispatcher to disable batching (timerInterval=0), etc
let customEventDispatcher = DefaultEventDispatcher(timerInterval: 0)
optimizely = OptimizelyClient(sdkKey: "<Your_SDK_Key>",
eventDispatcher: customEventDispatcher)
// create OptimizelyClient with a custom EventDispatcher
CustomEventDispatcher *customEventDispatcher = [[CustomEventDispatcher alloc] init];
self.optimizely = [[OptimizelyClient alloc] initWithSdkKey:@"<Your_SDK_Key>"
logger:nil
eventDispatcher:customEventDispatcher
userProfileService:nil
periodicDownloadInterval:5*60
defaultLogLevel:OptimizelyLogLevelInfo];
The event dispatcher should implement a dispatchEvent
function, which takes in three arguments: httpVerb
, url
, and params
, all of which are created by the internal EventBuilder
class. In this function, you should send a POST
request to the given url
using the params
as the body of the request (be sure to stringify it to JSON) and {content-type: 'application/json'}
in the headers.
Important
If you are using a custom event dispatcher, do not modify the event payload returned from Optimizely. Modifying this payload will alter your results.
The included event handler implementation for the Swift SDK, DefaultEventDispatcher, includes queueing, event batching and flushing. Events will be queued if an app is offline and will be forwarded to the server when the app is online again.
Updated over 2 years ago