Web CMP

Implement a notice on a website using Javascript, as described below.

circle-info

NOTE

You can find details on each release here : Release notes page.

Main steps to implement a web notice

circle-info

You wish integrate AppConsent into Shopify? See the dedicated page: Implement Appconsent with Shopify

1. Implement the notice

circle-info

Open your HTML code source first.

  1. Go to Notices tab in AppConsent configuration interface

  2. Then under the notice you wish to integrate, copy the integration code using the "Copy" button

  3. Finally, paste the code in the <head> tag in your website

2. Add privacy center

With the GDPR, you have an obligation to provide a way for the user to be able to change their choices at any time and easily. That's why you need to add privacy center kit.

3. Results

Congratulations! You have now finished setting up the CMP, your code should look like this :

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Your Website</title>
    <!-- MANDATORY: BEGIN IAB STUB -->
    <script type="text/javascript">
        !function(){var e=function(){var e,t="__tcfapiLocator",a=[],n=window;for(;n;){try{if(n.frames[t]){e=n;break}}catch(e){}if(n===window.top)break;n=n.parent}e||(!function e(){var a=n.document,r=!!n.frames[t];if(!r)if(a.body){var s=a.createElement("iframe");s.style.cssText="display:none",s.name=t,a.body.appendChild(s)}else setTimeout(e,5);return!r}(),n.__tcfapi=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return a;if("setGdprApplies"===n[0])n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0));else if("ping"===n[0]){var s={gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"};"function"==typeof n[2]&&n[2](s)}else a.push(n)},n.addEventListener("message",(function(e){var t="string"==typeof e.data,a={};try{a=t?JSON.parse(e.data):e.data}catch(e){}var n=a.__tcfapiCall;n&&window.__tcfapi(n.command,n.version,(function(a,r){var s={__tcfapiReturn:{returnValue:a,success:r,callId:n.callId}};t&&(s=JSON.stringify(s)),e&&e.source&&e.source.postMessage&&e.source.postMessage(s,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=e:e()}();
    </script>
    <!-- MANDATORY: END IAB STUB -->

    <script type="text/javascript">
        const configSFBXAppConsent = {
            appKey: 'YOUR_APP_KEY'
        }
    </script>
    <script src="https://cdn.appconsent.io/tcf2-clear/current/core.bundle.js" defer async></script>
</head>
<body></body>
</html>


Migrated your old configuration

Since version 29.0.0, the implementation of cmp in your website has been simplified. For users who have configured the cmp before this release, we have provided a guide to migrate to the new configuration.

Configuration Migration Guide


Go further

Now that you have implemented your CMP you can put some extra commands or settings by reading the following instructions.

Passing commands in URL

You can pass commands to the CMP through the querystring. Querystring commands are evaluated on init.

?ac_cmd=show

The above link would show the CMP on init.

For more specific needs, other orders exist. Please contact the supportenvelope.

You can also pass parameters to the command with the same mechanism. Parameters are passed as is from the querystring. Consider the following example:

?ac_cmd=show&jumpAt=banner

Commands / CMP Calls

CMP can be controlled through iAB's __tcfApi global function, as documentedarrow-up-right.

Configuration properties

argument name
type
value
description

appKey

string

'null'

Mandatory credentials for the AppConsent API

debug

boolean

false

Active verbose logging in the browser console

debugI18n

boolean

false

Displays i18n keys instead of translations

dynamicallyLoadedScripts

object { blacklist:[],

whitelist:[] }

{}

Defines third-party scripts to block/unblock dynamically

enableGCM

boolean

false

Enables Google Ads & Analytics blocking (only if another blocking tool is used)

forceGDPRApplies

boolean

false

Forces GDPR application for all visitors from any country in the world

forceStatic

boolean

false

Force static fallback,, bypassing the AppConsent API

gdprApplies

boolean | null

null

Manually sets GDPR applicability: true = applies, false = doesn’t apply, null = automatic

global

boolean

false

Force IAB global mode operation. Consent is stored on .consensu.org

i18n

object

{}

Overrides translation keys

static

string

null

URL to the statuc fallback of the AppConsent Vendorlist

storage

boolean | function

true

Defines storage: true = localStorage, false = disabled, or a function returning a Storage object.

targetCountries

string[] | null

null

List of country codes where the CMP should be displayed

thirdPartyScriptURLs

string[]

[]

List of script URLs that should loaded and executed after the user consent

url

string

""

Domain of the AppConsent API

uuid

string | null

null

Overrides AppConsent's uuid generation

cmpVersionCacheDuration

number

1800

Defines maximum cache duration between the calls hello

urlRedirect

object

null

Allow to define a redirection url after the user click on "accept all", "refuse all" and "continue without accepting"

callbaks

object {init, show, listener,

choiceDone}

Allows to define callbacks on the init and show commands

Configuration object example

Static mode example

A static example file can be found here: collector-fr.jsonarrow-up-right

Custom calls are providen to operate the CMP, like displaying it, activating programmatic consent and so on. All Custom calls are asynchronous functions receiving an error-first callback and optional arguments, as follow:

accept

Registers a full consent on the CMP, as the user would have clicked on the "accept everything" button. The default behavior is to prevent overwriting any existing consent. You can force overwriting by specifying a special force parameter.

circle-exclamation

Note that no matter the outcome, this call will hide the UI.

Argument
Type
Optional
Value

command

string

'accept'

version

number

2

callback

function

function(error: Error)

parameter

Object

AcceptOption

Example:

deny

Argument
Type
Optional
Value

command

string

'deny'

version

number

2

callback

function

function(error: Error)

parameter

Example:

fakedeny

Forge a deny consentstring and return it to all vendors, without saving it as a user legitimate consent. This is useful to prevent unhonorable vendors from assuming lack of consent is one. This WONT hide the UI.

Argument
Type
Optional
Value

command

string

'fakedeny'

version

number

2

callback

function

function(error: Error)

parameter

Example:

How heavy is this CMP ?

We're leveraging chunking to alleviate bandwidth. Code for the UI is only downloaded when user interaction is needed. Besides, we do have a nice size reportarrow-up-right.

Tag managers compatibility

We've decided to not support directly tag managers, as implementation and usages varies. We strongly encourage you to use the standard TCF v2 API to achieve consent resolution for your tagsarrow-up-right. But it's very easy to interact with them.

For example, a GTM implementation could look like this, provided we only strive for a full consent:

Or for Tag Commander:

Very simple exemple :

Will output your tcString V2 in your console :

More information in the official IAB Documentation herearrow-up-right.

Edition of consents without displaying the CMP

When you website embeds external integrations (Youtube, Twitch, Twitter, etc.), you may need to modify consents of a user (with their agreement) to give access to this content without redisplaying the CMP. To do this, you can use the updateStatus function. This is how to use it:

The list of possible types <type> is the following one:

1 - Purpose

2 - Extra purpose

3 - Special feature

4 - IAB vendor

5 - Extra vendor

The ID <id> is the one of the object you want to enable/disable. Its nature depends on the object represented by <type>. You can see the list of available types and IDs for your notice through getTCData call (see usage example here).

The value <bool-value> enables (true) or disables (false) for the tuple (<type>, <id>).

An error will be returned if the consent of the user does not exist yet, of if any of the input combinations (<type>, <id>) does not exist in the array in argument.

To find the latest updates of the CMP, see the Release Notes section.

Last updated