Troubleshooting Articles
Some European countries are not required to obtain consent for storing on- or accessing a device.
Depending in which country you’re operating, this may be applicable for you.
Our Privacy Manager supports the functionality to omit purpose 1 from the UI while the PurposeOneTreatment, which is a special element in the consent string supported by the IAB, is set on ‘true’.
When enabling the feature to not disclose purpose 1, please provide the country you’re operating in to ensure that vendors can still handle the consent data accordingly.
Always check with your own legal entity to ensure that the country you’re operating in, does support the specific jurisdiction disclosures.
Error logs
Note
Error 2.1a is the most prominent error our clients are facing. Therefore, we’ve highlighted the solution for that error below. Check the table for any other error you're facing.
Clients have notified us that they keep receiving the error 2.1a in their Ad Manager logs. This could be related to 1 or more reasons. However, the main issue is that the ad requests are happening:
Before the TC string is available.
Before CMP is loaded (before the stub is defined)
To tackle this issue:
If you're manually invoking the function to request ads:
Make sure the response to
getTCData TCData.eventStatus = 'tcloaded
' OR'cmpuishown' + 'useractioncomplete'
. These indicate the CMP is ready to provide the user with a choice regarding consent.__tcfapi("addEventListener", 2, function (TCData) { if ( TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus ) { // Trigger your ad requests } });
Note
cmpuishown
will be available in the initial load for a unique user before interacting with CMP even if the TC string is not created.
cmpuishown
will also be available if the CMP UI is shown to renew the consent status for users who consented.
Checking for TCData.tcString
&& cmpuishown
is the better approach to catch both scenarios above.
If you’re not manually invoking the function to request ads:
We recommend that you conditionally fire the GUID partition table (GPT) script to be triggered once the TC string is populated. There are multiple ways to accomplish this check.
Method 1
You can make use of the ‘ConsentDataExist’ API to check if the user has interacted with the CMP. The API will return a true value once the user has interacted with the tool and will return a false value if the user is unique and did not interact with the tool yet (no TC string)
The API will re-trigger on consent changed event and will trigger on every page view.
__tcfapi("consentDataExist", 2, (data, success) => { if (data) { // Load your GPT tag } else { // consentDataExist is listening to consentChanged event } })
Method 2
Checking for
TCData.eventStatus = 'tcloaded'
OR'cmpuishown' + 'useractioncomplete'
to indicate the user consent is ready for use through the API.__tcfapi("addEventListener", 2, function (TCData) { if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) { // load your GPT tag or the tag which hosts the function to request ads } });
Note
You can use Either of the methods above -Not Both
Caution
Make sure to load the CMP wrapper in the header of the page ( as high as possible ) with no async or defer attribute.
In case you want to load the script asynchronously or through a tag management solution, make sure to include the stub in the header of the page (before any ad requests ) to ensure that the queueing mechanism is in place until CMP is ready and has loaded your configurations.
You can download the stub code from the console by navigating to Install Privacy Manager → Advanced → Stub Code (download)
Error | Description | Suggested action to take |
---|---|---|
NoteError 1.x is linked to the ‘No grace period’ that Google upholds after the grace period has been ended. The grace period will end 90 days from August 15th, 2020, regardless of the type of error it addresses. | ||
1.1 | Google, as a vendor, is not allowed under consent or legitimate interest. | Confirm whether the user intentionally rejected Google as a vendor, CMP implementation errors have occurred, or there are publisher restrictions. |
1.2 | No consent for Purpose 1 for EEA countries and the UK. | Confirm whether the user intentionally disallowed Purpose 1 or if this is due to CMP implementation errors. German publishers should ensure they are setting the PublisherCC and PurposeOneTreatment fields correctly if they are not asking users for consent. |
1.3 | Has consent for Purpose 1, but lacks legal bases for Basic Ads. | Confirm whether the user intentionally rejected legitimate interests for other purposes or if this is due to CMP implementation errors. |
NoteFrom error 2.x and up, everything is related to the “Grace period” that Google has included. | ||
2.1a | Tag or SDK isn’t receiving a TC string due to CMP status being | If you're manually invoking the function to request ads, make sure the response to If you’re not manually invoking the function to request ads, then work with your CMP to ensure they implement support for getTCData and return |
2.1b | Both conditions are met:
| Ask your CMP to make sure that their APIs are properly implemented based on the IAB TCF tech spec. |
2.2a | The TC string is not parseable because it isn’t Base64 encoded. Example: | CMPs (or publishers) should only send Base64 encoded data in |
2.2b | The TC string is not parseable because of a decoding error. Example: Includes an incorrect number of bits | CMP should fix the TC string implementation errors. |
2.2c | The TC string is not parseable because of a data error. Example: Incorrect timestamp, vendor ID is too large | CMP should fix the TC string implementation errors. |
3.1 | Invalid CMP ID. | Make sure an IAB-validated CMP is being used and its ID is correctly set in the TC strings. If a CMP was valid when a TC string was generated but was later deleted by the IAB, you need to reobtain consent using a valid CMP. |
3.2 | The TC string creation date was more than 13 months ago. | CMP should delete the old TC string and reobtain consent. |
3.3 | The TC string last update date was more than 13 months ago. | CMP should delete the old TC string and reobtain consent. |
4.1 | The TC string was generated using a version of the global vendor list (GVL) in which Google is not yet listed. | When it becomes available, reobtain consent using a version of the GVL that includes Google. |
5.1 | The TC string allows Out-of-Band consent. | Instruct your CMP to remove Out-Of-Band signals from the TC strings. |
5.2 | Globally-scoped TC string. | Instruct your CMP to update the TC strings to be service-specific. |
6.1 | TC string version is | CMP should send TCF v2.0 strings. |
7.1 |
| N/A |
7.2 | The TC string was generated with a GVL version newer than the current version known to Google's ad serving technology. | N/A |
7.3 | Some purposes, features, and/or vendors are out of range (unknown). | N/A |
7.4 | The TC string has an older | CMP should delete the older TC string and reobtain consent using the newest GVL. |
7.5 | A request has | N/A |
7.6 | Invalid publisher country code, but consent to Purpose 1 is present. | CMP should fix the TC string implementation errors. |
7.7 | Invalid language code. | CMP should fix the TC string implementation errors. |
7.8 | TC string version field is neither | CMP should send TCF v2.0 strings. |
7.9 | AC string version is not | CMP should set the AC string version to |
8.1 | AC string is not using the version separator ( | CMP should use " |
8.2 | AC string contains a vendor list that doesn't follow the expected formatting (list of int64s separated by ' . ') | CMP should fix the AC string implementation errors. |