- 概述
- 使用
- 细粒度和全局同意
- 同意配置
- 同意管理
- 阻止行为
- 集成和可用性
- 常见问题解答
- 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>
的子元素,并具有由 promptUI
引用的 id
。有关用户如何与提示 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
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 故事中显示提示用户界面
<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。
基本阻止行为
在全局同意的情况下,要阻止组件,可以将 data-block-on-consent
属性添加到 AMP 组件,或者添加带有要阻止的扩展列表的 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
可用于在指定时间后通知组件当前的同意状态。
当用作单个值时,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 组件供应商如何解释这些状态取决于他们自己,因此请仔细阅读供应商的文档。
如何停止向来自欧洲经济区的用户显示我的所有内容?
您可以考虑通过实现 <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
以调用您自己的服务器端端点来检测用户的同意状态,并根据 checkConsentHref
的响应来协调您希望 AMP 如何运行。
如何向广告网络/分析提供商发送其他信息?
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”?
每次页面加载时都会调用 checkConsentHref
,然后再向用户显示同意 UI。
amp-geo 可以与 amp-consent 一起使用,使其仅为从特定国家/地区访问我内容的用户显示同意吗?
是的。请参阅此处的示例。
AMP 是否支持 IAB TCF?
AMP 支持流行的透明同意框架,包括 IAB TCF v1、TCF v2、TCF v2.2、IAB 美国隐私字符串和 IAB 全球隐私平台字符串。请咨询您的同意管理平台 (CMP) 和广告网络,了解他们对 AMP 的支持。当 CMP/广告网络接收到框架(IAB TCF v1、TCF v2、TCF v2.2、IAB 美国隐私字符串和 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