Snowplow C++ Tracker  2.0.0
Snowplow event tracker for C++. Add analytics to your C++ applications, games and servers
Client Sessions

You can optionally decide to include Client Sessionization. This object will keep track of your users sessions and can be configured to timeout after a certain amount of inactivity.

Activity is determined by how often events are sent with the Tracker – so you will need to send events to keep the current session active. Sessions are updated when new events are tracked. There are two timeouts that are checked: foreground and background timeout. Depending on whether the app is in foreground or backgroud, the relevant timeout is used to compare the time difference since previous event and, in case it surpasses the timeout, a new session is started.

In Initialisation, we discussed how to create a tracker with optional session tracking enabled and configurable foreground and background timeouts. If you enabled session tracking when creating the tracker, you can access a ClientSession instance using the tracker:

auto client_session = Snowplow::get_default_tracker()->get_client_session();

To set the background/foreground state you will need to detect this and then set this on the ClientSession object like so:

client_session.set_is_background(true || false);

When client sessions are used, the client_session context entity is added to all tracked event. This entity consists of the following properties:

Attribute Description Required?
userId An identifier for the user of the session. Yes
sessionId An identifier (UUID) for the session. Yes
sessionIndex The index of the current session for this user. Yes
eventIndex Optional index of the current event in the session. Signifies the order of events in which they were tracked. No
previousSessionId The previous session identifier (UUID) for this user. No
storageMechanism The mechanism that the session information has been stored on the device. Yes
firstEventId The optional identifier (UUID) of the first event id for this session. No
firstEventTimestamp Optional date-time timestamp of when the first event in the session was tracked. No

Session store

The session store is used to persist the currently active session.

The tracker provides the SqliteStorage class that can be used as the session store. However, you may also provide a custom session store implementation. To do so, define a class that inherits from the SessionStore struct:

struct SessionStore {
virtual unique_ptr<json> get_session() = 0;
virtual void set_session(const json &session_data) = 0;
virtual void delete_session() = 0;
};

The SessionStore struct defines functions to retrieve, set, and delete the current session. It represents sessions in their JSON format. The three operations have the following behavior:

Function Description
get_session Return a unique pointer to the current session or nullptr if it doesn't exist.
set_session Persist the current session.
delete_session Remove and reset the current session.