The Transparency & Consent Framework (TCF), as outlined by the Interactive Advertising Bureau (IAB) is an open-standard technical framework intended to enable organizations to obtain, record, and update consumer consent for the processing of their personal data, in compliance with the European Union’s General Data Protection Regulation (GDPR). The second iteration of the framework, TCF 2.0, grants more flexibility for how consumers can provide or withhold consent, including whether and how vendors may use certain features of data processing, such as precise geolocation.
More information on TCF 2.0 can be found on the IAB Europe website, including support materials and technical specifications.
Adobe Experience Platform is part of the registered IAB TCF 2.0 vendor list, under the ID 565. In compliance with TCF 2.0 requirements, Platform allows you to collect customer consent data and integrate it into your stored customer profiles. This consent data can then be factored into whether profiles are included in exported audience segments, depending on their use case.
Platform is only able to comply with version 2.0 of the TCF (or greater). Previous versions of TCF are not supported.
This document provides an overview of how to configure your data operations and profile schemas to accept customer consent data generated by your Consent Management Platform (CMP). It also covers how Platform conveys user consent choices when exporting segments.
To follow along with this guide, you must be using a CMP, either commercial or your own, that is integrated and compliant with the IAB TCF. See the list of compliant CMPs for more information.
If the ID of your CMP is invalid, Platform keeps processing your data as-is. To enforce TCF 2.0, you must confirm that your CMP has a valid ID that has been registered with IAB TCF 2.0 before sending data to Platform.
This guide also requires a working understanding of the following Platform services:
In addition to the Platform services listed above, you should also be familiar with destinations and their role in the Platform ecosystem.
The following sections describe how consent data is collected and enforced after the system has been properly configured.
Platform allows you to collect customer consent data through the following process:
In addition to SDK commands triggered by CMP consent-change hooks, consent data can also flow into Experience Platform through any customer-generated XDM data that is uploaded directly to a Profile-enabled dataset.
Any segments shared with Platform by Adobe Audience Manager (through the Audience Manager source connector or otherwise) may also contain consent data if the appropriate fields have been applied to those segments through Experience Cloud Identity Service. For more information on collecting consent data in Audience Manager, see the document on the Adobe Audience Manager plug-in for IAB TCF.
Once TCF consent data has successfully been ingested, the following processes take place in downstream Platform services:
The rest of the sections in this document provide guidance on how to configure Platform and your data operations to fulfill the collection and enforcement requirements described above.
Since each CMP system is unique, you must determine the best way to allow your customers to provide consent as they interact with your service. A cookie consent dialog is a common way to attain customer consent. An example CMP dialog is seen below.
This dialog must allow the customer to opt in or out of the following:
Consent option | Description |
---|---|
Purposes | Purposes define which ad tech purposes a brand can use a customer’s data for. The following purposes must be opted into for Platform to process customer IDs:
|
Vendor permissions | In addition to ad tech purposes, the dialog must also allow the customer to opt in or out of having their data used by specific vendors, including Adobe Experience Platform (565). |
Regardless of the method you use to collect the data, the goal is to generate a string value based on the consent options chosen by the customer, called a consent string.
In the TCF specification, consent strings are used to encode relevant details about a customer’s consent settings, in terms of specific marketing purposes as defined by policies and vendors. Platform uses these strings to store the consent settings for each customer, and therefore a new consent string must be generated each time those settings change.
Consent strings may only be created by a CMP that is registered with the IAB TCF. For more information on how to generate consent strings using your particular CMP, refer to the consent string formatting guide in the IAB TCF GitHub repo.
Customer consent data must be sent to datasets whose schemas contain TCF consent fields. Refer to the tutorial on creating datasets for capturing TCF 2.0 consent for how to create the required profile dataset (and an optional Experience Event dataset) before continuing with this guide.
Once you have created a Profile-enabled dataset for collecting consent data, you must ensure that your merge policies have been configured to always include TCF consent fields in your customer profiles. This involves setting dataset precedence so that your consent dataset is prioritized over other potentially conflicting datasets.
For more information on how to work with merge policies, refer to the merge policies overview. When setting up your merge policies, you must ensure that your segments include all the required consent attributes provided by the XDM privacy schema field group, as outlined in the guide on dataset preparation.
The use of the Experience Platform Web SDK is required to process consent data directly in Adobe Experience Platform. Experience Cloud Identity Service is not supported.
Experience Cloud Identity Service is still supported for consent processing in Adobe Audience Manager, however, and compliance with TCF 2.0 only requires that the library is updated to version 5.0.
Once you have configured your CMP to generate consent strings, you must integrate the Experience Platform Web SDK to collect those strings and send them to Platform. The Platform SDK provides two commands that can be used to send TCF consent data to Platform (explained in the subsections below). These commands should be used when a customer provides consent information for the first time, and anytime that consent changes thereafter.
The SDK does not interface with any CMPs out of the box. It is up to you to determine how to integrate the SDK into your website, listen for consent changes in the CMP, and call the appropriate command.
In order for the SDK to send data to Experience Platform, you must first create a datastream for Platform. Specific steps for how to create a datastream are provided in the SDK documentation.
After providing a unique name for the datastream, select the toggle button next to Adobe Experience Platform. Next, use the following values to complete the rest of the form:
Datastream field | Value |
---|---|
Sandbox | The name of the Platform sandbox that contains the required streaming connection and datasets to set up the datastream. |
Streaming Inlet | A valid streaming connection for Experience Platform. See the tutorial on creating a streaming connection if you do not have an existing streaming inlet. |
Event Dataset | Select the XDM ExperienceEvent dataset created in the previous step. If you included the IAB TCF 2.0 Consent field group in this dataset’s schema, you can track consent-change events over time using the sendEvent command, storing that data in this dataset. Keep in mind that the consent values stored in this dataset are not used in automatic enforcement workflows. |
Profile Dataset | Select the XDM Individual Profile dataset created in the previous step. When responding to CMP consent-change hooks using the setConsent command, collected data is stored in this dataset. Since this dataset is Profile-enabled, the consent values stored in this dataset are honored during automatic enforcement workflows. |
When finished, select Save at the bottom of the screen and continue following any additional prompts to complete the configuration.
Once you have created the datastream described in the previous section, you can start using SDK commands to send consent data to Platform. The sections below provide examples of how each SDK command can be used in different scenarios.
Many CMPs provide out-of-the-box hooks that listen to consent-change events. When these events occur, you can use the setConsent
command to update that customer’s consent data.
The setConsent
command expects two arguments:
consent
array. The array must contain at least one object that provides the required consent fields.The setConsent
command is displayed below:
alloy("setConsent", {
consent: [{
standard: "IAB TCF",
version: "2.0",
value: "CLcVDxRMWfGmWAVAHCENAXCkAKDAADnAABRgA5mdfCKZuYJez-NQm0TBMYA4oCAAGQYIAAAAAAEAIAEgAA.argAC0gAAAAAAAAAAAA",
gdprApplies: "true"
}]
});
Payload property | Description |
---|---|
standard |
The consent standard being used. This value must be set to IAB for TCF 2.0 consent processing. |
version |
The version number of the consent standard indicated under standard . This value must be set to 2.0 for TCF 2.0 consent processing. |
value |
The base-64-encoded consent string generated by the CMP. |
gdprApplies |
A Boolean value that indicates whether the GDPR applies to the currently logged-in customer. For TCF 2.0 to be enforced for this customer, the value must be set to true . Defaults to true if not defined. |
The setConsent
command should be used as part of a CMP hook that detects changes in consent settings. The following JavaScript provides an example of how the setConsent
command can be used for OneTrust’s OnConsentChanged
hook:
OneTrust.OnConsentChanged(function () {
// Retrieve the TCF 2.0 consent data generated by the CMP, and pass it to Alloy.
__tcfapi("getTCData", 2, function (data, success) {
if (success) {
var tcString = data.tcString;
var gdpr = data.gdprApplies;
alloy("setConsent", {
consent: [{
standard: "IAB TCF",
version: "2.0",
value: tcString,
gdprApplies: gdpr
}]
});
}
});
});
You can also collect TCF 2.0 consent data on every event triggered in Platform by using the sendEvent
command.
To use this method, you must have added the Experience Event Privacy field group to your Profile-enabled XDM ExperienceEvent schema. See the section on updating the ExperienceEvent schema in the dataset preparation guide for steps on how to configure this.
The sendEvent
command should be used as a callback in appropriate event listeners on your website. The command expects two arguments: (1) a string that indicates the command type (in this case, sendEvent
), and (2) a payload containing an xdm
object that provides the required consent fields as JSON:
alloy("sendEvent", {
xdm: {
"consentStrings": [{
"consentStandard": "IAB TCF",
"consentStandardVersion": "2.0",
"consentStringValue": "CLcVDxRMWfGmWAVAHCENAXCkAKDAADnAABRgA5mdfCKZuYJez-NQm0TBMYA4oCAAGQYIAAAAAAEAIAEgAA.argAC0gAAAAAAAAAAAA",
"gdprApplies": true
}]
}
});
Payload property | Description |
---|---|
xdm.consentStrings |
An array that must contain at least one object that provides the required consent fields. |
consentStandard |
The consent standard being used. This value must be set to IAB for TCF 2.0 consent processing. |
consentStandardVersion |
The version number of the consent standard indicated under standard . This value must be set to 2.0 for TCF 2.0 consent processing. |
consentStringValue |
The base-64-encoded consent string generated by the CMP. |
gdprApplies |
A Boolean value that indicates whether the GDPR applies to the currently logged-in customer. For TCF 2.0 to be enforced for this customer, the value must be set to true . Defaults to true if not defined. |
Many Web SDK commands return promises that indicate whether the call succeeded or failed. You can then use these responses for additional logic such as displaying confirmation messages to the customer. See Command responses for more information.
Before you start exporting segments, you must ensure that your segments include all required consent fields. See the section on configuring merge policies for more information.
Once you have collected customer consent data and have created audience segments containing the required consent attributes, you can then enforce TCF 2.0 compliance when exporting those segments to downstream destinations.
If the consent setting gdprApplies
is set to true
for a set of customer profiles, any data from those profiles that is exported to downstream destinations is filtered based on the TCF consent preferences for each profile. Any profile that does not meet the required consent preferences is skipped during the export process.
Customers must consent to the following purposes (as outlined by TCF 2.0 policies) for their profiles to be included in segments that are exported to destinations:
TCF 2.0 also requires that the source of data must check the destination’s vendor permission before sending data to that destination. As such, Platform checks if the destination’s vendor permission is opted in to for all IDs in the cluster before including data bound to that destination.
Any segments that are shared with Adobe Audience Manager contain the same TCF 2.0 consent values as their Platform counterparts. Since Audience Manager shares the same vendor ID as Platform (565), the same purposes and vendor permission are required. See the document on the Adobe Audience Manager plug-in for IAB TCF for more information.
Once you have configured your TCF 2.0 implementation and have exported segments to destinations, any data that does not meet consent requirements will not be exported. To see whether the correct customer profiles were filtered during the export, you must manually check the data stores on your destinations to see if consent was properly enforced.
If multiple IDs make up a cluster and TCF 2.0 applies, the entire cluster is excluded if even a single ID does not contain the correct purposes and vendor permission(s).
This document covered the process of configuring your Platform data operations to meet your business obligations as outlined by the TCF 2.0. See the overview on governance, privacy, and security for more information Platform’s privacy-related capabilities.