DataLayer

The data layer is a map holding generic information about the application. It uses a standard set
of keys so it can be read by any party that understands the specification. The data layer state
is updated through its API. For example, an app might start with the following dataLayer:

{
"title": "Original screen title"
}

As the state/data of an app can change, the app can update the dataLayer with a call such as:

dataLayer.push(DataLayer.mapOf("title", "New screen title"));

Now the data layer contains:

{
"title": "New screen title"
}

After another push happens:

dataLayer.push(DataLayer.mapOf("xyz", 3));

The dataLayer contains:

{
"title": "New screen title",
"xyz": 3
}

The following example demonstrates how array and map merging works. If the original dataLayer
contains:

Pushes happen synchronously; after the push, changes have been reflected in the model.

When an event is pushed to the data layer, rules for tags are evaluated and any tags matching
this event will fire. For example, given a container with a tag whose firing rule is that "event"
is equal to "openScreen", after this push:

dataLayer.pushEvent("openScreen", DataLayer.mapOf());

that tag will fire.

Note: Updates to the DataLayer that include the key 'gtm.lifetime' may be persisted. Because
of this, it is unsafe to push instances of your own types, or instances outside of your control.

Throws

Merges the given update object into the existing data model, calling any listeners
with the update (after the merge occurs).

If you want to represent a missing value (like an empty index in a List), use the
OBJECT_NOT_PRESENT object.

If another thread is executing a push, this call blocks until that thread is finished.

This is normally a synchronous call. However, if, while the thread is executing the push,
another push happens from the same thread, then that second push is asynchronous (the second
push will return before changes have been made to the data layer). This second push from the
same thread can occur, for example, if a data layer push is made in response to a tag firing.

If the update contains the key event, rules will be evaluated and
matching tags will fire.

Note: Updates to the DataLayer that include the key 'gtm.lifetime' may be persisted. Because
of this, it is unsafe to push instances of your own types, or instances outside of your
control.