Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.
Important: Please ensure your CMP configuration includes new Vendor ID 1469 for 1st Party data tracking. Additionally, include Vendor ID 301 if cookie sync is enabled. Learn more
For React Native apps needing to comply with GDPR and similar regulations, integrating the Zeotap React Native SDK with an IAB Transparency and Consent Framework (TCF) v2.x compliant Consent Management Platform (CMP) is the recommended approach.This method leverages the standardized TCF framework to automatically manage user consent for data processing activities performed by the SDK.
CMP Implementation: You must first implement a TCF v2.x compliant CMP (like OneTrust, TrustArc, Didomi, Sourcepoint, etc.) in your React Native app. This CMP is responsible for displaying the consent UI to users and storing their preferences locally.
SDK Detection: When the Zeotap React Native SDK initializes with the correct configuration (see below), it automatically detects the presence of TCF data stored by the CMP in AsyncStorage or other local storage.
Consent Retrieval: The SDK reads the stored TCF consent data including:
The user’s current consent status (encoded in the TC String).
Purpose consents and legitimate interests.
Vendor consents (if check_zeotap_vendor_consent is enabled).
Decision Making: Based on the retrieved TC String and the SDK’s configuration, the SDK determines whether it has consent for specific actions:
Purpose Consent: Checks if consent has been granted for the specific IAB TCF Purposes required for tracking (purposes_for_tracking).
Action Execution:
If the necessary consents are present, the SDK will proceed with tracking events (setEventProperties, setUserProperties, etc.).
If the necessary consents are not present, the SDK will block those specific actions and won’t queue any events until consent is obtained.
When the SDK is configured to use a TCF CMP (use_consent: true and check_for_cmp: true), calls to the setConsent() method behave differently compared to the Custom Consent mode:
The track parameter within the setConsent object is ignored as tracking consent is determined by the TCF data.
However, any Brand Consents included in the setConsent call (e.g., { "myBrandConsent": true }) will still be processed, stored, and sent with subsequent events under the z_p query parameter. This allows you to manage non-TCF consents alongside TCF integration.
import { setConsent } from 'zeo-collect';// Example: Even with TCF enabled, this call will still store 'brandConsent'// but the 'track: true' will be ignored in favor of the TCF signalsetConsent({ track: true, // This value is IGNORED when check_for_cmp is true brandConsent: true // This custom/brand consent IS processed});
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Zeotap docs","colors":{"primary":"#174efb","light":"#174efb","dark":"#174efb"},"logo":{"light":"https://mintcdn.com/zeotap/pbiFRnrYXBNUsbba/logo/light.svg?fit=max\u0026auto=format\u0026n=pbiFRnrYXBNUsbba\u0026q=85\u0026s=c566b5af653699d3bcf4d8efb4f678d1","dark":"https://mintcdn.com/zeotap/pbiFRnrYXBNUsbba/logo/dark.svg?fit=max\u0026auto=format\u0026n=pbiFRnrYXBNUsbba\u0026q=85\u0026s=ae6e1d27d3d2e409f9e86c089b64e224","href":"https://zeotap.com/"},"favicon":"https://mintcdn.com/zeotap/Tg-jPUQrcrgXsHVA/favicon.svg?fit=max\u0026auto=format\u0026n=Tg-jPUQrcrgXsHVA\u0026q=85\u0026s=f5b2731a91bf6cad0fe370680ebae4fe","appearance":{"default":"light"},"background":{"decoration":"gradient","color":{"light":"#eaf0fe"}},"navbar":{"links":[{"href":"https://login.zeotap.com/","label":"Login"}],"primary":{"type":"button","label":"Book a Demo","href":"https://zeotap.com/demo/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/zeotap"}},"seo":{"indexing":"all"},"integrations":{"ga4":{"measurementId":"G-XXXXXXXXXX"}},"banner":{"content":"New: [Support \u0026 Diagnostics](/articles/support-diagnostics-customer/support-diagnostics) troubleshooting guides are now live.","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zeotap","hasAudioNarration":false,"actualSubdomain":"zeotap","customDomains":["docs.zeotap.com"],"gitSource":{"type":"github","owner":"zeotap","repo":"zeotap-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedbf31f8ed849a5c7dc2cc","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Products","count":354},{"language":"default","tag":"Integrate","count":215},{"language":"default","tag":"SDKs","count":157},{"language":"default","tag":"Destinations","count":150},{"language":"default","tag":"Batch Integrations","count":97},{"language":"default","tag":"Sources","count":65},{"language":"default","tag":"Unify","count":65},{"language":"default","tag":"Source Integrations (Batch+Real-Time)","count":54},{"language":"default","tag":"Release Notes","count":54},{"language":"default","tag":"Catalogue","count":48}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"articles/sdks/react-native/consent/gdpr","slug":"/articles/sdks/react-native/consent/gdpr","pageMetadata":{"title":"TCF v2.x / GDPR Compliance","description":"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.","href":"/articles/sdks/react-native/consent/gdpr"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Important:`}),` Please ensure your CMP configuration includes new `,_jsx(_components.strong,{children:`Vendor ID 1469`}),` for 1st Party data tracking. Additionally, include `,_jsx(_components.strong,{children:`Vendor ID 301`}),` if cookie sync is enabled. `,_jsx(_components.a,{href:`/articles/sdks/web-js/configurations/consent-options#shouldcheckzeotapvendorconsent`,children:`Learn more`})]})}),`\n`,_jsx(_components.p,{children:`For React Native apps needing to comply with GDPR and similar regulations, integrating the Zeotap React Native SDK with an IAB Transparency and Consent Framework (TCF) v2.x compliant Consent Management Platform (CMP) is the recommended approach.`}),`\n`,_jsx(_components.p,{children:`This method leverages the standardized TCF framework to automatically manage user consent for data processing activities performed by the SDK.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it Works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`CMP Implementation:`}),` You must first implement a TCF v2.x compliant CMP (like OneTrust, TrustArc, Didomi, Sourcepoint, etc.) in your React Native app. This CMP is responsible for displaying the consent UI to users and storing their preferences locally.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SDK Detection:`}),` When the Zeotap React Native SDK initializes with the correct configuration (`,_jsx(_components.a,{href:`#configuration`,children:`see below`}),`), it automatically detects the presence of TCF data stored by the CMP in AsyncStorage or other local storage.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Consent Retrieval:`}),` The SDK reads the stored TCF consent data including:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The user’s current consent status (encoded in the TC String).`}),`\n`,_jsx(_components.li,{children:`Purpose consents and legitimate interests.`}),`\n`,_jsxs(_components.li,{children:[`Vendor consents (if `,_jsx(_components.code,{children:`check_zeotap_vendor_consent`}),` is enabled).`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Decision Making:`}),` Based on the retrieved TC String and the SDK’s configuration, the SDK determines whether it has consent for specific actions:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose Consent:`}),` Checks if consent has been granted for the specific IAB TCF Purposes required for tracking (`,_jsx(_components.code,{children:`purposes_for_tracking`}),`).`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Action Execution:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`If the necessary consents are present, the SDK will proceed with tracking events (`,_jsx(_components.code,{children:`setEventProperties`}),`, `,_jsx(_components.code,{children:`setUserProperties`}),`, etc.).`]}),`\n`,_jsxs(_components.li,{children:[`If the necessary consents are `,_jsx(_components.em,{children:`not`}),` present, the SDK will block those specific actions and won’t queue any events until consent is obtained.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration`,children:`Configuration`}),`\n`,_jsx(_components.p,{children:`To enable TCF v2.x integration, configure the SDK during initialization:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SDK Initialization for TCF v2.x Integration`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`initialiseZeoCollect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'zeo-collect'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` options`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` android_write_key:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_ANDROID_WRITE_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ios_write_key:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_IOS_WRITE_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // --- Core TCF Configuration ---`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` use_consent:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// REQUIRED: Enables consent management features`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` check_for_cmp:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// REQUIRED: Tells the SDK to look for TCF data`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // --- Optional TCF Fine-tuning ---`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Define which TCF Purposes are required for tracking`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Defaults may vary, but explicitly setting is recommended`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` purposes_for_tracking:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Purpose 1 (Store/Access Info), 3 (Ad Selection), 4 (Content Selection)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Optional: Check for Zeotap vendor consent in addition to purpose consent`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` check_zeotap_vendor_consent:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`initialiseZeoCollect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The below table describes the configuration parameters for GDPR/TCF integration:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Default Value`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`use_consent`})}),_jsx(_components.td,{children:`Boolean`}),_jsx(_components.td,{children:`false`}),_jsx(_components.td,{children:`If this option is set to true, then the SDK waits to receive a consent signal and uses that consent to manage actions.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`check_for_cmp`})}),_jsx(_components.td,{children:`Boolean`}),_jsx(_components.td,{children:`false`}),_jsx(_components.td,{children:`If this option is set to true, then we check for the presence of TCF data stored by a CMP.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`purposes_for_tracking`})}),_jsx(_components.td,{children:`Array`}),_jsx(_components.td,{children:`[1,3,4]`}),_jsx(_components.td,{children:`This option is used to pass a list of purpose IDs, based on which you can manage the consent for tracking.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`check_zeotap_vendor_consent`})}),_jsx(_components.td,{children:`Boolean`}),_jsx(_components.td,{children:`false`}),_jsx(_components.td,{children:`If true, also checks for Zeotap vendor consent in addition to purpose consents.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`common-tcf-purpose-ids`,children:`Common TCF Purpose IDs`}),`\n`,_jsx(_components.p,{children:`Here are some commonly used TCF v2.x purpose IDs:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 1:`}),` Store and/or access information on a device`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 2:`}),` Select basic ads`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 3:`}),` Create a personalised ads profile`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 4:`}),` Select personalised ads`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 5:`}),` Create a personalised content profile`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 6:`}),` Select personalised content`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 7:`}),` Measure ad performance`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 8:`}),` Measure content performance`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 9:`}),` Apply market research to generate audience insights`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose 10:`}),` Develop and improve products`]}),`\n`]}),`\n`,_jsxs(Heading,{level:`2`,id:`interaction-with-setconsent-api`,children:[`Interaction with `,_jsx(_components.code,{children:`setConsent`}),` API`]}),`\n`,_jsxs(_components.p,{children:[`When the SDK is configured to use a TCF CMP (`,_jsx(_components.code,{children:`use_consent: true`}),` and `,_jsx(_components.code,{children:`check_for_cmp: true`}),`), calls to the `,_jsx(_components.code,{children:`setConsent()`}),` method behave differently compared to the Custom Consent mode:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`track`}),` parameter within the `,_jsx(_components.code,{children:`setConsent`}),` object is `,_jsx(_components.strong,{children:`ignored`}),` as tracking consent is determined by the TCF data.`]}),`\n`,_jsxs(_components.li,{children:[`However, any `,_jsx(_components.strong,{children:`Brand Consents`}),` included in the `,_jsx(_components.code,{children:`setConsent`}),` call (e.g., `,_jsx(_components.code,{children:`{ \"myBrandConsent\": true }`}),`) `,_jsx(_components.strong,{children:`will`}),` still be processed, stored, and sent with subsequent events under the `,_jsx(_components.code,{children:`z_p`}),` query parameter. This allows you to manage non-TCF consents alongside TCF integration.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`setConsent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'zeo-collect'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Example: Even with TCF enabled, this call will still store 'brandConsent'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// but the 'track: true' will be ignored in favor of the TCF signal`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setConsent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` track:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This value is IGNORED when check_for_cmp is true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` brandConsent:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // This custom/brand consent IS processed`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`cmp-integration-considerations`,children:`CMP Integration Considerations`}),`\n`,_jsx(Heading,{level:`3`,id:`timing`,children:`Timing`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Initialize your CMP before initializing the Zeotap SDK`}),`\n`,_jsx(_components.li,{children:`Ensure TCF data is available when the SDK starts`}),`\n`,_jsx(_components.li,{children:`The SDK may queue events until valid consent is determined`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`data-storage`,children:`Data Storage`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`TCF data is typically stored in AsyncStorage by the CMP`}),`\n`,_jsxs(_components.li,{children:[`The SDK looks for standard TCF keys like `,_jsx(_components.code,{children:`IABTCF_TCString`}),`, `,_jsx(_components.code,{children:`IABTCF_PurposeConsents`}),`, etc.`]}),`\n`,_jsx(_components.li,{children:`Ensure your CMP correctly writes TCF data to these standard locations`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`consent-updates`,children:`Consent Updates`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`When users update their consent preferences through your CMP, the SDK will automatically detect the changes`}),`\n`,_jsx(_components.li,{children:`No additional API calls are needed for basic tracking consent`}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`setConsent()`}),` only for brand-specific consents`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`CMP First:`}),` Always initialize and configure your CMP before the Zeotap SDK`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Purpose Selection:`}),` Carefully choose which TCF purposes are required for your use case`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Vendor Consent:`}),` Consider enabling `,_jsx(_components.code,{children:`check_zeotap_vendor_consent`}),` for stricter compliance`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Testing:`}),` Test with different consent scenarios (all accepted, all rejected, mixed)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Documentation:`}),` Document which purposes your app requires and why`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`SDK not respecting consent:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Verify TCF data is being written to AsyncStorage by your CMP`}),`\n`,_jsxs(_components.li,{children:[`Check that `,_jsx(_components.code,{children:`use_consent: true`}),` and `,_jsx(_components.code,{children:`check_for_cmp: true`}),` are set`]}),`\n`,_jsxs(_components.li,{children:[`Ensure purpose IDs in `,_jsx(_components.code,{children:`purposes_for_tracking`}),` match your CMP configuration`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Events not being sent:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Check if required purposes have consent in the TCF data`}),`\n`,_jsxs(_components.li,{children:[`Verify Zeotap vendor consent if `,_jsx(_components.code,{children:`check_zeotap_vendor_consent`}),` is enabled`]}),`\n`,_jsx(_components.li,{children:`Review SDK logs for consent-related messages`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`related-documentation`,children:`Related Documentation`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/articles/sdks/react-native/configurations/consent-options`,children:`Consent Configuration Options`}),`: Detailed configuration options for consent management`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/articles/sdks/react-native/api-reference/set-consent`,children:`Set Consent API`}),`: API reference for managing user consent`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/articles/sdks/react-native/consent/consent-strategy`,children:`Choosing a Consent Strategy`}),`: Guide to choosing the right consent approach`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/articles/sdks/react-native/consent/custom-consent`,children:`Custom Consent Management`}),`: Alternative approach using manual consent`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"TCF v2.x / GDPR Compliance","description":"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.","href":"/articles/sdks/react-native/consent/gdpr"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Configuration","slug":"configuration","depth":2,"children":[]},{"title":"Common TCF Purpose IDs","slug":"common-tcf-purpose-ids","depth":2,"children":[]},{"title":"Interaction with setConsent API","slug":"interaction-with-setconsent-api","depth":2,"children":[]},{"title":"CMP Integration Considerations","slug":"cmp-integration-considerations","depth":2,"children":[{"title":"Timing","slug":"timing","depth":3,"children":[]},{"title":"Data Storage","slug":"data-storage","depth":3,"children":[]},{"title":"Consent Updates","slug":"consent-updates","depth":3,"children":[]}]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Related Documentation","slug":"related-documentation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/zeotap/8d1f66bf8eed64a4/scripts/convert-to-mdx.js"],"subdomain":"zeotap","siteName":"Zeotap docs","title":"TCF v2.x / GDPR Compliance - Zeotap docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-25T08:21:59.022Z","gitLastModified":"2026-06-25T08:20:38.000Z","originalFileLocation":"articles/sdks/react-native/consent/gdpr.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Zeotap docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"TCF v2.x / GDPR Compliance - Zeotap docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Zeotap docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zeotap.mintlify.site/_mintlify/api/og/v2?division=Consent+Resolution\u0026amp;title=TCF+v2.x+%2F+GDPR+Compliance\u0026amp;description=Integrating+the+Zeotap+React+Native+SDK+with+IAB+TCF+v2.x+compliant+Consent+Management+Platforms+%28CMPs%29+for+GDPR+compliance.\u0026amp;theme=860bb9e6ef8e2213f794d7e2\u0026amp;signature=3e1ab4ba0536f6f5ce07e46b762901c7cd4a125a7ec4486e6449bba9a09f57d2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"TCF v2.x / GDPR Compliance - Zeotap docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zeotap.mintlify.site/_mintlify/api/og/v2?division=Consent+Resolution\u0026amp;title=TCF+v2.x+%2F+GDPR+Compliance\u0026amp;description=Integrating+the+Zeotap+React+Native+SDK+with+IAB+TCF+v2.x+compliant+Consent+Management+Platforms+%28CMPs%29+for+GDPR+compliance.\u0026amp;theme=860bb9e6ef8e2213f794d7e2\u0026amp;signature=3e1ab4ba0536f6f5ce07e46b762901c7cd4a125a7ec4486e6449bba9a09f57d2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/zeotap/dSUuokAmJ7V-SYpL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Zeotap docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#174efb\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/articles/sdks/react-native/consent/gdpr.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.zeotap.com/#organization\",\"name\":\"Zeotap docs\",\"url\":\"https://docs.zeotap.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zeotap/pbiFRnrYXBNUsbba/logo/light.svg?fit=max\u0026auto=format\u0026n=pbiFRnrYXBNUsbba\u0026q=85\u0026s=c566b5af653699d3bcf4d8efb4f678d1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.zeotap.com#website\",\"name\":\"Zeotap docs\",\"url\":\"https://docs.zeotap.com\",\"publisher\":{\"@id\":\"https://docs.zeotap.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr#webpage\",\"url\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr\",\"name\":\"TCF v2.x / GDPR Compliance\",\"description\":\"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.\",\"dateModified\":\"2026-06-25T08:20:38.000Z\",\"isPartOf\":{\"@id\":\"https://docs.zeotap.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"React Native SDK\",\"item\":\"https://docs.zeotap.com/articles/sdks/react-native/intro\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Consent Resolution\",\"item\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/consent-strategy\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"TCF v2.x / GDPR Compliance\",\"item\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr#article\",\"headline\":\"TCF v2.x / GDPR Compliance\",\"name\":\"TCF v2.x / GDPR Compliance\",\"description\":\"Integrating the Zeotap React Native SDK with IAB TCF v2.x compliant Consent Management Platforms (CMPs) for GDPR compliance.\",\"url\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr\",\"mainEntityOfPage\":{\"@id\":\"https://docs.zeotap.com/articles/sdks/react-native/consent/gdpr#webpage\"},\"dateModified\":\"2026-06-25T08:20:38.000Z\",\"publisher\":{\"@id\":\"https://docs.zeotap.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.zeotap.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Zeotap docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Zeotap docs","nav":{"global":{},"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Products","icon":"grid-2","pages":[{"title":"Products","href":"/articles/integrate-customer/integrate"}]},{"tab":"SDKs","icon":"code","groups":[{"group":"Overview","icon":"compass","pages":[{"title":"Zeotap SDKs","href":"/articles/sdks/overview"}]},{"group":"Web JavaScript SDK","icon":"browser","pages":[{"title":"Introduction to Zeotap SDK","href":"/articles/sdks/web-js/intro"},{"title":"Quick Start Guide","href":"/articles/sdks/web-js/quick-start"},{"group":"Configurations","icon":"sliders","pages":[{"title":"Configurations","href":"/articles/sdks/web-js/configurations/overview"},{"title":"Write Key","href":"/articles/sdks/web-js/configurations/write-key"},{"title":"PII Hashing Configuration","href":"/articles/sdks/web-js/configurations/hashing"},{"title":"Consent Configuration Options","href":"/articles/sdks/web-js/configurations/consent-options"},{"title":"persistenceInCookieStorage","href":"/articles/sdks/web-js/configurations/persistence-in-cookie-storage"},{"title":"ID5 Integration","href":"/articles/sdks/web-js/configurations/id5"},{"title":"allowCookieSync","href":"/articles/sdks/web-js/configurations/allow-cookie-sync"},{"title":"Consent Based cookie syncing","href":"/articles/sdks/web-js/configurations/partner-consent-key-map"}]},{"group":"Guides \u0026 References","icon":"code","pages":[{"title":"Tracking User Identities","href":"/articles/sdks/web-js/api-reference/set-user-identities"},{"title":"Tracking Page Views","href":"/articles/sdks/web-js/api-reference/set-page-properties"},{"title":"Tracking User Actions","href":"/articles/sdks/web-js/api-reference/set-event-properties"},{"title":"Setting User Properties","href":"/articles/sdks/web-js/api-reference/set-user-properties"},{"title":"Tracking User Consent","href":"/articles/sdks/web-js/api-reference/set-consent"},{"title":"Logout communication","href":"/articles/sdks/web-js/api-reference/unset-user-identities"}]},{"title":"Interact SDK","href":"/articles/sdks/web-js/interact"},{"group":"Consent Resolution","icon":"shield-check","pages":[{"title":"Choosing a Consent Strategy","href":"/articles/sdks/web-js/consent/consent-strategy"},{"title":"Default Behavior (No Explicit Consent Management)","href":"/articles/sdks/web-js/consent/default"},{"title":"TCF v2.x / GDPR Compliance","href":"/articles/sdks/web-js/consent/gdpr"},{"title":"Custom Consent Management","href":"/articles/sdks/web-js/consent/custom-consent"}]},{"title":"Examples","href":"/articles/sdks/web-js/examples"},{"group":"FAQ","icon":"circle-question","pages":[{"title":"How to send cellno","href":"/articles/sdks/web-js/faq/how-to-send-cellno"},{"title":"All about cookie syncing","href":"/articles/sdks/web-js/faq/cookie-sync"}]},{"group":"Release Notes","icon":"clock-rotate-left","pages":[{"title":"Release Notes","href":"/articles/sdks/web-js/release-notes/overview"},{"title":"Version 4.4.4","href":"/articles/sdks/web-js/release-notes/v4.4.4"}]}]},{"group":"Google Tag Manager","icon":"google","pages":[{"title":"Introduction to Zeotap GTM Tag","href":"/articles/sdks/gtm/intro"},{"group":"Setup Guide","icon":"list-check","pages":[{"title":"Step 1 - Importing Zeotap Tag template via GTM Gallery","href":"/articles/sdks/gtm/setup-guide/import-template-to-gtm"},{"title":"Step 2 - Adding the Zeotap Collect Tag","href":"/articles/sdks/gtm/setup-guide/add-tag-to-gtm"},{"group":"Step 3 - Configuration","icon":"sliders","pages":[{"title":"Tag Configuration Overview","href":"/articles/sdks/gtm/setup-guide/configuration/overview"},{"title":"1. Initialization Options","href":"/articles/sdks/gtm/setup-guide/configuration/initialisation"},{"title":"2. Tracking Page Views and Events","href":"/articles/sdks/gtm/setup-guide/configuration/tracking"},{"title":"3. Login and Identity Settings","href":"/articles/sdks/gtm/setup-guide/configuration/login"},{"title":"4. Google Analytics Configuration","href":"/articles/sdks/gtm/setup-guide/configuration/google-analytics"},{"title":"5. ID5 Integration","href":"/articles/sdks/gtm/setup-guide/configuration/id5"}]},{"title":"Step 4 - Set Up the Trigger","href":"/articles/sdks/gtm/setup-guide/triggers"},{"title":"Step 5 - Validate the Configured Collect Tag","href":"/articles/sdks/gtm/setup-guide/validation"}]}]},{"group":"Adobe Launch","icon":"rocket","pages":[{"title":"Adobe Launch Integration Overview","href":"/articles/sdks/adobe-launch/intro"},{"title":"Installing the Zeotap Collect Extension","href":"/articles/sdks/adobe-launch/installation"},{"title":"Configuring the Zeotap Collect Extension","href":"/articles/sdks/adobe-launch/configure"},{"group":"Setting up Actions","icon":"bolt","pages":[{"title":"Setting Up Actions","href":"/articles/sdks/adobe-launch/actions/overview"},{"title":"Track Event","href":"/articles/sdks/adobe-launch/actions/track-events"},{"title":"Sync User Identity","href":"/articles/sdks/adobe-launch/actions/sync-user-identity"},{"title":"Set Custom Consent","href":"/articles/sdks/adobe-launch/actions/set-custom-consent"}]}]},{"group":"iOS SDK","icon":"apple","pages":[{"title":"Introduction to Zeotap Collect iOS SDK","href":"/articles/sdks/ios/intro"},{"title":"Quick Start Guide","href":"/articles/sdks/ios/quick-start"},{"group":"Configurations","icon":"sliders","pages":[{"title":"Configurations","href":"/articles/sdks/ios/configurations/overview"},{"title":"Write Key","href":"/articles/sdks/ios/configurations/write-key"},{"title":"PII Hashing Configuration","href":"/articles/sdks/ios/configurations/hashing"},{"title":"Consent Configuration Options","href":"/articles/sdks/ios/configurations/consent-options"}]},{"group":"Guides \u0026 References","icon":"code","pages":[{"title":"Track User Identities","href":"/articles/sdks/ios/api-reference/set-user-identities"},{"title":"Track Page View Events","href":"/articles/sdks/ios/api-reference/set-page-properties"},{"title":"Track User Events","href":"/articles/sdks/ios/api-reference/track"},{"title":"Setting User Properties","href":"/articles/sdks/ios/api-reference/set-user-properties"},{"title":"Track User Consent","href":"/articles/sdks/ios/api-reference/set-consent"},{"title":"Pause Collection","href":"/articles/sdks/ios/api-reference/pause-collection"},{"title":"Resume Collection","href":"/articles/sdks/ios/api-reference/resume-collection"},{"title":"Remove User Identities","href":"/articles/sdks/ios/api-reference/unset-user-identities"},{"title":"Collect Advertising ID (IDFA)","href":"/articles/sdks/ios/api-reference/collect-advertising-id"}]},{"group":"Consent Resolution","icon":"shield-check","pages":[{"title":"Choosing a Consent Strategy","href":"/articles/sdks/ios/consent/consent-strategy"},{"title":"Default Behavior (No Explicit Consent Management)","href":"/articles/sdks/ios/consent/default"},{"title":"TCF v2.x / GDPR Compliance","href":"/articles/sdks/ios/consent/gdpr"},{"title":"Custom Consent Management","href":"/articles/sdks/ios/consent/custom-consent"}]},{"title":"Implementation Examples","href":"/articles/sdks/ios/examples"},{"group":"Release Notes","icon":"clock-rotate-left","pages":[{"title":"Release Notes","href":"/articles/sdks/ios/release-notes/overview"},{"title":"Version 1.3.10","href":"/articles/sdks/ios/release-notes/v1.3.10"},{"title":"Version 1.3.9","href":"/articles/sdks/ios/release-notes/v1.3.9"},{"title":"Version 1.3.8","href":"/articles/sdks/ios/release-notes/v1.3.8"},{"title":"Version 1.3.7","href":"/articles/sdks/ios/release-notes/v1.3.7"},{"title":"Version 1.3.6","href":"/articles/sdks/ios/release-notes/v1.3.6"},{"title":"Version 1.3.4","href":"/articles/sdks/ios/release-notes/v1.3.4"},{"title":"Version 1.3.3","href":"/articles/sdks/ios/release-notes/v1.3.3"},{"title":"Version 1.3.2","href":"/articles/sdks/ios/release-notes/v1.3.2"},{"title":"Version 1.3.0","href":"/articles/sdks/ios/release-notes/v1.3.0"},{"title":"Version 1.2.0","href":"/articles/sdks/ios/release-notes/v1.2.0"},{"title":"Version 1.0.1","href":"/articles/sdks/ios/release-notes/v1.0.1"},{"title":"Version 1.0.0","href":"/articles/sdks/ios/release-notes/v1.0.0"}]}]},{"group":"Android SDK","icon":"android","pages":[{"title":"Introduction to Zeotap Collect Android SDK","href":"/articles/sdks/android/intro"},{"title":"Quick Start Guide","href":"/articles/sdks/android/quick-start"},{"group":"Configurations","icon":"sliders","pages":[{"title":"Configurations","href":"/articles/sdks/android/configurations/overview"},{"title":"Write Key","href":"/articles/sdks/android/configurations/write-key"},{"title":"PII Hashing Configuration","href":"/articles/sdks/android/configurations/hashing"},{"title":"Consent Configuration Options","href":"/articles/sdks/android/configurations/consent-options"}]},{"group":"API Reference","icon":"code","pages":[{"title":"Track User Identities","href":"/articles/sdks/android/api-reference/set-user-identities"},{"title":"Track Page View Events","href":"/articles/sdks/android/api-reference/set-page-properties"},{"title":"Track Events","href":"/articles/sdks/android/api-reference/set-event-properties"},{"title":"Track Instant Event","href":"/articles/sdks/android/api-reference/set-instant-event-properties"},{"title":"Track User Properties","href":"/articles/sdks/android/api-reference/set-user-properties"},{"title":"Track User Consent","href":"/articles/sdks/android/api-reference/set-consent"},{"title":"Remove User Identities","href":"/articles/sdks/android/api-reference/unset-user-identities"},{"title":"Pause Collection","href":"/articles/sdks/android/api-reference/pause-collection"},{"title":"Resume Collection","href":"/articles/sdks/android/api-reference/resume-collection"}]},{"group":"Consent Resolution","icon":"shield-check","pages":[{"title":"Choosing a Consent Strategy","href":"/articles/sdks/android/consent/consent-strategy"},{"title":"Default Behavior (No Explicit Consent Management)","href":"/articles/sdks/android/consent/default"},{"title":"TCF v2.x / GDPR Compliance","href":"/articles/sdks/android/consent/gdpr"},{"title":"Custom Consent Management","href":"/articles/sdks/android/consent/custom-consent"}]},{"title":"Implementation Examples","href":"/articles/sdks/android/examples"},{"group":"Release Notes","icon":"clock-rotate-left","pages":[{"title":"Release Notes","href":"/articles/sdks/android/release-notes/overview"},{"title":"Version 2.2.12","href":"/articles/sdks/android/release-notes/v2.2.12"},{"title":"Version 2.2.11","href":"/articles/sdks/android/release-notes/v2.2.11"},{"title":"Version 2.2.10","href":"/articles/sdks/android/release-notes/v2.2.10"},{"title":"Version 2.2.9","href":"/articles/sdks/android/release-notes/v2.2.9"},{"title":"Version 2.2.8","href":"/articles/sdks/android/release-notes/v2.2.8"},{"title":"Version 2.2.7","href":"/articles/sdks/android/release-notes/v2.2.7"},{"title":"Version 2.2.6","href":"/articles/sdks/android/release-notes/v2.2.6"},{"title":"Version 2.2.5","href":"/articles/sdks/android/release-notes/v2.2.5"},{"title":"Version 2.2.4","href":"/articles/sdks/android/release-notes/v2.2.4"},{"title":"Version 2.2.3","href":"/articles/sdks/android/release-notes/v2.2.3"},{"title":"Version 2.2.0","href":"/articles/sdks/android/release-notes/v2.2.0"},{"title":"Version 2.1.1","href":"/articles/sdks/android/release-notes/v2.1.1"},{"title":"Version 2.1.0","href":"/articles/sdks/android/release-notes/v2.1.0"},{"title":"Version 2.0.1","href":"/articles/sdks/android/release-notes/v2.0.1"},{"title":"Version 2.0.0","href":"/articles/sdks/android/release-notes/v2.0.0"},{"title":"Version 1.0.0","href":"/articles/sdks/android/release-notes/v1.0.0"}]}]},{"group":"React Native SDK","icon":"react","pages":[{"title":"Introduction to React Native SDK","href":"/articles/sdks/react-native/intro"},{"title":"Quick Start","href":"/articles/sdks/react-native/quick-start"},{"group":"Configurations","icon":"sliders","pages":[{"title":"Configurations","href":"/articles/sdks/react-native/configurations/overview"},{"title":"Write Key","href":"/articles/sdks/react-native/configurations/write-key"},{"title":"PII Hashing Configuration","href":"/articles/sdks/react-native/configurations/hashing"},{"title":"Consent Configuration Options","href":"/articles/sdks/react-native/configurations/consent-options"}]},{"group":"API Reference","icon":"code","pages":[{"title":"Track User Identities","href":"/articles/sdks/react-native/api-reference/set-user-identities"},{"title":"Track Page View Events","href":"/articles/sdks/react-native/api-reference/set-page-properties"},{"title":"Track Events","href":"/articles/sdks/react-native/api-reference/set-event-properties"},{"title":"Track Instant Events","href":"/articles/sdks/react-native/api-reference/set-instant-event-properties"},{"title":"Track User Properties","href":"/articles/sdks/react-native/api-reference/set-user-properties"},{"title":"Track User Consent","href":"/articles/sdks/react-native/api-reference/set-consent"},{"title":"Remove User Identities","href":"/articles/sdks/react-native/api-reference/unset-user-identities"},{"title":"Pause Collection","href":"/articles/sdks/react-native/api-reference/pause-collection"},{"title":"Resume Collection","href":"/articles/sdks/react-native/api-reference/resume-collection"}]},{"group":"Consent Resolution","icon":"shield-check","pages":[{"title":"Choosing a Consent Strategy","href":"/articles/sdks/react-native/consent/consent-strategy"},{"title":"Default Behavior (No Explicit Consent Management)","description":"Understand how the Zeotap React Native SDK operates regarding consent when no specific consent mechanism is configured.","href":"/articles/sdks/react-native/consent/default"},{"title":"TCF v2.x / GDPR Compliance","href":"/articles/sdks/react-native/consent/gdpr"},{"title":"Custom Consent Management","description":"Manually manage user consent using the Zeotap React Native SDK's setConsent API when not using a TCFv2 CMP.","href":"/articles/sdks/react-native/consent/custom-consent"}]},{"title":"Implementation Examples","href":"/articles/sdks/react-native/examples"},{"group":"Release Notes","icon":"clock-rotate-left","pages":[{"title":"Release Notes","href":"/articles/sdks/react-native/release-notes/overview"},{"title":"Version 1.3.9","href":"/articles/sdks/react-native/release-notes/v1.3.9"},{"title":"Version 1.3.8","href":"/articles/sdks/react-native/release-notes/v1.3.8"},{"title":"Version 1.3.7","href":"/articles/sdks/react-native/release-notes/v1.3.7"},{"title":"Version 1.3.6","href":"/articles/sdks/react-native/release-notes/v1.3.6"},{"title":"Version 1.3.5","href":"/articles/sdks/react-native/release-notes/v1.3.5"},{"title":"Version 1.3.4","href":"/articles/sdks/react-native/release-notes/v1.3.4"},{"title":"Version 1.3.3","href":"/articles/sdks/react-native/release-notes/v1.3.3"},{"title":"Version 1.3.2","href":"/articles/sdks/react-native/release-notes/v1.3.2"},{"title":"Version 1.3.1","href":"/articles/sdks/react-native/release-notes/v1.3.1"},{"title":"Version 1.3.0","href":"/articles/sdks/react-native/release-notes/v1.3.0"},{"title":"Version 1.2.1","href":"/articles/sdks/react-native/release-notes/v1.2.1"},{"title":"Version 1.2.0","href":"/articles/sdks/react-native/release-notes/v1.2.0"},{"title":"Version 1.1.6","href":"/articles/sdks/react-native/release-notes/v1.1.6"},{"title":"Version 1.1.5","href":"/articles/sdks/react-native/release-notes/v1.1.5"},{"title":"Version 1.1.4","href":"/articles/sdks/react-native/release-notes/v1.1.4"},{"title":"Version 1.1.3","href":"/articles/sdks/react-native/release-notes/v1.1.3"},{"title":"Version 1.1.2","href":"/articles/sdks/react-native/release-notes/v1.1.2"},{"title":"Version 1.1.1","href":"/articles/sdks/react-native/release-notes/v1.1.1"},{"title":"Version 1.1.0","href":"/articles/sdks/react-native/release-notes/v1.1.0"},{"title":"Version 1.0.1","href":"/articles/sdks/react-native/release-notes/v1.0.1"},{"title":"Version 1.0.0","href":"/articles/sdks/react-native/release-notes/v1.0.0"}]}]}]},{"tab":"Status","icon":"signal","href":"https://status.zeotap.com/"},{"tab":"Profile API","icon":"square-terminal","pages":[{"title":"Profile API","href":"/profile-api/profileapi"}]},{"tab":"Get Started","icon":"rocket","hidden":true,"pages":[{"title":"Get Started","href":"/articles/get-started-guide/getting-started"}]},{"tab":"What's New?","icon":"calendar-days","pages":[{"title":"What's New?","href":"/articles/product-release-notes/2026/q3-2026"}]},{"tab":"Composable CDP","href":"https://composable-docs.zeotap.com/"},{"tab":"ID+","icon":"fingerprint","hidden":true,"pages":[{"title":"ID+","href":"/articles/id-publication/basic-integration-guide_v2"}]},{"tab":"Support","icon":"headset","hidden":true,"pages":[{"title":"Support","href":"/articles/support/clear-your-cache-and-cookies"}]}]},"basePath":"","title":"TCF v2.x / GDPR Compliance - Zeotap docs","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["10e4515597"],"chunks":["BannerMarkdown-Cj6eAYhz.js","dist-CdrJecqK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-D-TRO5q5.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}