- 概述
- 用法
- 细粒度和全局同意
- 同意配置
- 同意管理
- 阻止行为
- 集成和可用性
- 常见问题解答
- 5 月 25 日,AMP 会默认更改任何行为吗?
- 如何停止在所有 AMP 页面上进行广告和分析调用?
- 如何从 AMP 页面上的所有用户那里收集同意?
- 如何停止向来自欧洲经济区的用户显示我的所有内容?
- 如何仅针对欧洲经济区用户进行同意?
- 我可以使同意 UI 成为阻塞式吗?
- 什么是 checkConsentHref?它是否是强制性的?
- 什么是 consentRequired?
- 我还在非 AMP 页面上管理同意,如何协调两者?
- 如何向广告网络/分析提供商发送其他信息?
- 我有一个复杂的同意 UI,它能工作吗?
- 如何为用户显示一个持久的 UX 元素来更新他们的同意首选项?
- 我可以保持非欧盟体验不变,而仅向所有欧盟用户提供“选择退出”体验吗?
- 可以通过 amp-geo(直接或通过 amp-bind)设置同意吗?如果不能,可以在 checkConsentHref 的响应中设置吗?
- 是每次页面浏览还是在每次用户操作期间调用“checkConsentHref”?
- amp-geo 可以与 amp-consent 一起工作,以便仅针对从特定国家/地区访问我内容的用户显示同意吗?
- AMP 是否支持 IAB TCF?
- 我有一个使用 AMP 实现的 CMP,但对于 TCF v2,我需要做什么才能支持 TCF v2.2?
- 我看不到支持的功能 X,我该怎么办?
- 相关资源
- 支持的同意管理平台
amp-consent
描述
提供通过 UI 控件收集和存储用户同意的功能。还提供根据用户同意阻止其他 AMP 组件的功能。
必需的脚本
<script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.js"></script>
支持的布局
概述
作为发布商,您可以使用 <amp-consent>
组件来实现用户控件。该组件允许您
- 确定是否应要求用户与控件交互。
- 捕获用户的同意决定。
- 使 AMP 页面上的元素可以使用用户的设置来修改页面的行为。
如果您是希望根据 amp-consent 自定义组件行为的供应商,或者需要收集更高级的同意信息,您可以在此处了解更多信息。
用法
页面上只允许一个 <amp-consent>
元素,并且该元素必须指定一个唯一的 id
。
如果您还在页面上包含一个 <amp-user-notification>
元素,则与 <amp-consent>
和 <amp-user-notification>
关联的 UI 将不具有确定性。如果这会带来问题,请避免将 <amp-consent>
与 <amp-user-notification>
一起使用。
细粒度和全局同意
<amp-consent>
支持全局同意,用户可以在其中为网站做出单一同意选择。它还支持细粒度同意,允许用户进行一系列选择。
要实现细粒度同意,请定义一组同意目的。为每个目的选择一个名称。创建一个 UI,允许用户为每个目的做出选择,并使用 setPurpose()
操作保存每个选择。
<amp-consent>
支持的其他操作同时适用于细粒度和全局同意。因此,一个网页可以同时实现这两种类型。
同意配置
<amp-consent>
元素需要一个 JSON 配置对象,该对象指定扩展的行为。
示例
<amp-consent layout="nodisplay" id="consent-element"> <script type="application/json"> { "consentInstanceId": "my-consent", "consentRequired": "remote", "checkConsentHref": "https://example.com/api/check-consent", "promptUI": "consent-ui", "onUpdateHref": "https://example.com/update-consent" } </script> <div id="consent-ui"> <button on="tap:consent-element.accept">Accept</button> <button on="tap:consent-element.reject">Reject</button> <button on="tap:consent-element.dismiss">Dismiss</button> </div> </amp-consent>
同意实例
同意实例 ID
consentInstanceId
:同意配置的标识符。
checkConsentHref
checkConsentHref
:指示 AMP 向指定的 URL 发出带有凭据的 CORS POST 请求,以远程配置同意。此目的可以是以下任一项:1) 确定是否需要用户的同意,2) 从服务器获取同意状态,3) 从服务器获取额外的 sharedData
以与 AMP 组件共享。
请求
AMP 在带有 POST 请求的 consentInstanceId
字段中发送同意实例 ID。
{ "consentInstanceId": {string}, "consentStateValue": {enum}, // the stored consent state in client cache // takes value of ["accepted", "rejected", "unknown"] "consentString": {string}, // the stored consent string in client cache "matchedGeoGroup": {string}, // (new) the user's geoGroup detected by AMP. }
响应
AMP 希望响应是一个类似以下的 JSON 对象
{ "consentRequired": {boolean} // Whether consent is required from the user. // The value is required it is used to // determine if consent is required. If not // found, AMP will unblock content as consent is not required. "consentStateValue": {?enum} [default: null], // The latest consent state known // by the server // Takes value of ["accepted", "rejected", // "unknown"]. // The value will be ignored if // "consentRequired: false". // If the value is non-null, it will be cached at client. "consentString": {?string} [default: null], // The latest consent string known by the server. // If the value is non-null, // and if the consentStateValue is "accepted" or "rejected", // the value will be cached at client. "expireCache": {boolean} [default: false] // Indicate that the cache needs to be cleared // Set to `true` in conjunction with // consentStateValue='accepted'/'rejected' // to enforce server side consent state }
对于细粒度同意,此响应还可以包含 purposeConsent
选择的映射。
注意:旧版 promptIfUnknown
正在迁移到 consentRequired
,因为提示不再是管理同意的严格要求。
consentStateValue
可以被认为是运行时阻止和取消阻止组件的信号。值 accepted
指示 AMP 用户已同意(或在选择退出情况下未撤销同意)。这可以在某些情况下用于投放个性化广告。值 rejected
表示用户不同意(或在选择退出情况下已撤销同意),并且供应商可能会决定不投放个性化广告。
(可选)可以在响应中以 sharedData
字段的形式返回其他键值对。
{ "consentRequire": true, "sharedData": { "a-key": "some-string-value", "key-with-bool-value": true, "key-with-numeric-value": 123 } }
与同意状态一样,sharedData
可供其他 AMP 扩展使用。第三方供应商扩展和 checkConsentHref
远程端点可以就这些键值对的特定含义达成一致。一个用例是远程端点将当前用户的额外同意相关信息传递给第三方供应商扩展。
与同意状态不同,此 shareData
不会持久存储在客户端存储中。
consentRequired
consentRequired
:它接受一个布尔值,指示是否需要同意。如果 consentRequired: false
并且客户端缓存中没有存储以前的同意决定,则 <amp-consent>
将取消阻止具有 UNKNOWN_NOT_REQUIRED
状态的组件。它主要与geoOverride配置结合使用,以便只有某些地区需要同意。
它也可以设置为 consentRequired: "remote"
,以便从 checkConsentHref
端点远程获取该值。当发布商希望使用自己的服务器来决定是否需要同意时,这非常有用。例如,他们希望拥有自己的地理位置检测,或对已知用户使用现有的同意状态。当不使用 geoOverride
(#geooverride) 时,如果未指定,consentRequired
值默认设置为 remote
。
请注意,如果客户端缓存中存储了以前的同意状态(请参阅客户端缓存部分中的示例),则将忽略此值。
purposeConsentRequired
对于细粒度同意,purposeConsentRequired
允许您指定一组同意目的。在用户为每个目的做出选择之前,他们每次访问您的网页时都会显示同意 UI。
例如,如果您想确保用户为已调用 purpose-analytics
和 purpose-marketing
的同意目的做出选择,则您的 JSON 将包括
"purposeConsentRequired": ["purpose-analytics", "purpose-marketing"]
onUpdateHref
onUpdateHref
:指示 AMP 在存储的同意状态更改时向指定的 URL 发出带有凭据的 CORS HTTPS POST 请求。
AMP 发送同意实例 ID、仅用于此用途的生成的用户 ID 和同意状态以及 POST 请求。
{ "consentInstanceId": "my-consent", "ampUserId": "xxx", "consentStateValue": "accepted"/"rejected"/"unknown" }
promptUI
promptUI
:指定用于收集用户同意的提示元素。提示元素应为 <amp-consent>
的子元素,其 id
由 promptUI
引用。有关用户如何与提示 UI 交互的详细信息,请参阅提示 UI部分。
通过此提示 UI 从用户收集的同意决定将作为客户端缓存存储在 localStorage
中。有关如何使用缓存的信息,请参阅客户端缓存部分。
geoOverride
geoOverride
提供了一种利用 <amp-geo>
组件来检测用户地理位置的方法,以辅助客户端决策。
geoOverride
是一个 JSON 对象,其键为 <amp-geo>
中定义的地理组代码(详情请见此处)。每个地理覆盖应是一个有效的 <amp-consent>
配置对象。AMP 将采用相应 geoOverride
中的所有值来覆盖现有配置。唯一的例外是 consentInstanceId
不能被 geoOverride
配置覆盖,因为 AMP 只在一个实例中管理和存储同意信息。
配置 amp-geo
时需要注意两个重要提示
- 所有地理组都应该是互斥的。如果用户属于多个地理覆盖,则行为是不确定的。
- 为
<amp-geo>
无法识别的用户提供geoGroupUnknown
覆盖。
以下面的配置为例
{ "onUpdateHref": "https://example.com/update-consent", "promptUI": "consent-ui", "consentRequired": false, "geoOverride": { "geoGroup1": { "consentRequired": true }, "geoGroup2": { "checkConsentHref": "https://example.com/check-consent", "consentRequired": "remote" }, "geoGroupUnknown": { "checkConsentHref": "https://example.com/check-consent", "consentRequired": true } } }
对于 geoGroup1
、geoGroup2
和 geoGroupUknown
之外的用户,合并后的配置为
{ "onUpdateHref": "https://example.com/update-consent", "promptUI": "consent-ui", "consentRequired": false }
<amp-consent>
不执行任何操作,因为 "consentRequired": false
。
对于 geoGroup1
中的用户,合并后的配置为
{ "onUpdateHref": "https://example.com/update-consent", "promptUI": "consent-ui", "consentRequired": true }
由于未指定 checkConsentHref
,因此同意收集和存储完全在客户端处理。当且仅当客户端缓存为空时,AMP 才会提示同意 UI。
对于 geoGroup2
中的用户,合并后的配置为
{ "onUpdateHref": "https://example.com/update-consent", "promptUI": "consent-ui", "checkConsentHref": "https://example.com/check-consent", "consentRequired": "remote" }
如果客户端缓存为空,AMP 将等待 checkConsentHref
响应来决定是否需要用户同意。如果响应包含 consentRequired: true
和 consentStateValue: unknown
,则 AMP 将通过指定的提示 UI 收集同意。如果 consentStateValue
为 'accepted' 或 'rejected',则它将使用此值并同步到缓存。
对于 geoGroupUnknown
中的用户,合并后的配置为
{ "onUpdateHref": "https://example.com/update-consent", "promptUI": "consent-ui", "checkConsentHref": "https://example.com/check-consent", "consentRequired": true }
AMP 将并行检查客户端缓存和服务器,以查找之前的同意状态。由于 "consentRequired": true
,如果缓存为空,它将通过指定的提示 UI 收集同意,而无需等待服务器响应。服务器响应主要用于刷新缓存或获取 shareData
。
xssiPrefix
xssiPrefix
:使 <amp-consent>
从 checkConsentHref
端点的响应中删除前缀。如果响应中不存在前缀,则此选项将不起作用。xssiPrefix
对于包含 安全前缀(如 )]}
)的 API 非常有用,有助于防止跨站点脚本攻击。
uiConfig
uiConfig
为 <amp-consent>
提供额外的 UI 和行为。uiConfig
是一个可选的 JSON 对象,可以包含键 overlay
,它是一个布尔值。overlay: true
将在同意提示后面添加一个浅黑色叠加层,以帮助用户专注于提示。此外,这将阻止用户与同意提示下方的进行交互(例如滚动)。overlay: false
为默认值。
字幕
captions
为 <amp-consent>
的屏幕阅读器用户提供辅助功能。captions
是一个可选的 JSON 对象,可以包含 consentPromptCaption
和 buttonActionCaption
字符串。这些字段的默认值分别为“用户同意提示”和“聚焦提示”,但可以根据您的用例(例如本地化)覆盖和自定义这些值。当加载 iframe 中的同意提示时,屏幕阅读器将读取 consentPromptCaption
,然后读取 buttonActionCaption
。consentPromptCaption
应充当同意提示的标题,而 buttonActionCaption
应告知用户他们可以与 iframe 进行交互。
{ "captions": { "consentPromptCaption": "This is an example user consent prompt", "buttonActionCaption": "Click to interact with the prompt" } }
同意管理
<amp-consent>
元素支持自定义同意提示 UI 和提示后 UI,可用于管理同意。
样式
<amp-consent>
元素在布局发生后设置为 position: fixed
(默认为 bottom: 0,可以被覆盖)。
默认情况下,amp-consent
中包含的所有 UI 元素都具有 display:none
,并在显示时将 display
设置为 display:block
。不会同时显示两个 UI 元素。当显示时,默认情况下,UI 元素固定在页面底部。
提示 UI
提示 UI 在同意实例配置中定义。promptUI
属性通过其 id
引用 <amp-consent>
的子元素。
示例:显示提示用户界面
<amp-consent layout="nodisplay" id="consent-element"> <script type="application/json"> { "consentInstanceId": "my-consent", "checkConsentHref": "https://foo.com/api/show-consent", "promptUI": "consent-ui" } </script> <div id="consent-ui"> <button on="tap:consent-element.accept">Accept</button> <button on="tap:consent-element.reject">Reject</button> <button on="tap:consent-element.dismiss">Dismiss</button> </div> </amp-consent>
AMP 在页面加载时或通过用户交互显示提示 UI。根据下面描述的三个用户操作,提示 UI 会被隐藏。
AMP 还通过 promptUiSrc
支持外部同意 UI 流,它将加载您的自定义 iframe。有关用户操作通信的更多信息,请参见此处。
故事的提示 UI
amp-story
扩展提供一个默认提示 UI,它要求使用 <amp-story-consent>
组件作为提示 UI。此组件内容需要一个 title
、一个 message
和一个 vendors
列表,并且必须在其自己的组件配置中指定。可以通过添加可选的 onlyAccept
布尔参数来隐藏拒绝按钮。此外,可以通过将 "externalLink": {"title": "隐私设置", "href": "https://example.com"}
添加到同意配置来配置可选的模板化外部链接到隐私策略或设置。
示例:在 AMP Story 上显示提示用户界面
<amp-consent layout="nodisplay" id="consent-element"> <script type="application/json"> { "checkConsentHref": "https://foo.com/api/show-consent", "promptUI": "consent-ui" } </script> <amp-story-consent id="consent-ui" layout="nodisplay"> <script type="application/json"> { "title": "My title", "message": "My example message.", "vendors": ["Item 1", "Item 2", "Item 3", "Item 4"] } </script> </amp-story-consent> </amp-consent>
提示操作
三个用户操作适用于粒度同意和全局同意:accept
、reject
和 dismiss
。
要使用户能够选择同意状态并隐藏提示 UI,请将 on
属性添加到按钮,其值方案如下:on="event:idOfAmpConsentElement.accept/reject/dismiss"
-
accept
:发布者指示 AMP 记住对同意的接受决定,取消阻止等待同意的组件,并隐藏提示 UI。 -
reject
:发布者指示 AMP 记住对同意的拒绝决定,取消等待同意的组件的buildCallback
(AMP 生命周期回调以构建 AMP 组件),并隐藏提示 UI。 -
dismiss
:指示 AMP 取消等待同意的组件的buildCallback
,并隐藏提示 UI。
setPurpose
操作在粒度同意中使用。您可以使用它来临时存储用户对单个同意目的的选择。此操作的形式为 setPurpose({purpose name}={boolean value})
。将目的设置为 true
表示已接受;将目的设置为 false
表示已拒绝。
例如,要将名为 performanceCookies
的同意目的标记为 true
,您将使用
myConsent.setPurpose(performanceCookies=true)
接受或拒绝全局同意的 accept
和 reject
操作也会保存粒度同意选择。如果您传递其中任何一个参数 (purposeConsentDefault={boolean value})
,则用户尚未选择的任何同意目的都将分配该布尔值。
例如,操作
myConsent.accept(purposeConsentDefault=false)
将拒绝用户尚未选择的任何同意目的。
如果您不使用 purposeConsentDefault
,则用户尚未选择的任何目的将保持未设置状态。因此,尤其是在提示 UI 是带有复选框的表单时,通常建议您包含此参数。
提示后 UI(可选)
您可以在收集初始同意后提供 UI。例如,您可以为用户提供 UI 来管理他们的同意(例如,将其“拒绝”更改为“接受”)。提示后 UI 使用 <amp-consent>
JSON 配置对象定义。postPromptUI
通过 ID 引用一个元素。如果该元素是 <amp-consent>
的子元素,则它将像提示 UI 一样固定在页面底部。您也可以在文档中内联 postPromptUI
,但请注意切换此元素的显示可能导致的布局偏移。
定义后,当所有提示 UI 都已隐藏时,或者在页面加载时如果未触发任何提示 UI,则会显示提示后 UI。
<amp-consent layout="nodisplay" id="consent-element"> <script type="application/json"> { "consentInstanceId": "consent-foo", "promptUI": "consent-ui", "postPromptUI": "post-consent-ui" } </script> <div id="consent-ui"> ... </div> <div id="post-consent-ui"> <button on="tap:consent-element.dismiss">Settings</button> </div> </amp-consent>
提示后操作
提示后 UI 提供一种用户操作类型,可用于允许用户管理先前设置的同意。使用 prompt
为给定的同意实例显示提示。将 on
属性添加到按钮,其值方案如下:on="event:idOfAmpConsentElement.prompt"
。
阻止行为
可以使用 <amp-consent>
元素阻止页面上的任何其他 AMP 组件加载(<amp-consent>
本身除外)。
客户端缓存
同意信息(来自响应或来自客户端的用户操作)将缓存在客户端的 localStorage 中。如果存在缓存值,<amp-consent>
将始终使用该值来取消阻止内容,以优化性能。服务器端点可以指示 <amp-consent>
擦除存储的值,以便在下次访问时不会使用该值取消阻止内容,方法是使用 expireCache: true
。
此行为的几个含义
- 当存储的用户同意不再适用时,更改将通过
checkConsentHref
响应同步。但由于客户端缓存,更改将一次性应用。 - 当用户旅行时,
<amp-consent>
将使用存储的同意。checkConsentHref
响应可以使用expireCache: true
和consentRequired: false
擦除存储的值。 - 如果使用 promptUI 收集用户同意。使用
expireCache: true
将提示同意对话框,并在用户后续访问时阻止用户访问内容。
<amp-consent>
将同意选择存储在名为 amp-store:{xxx}
的键中,其中 {xxx}
是您的域名。该值是经过 base64 编码的 JSON。
基本阻止行为
在全局同意设置中,要阻止组件,可以在 AMP 组件中添加 data-block-on-consent
属性,或者添加带有要阻止的扩展程序列表的 amp-consent-blocking
meta 标签。请注意,如果您使用 type
属性进行 CMP 集成,则还必须包含 amp-consent-blocking
meta 标签。这可以确保在接受同意之前,或者如果根据 consentRequired
值用户不需要同意,则不会调用组件的 buildCallback
。实际上,这意味着元素的所有行为(例如,为 <amp-analytics>
发送分析 ping 或加载 <amp-ad>
)都会延迟到接受相关的同意实例为止。
各个组件可以覆盖此行为以提供更专门的处理。有关详细信息,请参阅每个组件的文档。
示例:阻止分析直到用户接受同意
<amp-analytics data-block-on-consent type="googleanalytics"> </amp-analytics>
或
<meta name="amp-consent-blocking" content="amp-analytics,amp-ad" />
对于细粒度的同意,请使用带有以逗号分隔的同意目的列表的 data-block-on-consent-purposes
属性。例如,以下内容将阻止一个 amp-pixel
组件,直到用户接受名为 performance
和 marketing
的目的为止
<amp-pixel data-block-on-consent-purposes="performance, marketing"></amp-pixel>
高级预定义同意阻止行为
AMP 提供了一系列预定义的同意策略实例,供发布商轻松定义对各个组件的同意阻止行为。
将值设置为 data-block-on-consent
属性,以使用预定义的同意阻止行为策略。
示例:阻止分析直到用户响应同意
<amp-analytics data-block-on-consent="_till_responded" type="googleanalytics"> </amp-analytics>
AMP 将来可能会支持更高级的预定义阻止行为。因此,data-block-on-consent
的值仅保留用于以下支持的预定义属性
_till_responded
:取消阻止组件,直到用户响应同意提示或跳过同意提示。_till_accepted
:默认基本阻止行为,区别在于,当显式添加_till_accepted
时,各个组件无法覆盖阻止行为。_auto_reject
:如果需要同意但未知,则始终自动拒绝同意。拒绝同意决定不会存储。建议在自动拒绝每个组件的同意时,不要指定同意提示 UI。
当使用预定义属性之一时,AMP 假定发布商对同意阻止行为拥有最终控制权。各个组件无法覆盖预定义同意策略带来的阻止行为,但它们仍然可以在取消阻止后自定义组件的行为。
自定义同意阻止行为
可以在 <amp-consent>
元素的 JSON 配置对象中添加可选的 policy
属性。其值是一个自定义同意阻止行为的对象。
<amp-consent layout="nodisplay" id="consent-element"> <script type="application/json"> { "consentInstanceId": xxx "checkConsentHref": "https://example.com/api/show-consent" "policy": { "default": { "timeout": { "seconds": 5, "fallbackAction": "reject" } } } } </script> </amp-consent>
default
策略是唯一允许配置的策略。此策略适用于通过 data-block-on-consent
属性阻止的每个元素。
策略实例(可选)
waitFor
waitFor
对象指定需要等待的同意实例。每个同意实例都需要一个数组值。AMP 可能会支持同意实例下的子项列表,但目前只期望空数组,并且该值将被忽略。
超时(可选)
timeout
可用于在指定时间后告知组件当前的同意状态。
当用作单个值时,timeout
等于超时值(以秒为单位)。
"default": { "waitFor": { "my-consent": [] }, "timeout": 2 }
当用作对象时。timeout
对象支持两个属性
seconds
:超时值(以秒为单位)fallbackAction
(可选):如果未采取任何用户操作且未存储任何状态,则在超时时的回退操作。支持的回退操作是reject
和dismiss
。如果未配置,则默认操作为dismiss
。请注意,由于超时时的回退操作而导致的同意状态更改不会存储在客户端。
"default": { "waitFor": { "my-consent": [] }, "timeout": { "seconds": 2, "fallbackAction": "reject" } }
集成和可用性
下表列出了与 amp-consent 集成的供应商和组件
集成 | 生产可用性 | 文档 | 准备测试 |
---|---|---|---|
DoubleClick 和 AdSense 集成 | 05/10/18 | 链接 | 是 |
AMP IMA 视频集成 | 05/15/18 | 链接 | 是 |
AMP Geo | 05/10/18 | 链接 | 是 |
AMP Stories | 05/15/18 | 链接 | 是 |
常见问题解答
5 月 25 日,AMP 会默认更改任何行为吗?
否。AMP 页面上的所有所需行为都由发布商管理,这没有什么不同。
如何停止在所有 AMP 页面上进行广告和分析调用?
在 <amp-ad>
或 <amp-analytics>
组件上使用 data-block-on-consent
属性。
示例
<amp-ad data-block-on-consent width="320" height="50" type="doubleclick" data-slot="/4119129/mobile_ad_banner" > </amp-ad>
注意:对于某些供应商,data-block-on-consent
属性仅与 <amp-consent>
结合使用。有关实施细节,请咨询您的广告或分析供应商。
如何从 AMP 页面上的所有用户那里收集同意?
使用 <amp-consent>
组件,该组件允许使用 Accept
、Reject
和 Dismiss
状态配置自定义 UI。每个 amp-component 供应商如何解释这些状态取决于他们自己,因此请仔细阅读供应商的文档。
如何停止向来自欧洲经济区的用户显示我的所有内容?
您可以考虑通过实现 <amp-geo>
来隐藏 EEA 用户的所有内容。有关详细信息,请参阅这篇博文。
如何仅针对欧洲经济区用户进行同意?
使用 <amp-geo>
配置国家/地区组,并将国家/地区组连接到 <amp-consent>
中的 geoOverride
属性。如果用户从列表中配置的国家/地区访问 AMP 页面,则会调用相应的同意 UI。
我可以使同意 UI 成为阻塞式吗?
是。UI 不是规范性的。如果您最终提供非阻止版本的 UI,则关闭 UI 将导致 dismiss
状态。每个供应商(广告和分析)如何处理 accept
、reject
和 dismiss
取决于他们自己。
什么是 checkConsentHref
?它是否是强制性的?
请注意,如果您完全在客户端收集同意并存储同意,则 checkConsentHref
不是强制性的。
checkConsentHref
使您(发布商)能够知道是否必须向用户显示同意。例如,通过使用此调用,您可以在服务器端确定用户的地理位置,从而允许您禁止同意。您也可以使用 <amp-geo>
和 geoOverride
来实现相同的结果,而无需任何服务器端设置。
如果您检测到用户不需要同意,因为他们已经在其他属性上同意或出于其他原因同意,您也可以选择禁止同意。
什么是 consentRequired
?
consentRequired
用于确定用户是否需要同意。它可以在 <amp-consent>
的配置中为不同的地理区域指定,也可以从 checkConsentHref
端点检索。
我还在非 AMP 页面上管理同意,如何协调两者?
您可以配置 checkConsentHref
以调用您自己的服务器端端点来检测用户的同意状态,并协调您希望 AMP 如何通过使用来自 checkConsentHref
的响应来执行操作。
如何向广告网络/分析提供商发送其他信息?
checkConsentHref
的响应还接受响应上 sharedData
键的值,这些值将提供给所有被同意逻辑阻止的供应商组件。如何处理此 sharedData 取决于供应商。DoubleClick/AdSense 需要特定的键值,有关详细信息,请参阅其文档。
我有一个复杂的同意 UI,它能工作吗?
您应该尝试高级同意流程,以了解它是如何实现的。您还可以考虑使用 <amp-selector>
组件。
如何为用户显示一个持久的 UX 元素来更新他们的同意首选项?
您可以使用可选的提示后 UI 来实现此目的。请查看AMP By Example 上的示例,了解类似的实现。
我可以保持非欧盟体验不变,而仅向所有欧盟用户提供“选择退出”体验吗?
您可以配置 <amp-consent>
和 <amp-geo>
,以向特定国家/地区的用户显示同意(例如,通过您配置的 EEA 国家/地区列表)。如果发布商希望,还可以将 <amp-consent>
组件配置为自动代表用户“拒绝”同意。执行此操作的方法是将timeout
秒数设置为 0
,并将 fallbackAction
设置为 reject
。请注意,fallbackAction
状态不会在会话之间存储。另请注意,每个广告网络都有自己的实现方式,用于解释用户的“拒绝”操作。无法自动代表用户“接受”同意。
您可以了解更多关于 Google AdSense 和 DoubleClick 如何计划处理“拒绝”以及任何可用于投放非个性化广告的配置。
可以通过 amp-geo(直接或通过 amp-bind)设置同意吗?如果不能,可以在 checkConsentHref 的响应中设置吗?
如果之前没有同意状态,则可以使用 checkConsentHref
的响应向用户显示同意,这允许用户完成同意流程。有关默认拒绝同意的详细信息,请参阅上面的选择退出问题。默认情况下不可能“接受”同意。
是每次页面浏览还是在每次用户操作期间调用“checkConsentHref”?
在向用户显示同意 UI 之前,会在每个页面视图上调用 checkConsentHref
。
amp-geo 可以与 amp-consent 一起工作,以便仅针对从特定国家/地区访问我内容的用户显示同意吗?
是。请参阅此处的示例此处。
AMP 是否支持 IAB TCF?
AMP 支持流行的透明度同意框架,包括 IAB TCF v1、TCF v2、TCF v2.2、IAB US 隐私字符串和 IAB 全球隐私平台字符串。请向您的同意管理平台 (CMP) 和广告网络查询他们对 AMP 的支持。当 CMP/广告网络收到框架(IAB TCF v1、TCF v2、TCF v2.2、IAB US 隐私字符串和 IAB 全球隐私平台字符串)传递的字符串时,AMP 将读取并传递这些字符串。
我有一个使用 AMP 实现的 CMP,但对于 TCF v2,我需要做什么才能支持 TCF v2.2?
对于 AMP 集成,您唯一需要做的是在客户端 postMessage
期间提供 tcfPolicyVersion
的值,如果您还使用 checkConsentHref
,则需要在响应中提供该值,您还可以通过服务器响应中的 tcfPolicyVersion
字段直接从响应中更新它,如果您在传输到 TCF v2.2 之前没有添加 tcfPolicyVersion 字段,这将允许您更新同意。
我看不到支持的功能 X,我该怎么办?
加入我们正在讨论即将推出的潜在功能的讨论。如果尚未支持某些内容,请在线程上发表意见。
相关资源
支持的同意管理平台
您已经阅读这份文档很多遍了,但它仍然没有涵盖您所有的问题?也许其他人也有同样的感觉:在 Stack Overflow 上联系他们。
前往 Stack Overflow 发现错误或缺少功能?AMP 项目强烈鼓励您的参与和贡献!我们希望您能成为我们开源社区的长期参与者,但也欢迎您对您特别感兴趣的问题进行一次性贡献。
前往 GitHub