LiveIntent nonID
LiveIntent offers audience resolution by leveraging its next-generation identity solutions. The LiveIntent identity graph is built around a people-based set of data that is authenticated daily through active engagements with email newsletters and media across the web.
The LiveIntent nonID
is a user identifier tied to an active, encrypted email in the graph and functions in cookie-challenged environments and browsers. Alongside the nonID
, LiveIntent’s user ID sub-module can resolve multiple other user identifiers called attributes - such as uid2
, pubmatic
, and others. See the Multiple user IDs section for more details.
There are two ways to add the functionality of LiveIntent Identity sub-module to your Prebid.js package:
-
The standard version, which allows publishers to include the module with full functionalities, like hashing email addresses and identity resolution.
Add the standard LiveIntent Identity module to your Prebid.js package with:
gulp build --modules=userId,liveIntentIdSystem
-
The minimal version, which allows publishers to deploy a smaller bundle with minimal features, including identity resolution.
Add the minimal LiveIntent Identity module to your Prebid.js package with:
LiveConnectMode=minimal gulp build --modules=liveIntentIdSystem
This is an example of how the request.userId.lipb
object, which contains the resolution result, would look like:
{
"lipbid": "T7JiRRvsRAmh88",
"pubmatic": "9E76F017-86D2-444B-BB4B-9DB35347DB54"
}
If you’re not already a LiveIntent customer, feel free to reach out to us. You can also explore the LiveIntent’s privacy policies.
How LiveIntent user ID sub-module works
The LiveIntent user ID sub-module resolves the identity of audiences by connecting impression opportunities to a stable identifier. LiveIntent builds a model on the backend with data collected through an additional call issued on each page load. In order to provide ID resolution, the sub-module uses one or more first-party cookies. See the query parameters description for more details.
The following first-party cookies are supported:
- Default first-party cookie: By default, LiveIntent ID sub-module generates its own first-party identifier on the publisher’s domain. Publishers have the option to disable the cookie generation when configuring the sub-module.
- Publisher defined first-party cookie: Publishers have the flexibility to configure and choose additional first-party cookies for use in conjunction with the LiveIntent first-party cookie.
Identity resolution
For the identity resolution, the LiveIntent ID sub-module makes a request to LiveIntent’s identity resolution API, which returns a nonID
and additional attributes. The identifier and attributes are then exposed by the Prebid User ID Module to Prebid adapters to be sent out in a bid request. An SSP can then make the impression opportunity available to buyers that would like to target the audience.
The first-party cookie generation and identity resolution functionality is provided by LiveConnect JS - an open source JS library which is included within the LiveIntent ID sub-module.
The LiveIntent ID sub-module follows the standard Prebid.js initialization based on the GDPR consumer opt-out choices. With regard to CCPA, the LiveConnect JS receives a us_privacy string from the Prebid US Privacy Consent Management Module and respects opt-outs.
Configure requested attributes
Attributes other than the nonID
can be requested using the requestedAttributesOverrides
configuration option.
For example, the configuration below requests the nonID
as well as uid2
, the medianet
ID, the bidswitch
ID and the magnite
ID:
pbjs.setConfig({
userSync: {
userIds: [{
name: "liveIntentId",
params: {
publisherId: "12432415",
requestedAttributesOverrides: {
uid2: true,
medianet: true,
bidswitch: true,
magnite: true
}
}
}]
}
});
Multiple user IDs
The attributes uid2
, medianet
, magnite
, bidswitch
, pubmatic
, openx
, sovrn
, index
, thetradedesk
and fpid
are treated specially by LiveIntent’s user ID sub-module. Each of these attributes will result in a separate ID returned by the sub-module. Note: thetradedesk
will be exposed as tdid
because of historical reasons.
For example, in case uid2
is configured to be requested in addition to the nonID
, the request.userId
object would look like the following:
{
// ...
"lipb" : {
"lipbid": "sample-nonid-value",
"uid2" : "sample-uid2-value"
},
"uid2" : {
"id" : "sample-uid2-value"
}
//...
}
NOTE: uid2
is exposed as part of lipb
as well as separately as uid2
. medianet
, magnite
, bidswitch
, pubmatic
, openx
, sovrn
, index
, thetradedesk
(as tdid
) and fpid
behave the same way.
For the attributes lipbid
(nonID), uid2
, medianet
, magnite
, bidswitch
, pubmatic
, openx
, sovrn
, index
, thetradedesk
(tdid
) and fpid
there is also support for their conversion into OpenRTB EIDS format. Please refer to User ID Module documentation for more information on conversion, and Example of eids array generated by UserId Module for output format examples.
FPID
The fpid
is a first party identifier that can be exposed through the liveconnect user ID module. In order to use this functionality tell the module which identifier you want to use as a fpid
in the config params:
{
"params": {
"fpid": {
"strategy": "cookie", // "cookie" | "html5" -- Where the identifier should be read from
"name": "foobar" // key in the chosen storage backend
}
}
}
Additionally, add it to the requested attributes:
{
//...
"params": {
"fpid": {
"strategy": "cookie",
"name": "foobar"
},
"requestedAttributesOverrides": {'fpid': true}
}
//...
}
The user id result will contain both the fpid
directly in the lipb
object and separately:
{"lipb":{"fpid":"foobar"},"fpid":{"id":"foobar"}}
The same applies for the eids:
[{"source":"fpid.liveintent.com","uids":[{"id":"foobar","atype":1}]}]
NOTE: If COPPA applies, LiveIntent’s user ID module will not return the fpid
.
Request uid2
An attribute that requires special mention here is uid2
. If this attribute is resolved by the ID sub-module, it will be exposed in the same format as from the Unified ID 2.0 user ID module. If both the LiveIntent sub-module and the uid2
module manage to resolve a uid2
, the one with the highest priority according to the configuration will be used. See the Prebid multiple identifiers populated by user id sub-module section of the User ID documentation for more information.
Enabling this option in addition to the uid2
module is an easy way to increase your uid2
resolution rates. The following is an example configuration of uid2
resolution:
pbjs.setConfig({
userSync: {
userIds: [{
name: "liveIntentId",
params: {
publisherId: "12432415",
requestedAttributesOverrides: { uid2: true }
}
}]
}
});
LiveIntent ID configuration
NOTE: For optimal performance, the LiveIntent ID sub-module should be called at every opportunity. It is best not to use params.storage
with this sub-module as it has its own optimal caching mechanism.
Param under userSync.userIds[] | Scope | Type | Description | Example |
---|---|---|---|---|
name | Required | String | The name of this sub-module. | liveIntentId |
params | Required | Object | Container of all module params. | |
params.publisherId | Optional | String | The unique identifier for each publisher (for existing LiveIntent customers) | 12432415 |
params.distributorId | Optional | String | The unique identifier for each distributor (for existing LiveIntent customers). It will be ignored if params.liCollectConfig.appId is provided. |
did-0123 |
params.ajaxTimeout | Optional | Number | This configuration parameter defines the maximum duration of a call to the IdentityResolution endpoint. By default, 5000 milliseconds. |
5000 |
params.partner | Optional | String | The name of the partner whose data will be returned in the response. | prebid |
params.identifiersToResolve | Optional | Array[String] | Used to send additional identifiers in the request for LiveIntent to resolve against the LiveIntent ID and additional attributes. | ['my-id'] |
params.requestedAttributesOverrides | Optional | Object | Object containing booleans used to override the default resolution. Attributes set to true will be added to the resolved list, while attributes set to false will be removed. Valid attributes are nonId , uid2 , medianet , magnite , bidswitch , pubmatic , openx , sovrn , index , thetradedesk (tdid ) and fpid . |
{'uid2': true} |
params.emailHash | Optional | String | The hashed email address of a user. We can accept the hashes, which use the following hashing algorithms: md5, sha1, sha2. | 1a79a4d60de6718e8e5b326e338ae533 |
params.url | Optional | String | Use this to change the default endpoint URL if you can call the LiveIntent Identity Exchange within your own domain. | https://idx.my-domain.com |
params.liCollectConfig | Optional | Object | Container of all collector params. | |
params.liCollectConfig.fpiStorageStrategy | Optional | String | This parameter defines whether the first-party identifiers that LiveConnect creates and updates are stored in a cookie jar, or in local storage. If nothing is set, default behaviour would be cookie . Allowed values: [cookie , ls , none ] |
cookie |
params.liCollectConfig.ajaxTimeout | Optional | Number | This configuration parameter defines the maximum duration of a call to the collector endpoint. By default, 5000 milliseconds. | 5000 |
params.liCollectConfig.fpiExpirationDays | Optional | Number | The expiration time of an identifier created and updated by LiveConnect. By default, 730 days. | 729 |
params.liCollectConfig.collectorUrl | Optional | String | The parameter defines where the signal pixels are pointing to. The params and paths will be defined subsequently. If the parameter is not set, LiveConnect will by default emit the signal towards https://rp.liadm.com . |
https://rp.liadm.com |
params.liCollectConfig.appId | Optional | String | LiveIntent’s media business entity application ID. | a-0012 |
params.fpid.name | Optional | String | The parameter is cookie/localstorage key name | '__super_duper_cookie' |
params.fpid.strategy | Optional | String | The parameter defines where to get the identifier from. Either from the cookie jar, 'cookie' , or from the local storage, 'html5' . |
'html5' |
storage | Required | Object | This object defines where and for how long the results of the call to get a user ID will be stored. | |
storage.type | Required | String | This parameter defines where the resolved user ID will be stored (either 'cookie' or 'html5' localstorage). |
'cookie' |
storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved user ID will be stored. | 'pbjs_li_nonid' |
storage.expires | Recommended | Integer | How long (in days) the user ID information will be stored. The recommended value is 1 |
1 |
LiveIntent ID examples
-
To receive the LiveIntent ID, the setup looks like the following example:
pbjs.setConfig({ userSync: { userIds: [{ name: "liveIntentId", params: { publisherId: "9896876" } }] } });
-
If you are passing additional identifiers that you want to resolve to the LiveIntent ID, add the ID under the
identifiersToResolve
array in the configuration parameters as shown in the following example:pbjs.setConfig({ userSync: { userIds: [{ name: "liveIntentId", params: { publisherId: "9896876", identifiersToResolve: ["my-own-cookie"] } }] } });
-
If all the supported configuration params are passed, then the setup will look as follows:
pbjs.setConfig({ userSync: { userIds: [{ name: "liveIntentId", params: { publisherId: "9896876", distributorId: "did-0123", identifiersToResolve: ["my-own-cookie"], requestedAttributesOverrides: { uid2: true, magnite: true, bidswitch: true }, url: "https://publisher.liveintent.com/idex", partner: "prebid", ajaxTimeout: 1000, liCollectConfig: { fpiStorageStrategy: "cookie", fpiExpirationDays: 730, collectorUrl: "https://rp.liadm.com", appId: "a-0012" }, fpid: { strategy: "cookie" name: "foobar" } } }] } });
Please note: the distributorId
will be ignored when liCollectConfig.appId
is present.