- 概述
- 用法
- 细粒度和全局同意
- 同意配置
- 同意管理
- 阻止行为
- 集成和可用性
- 常见问题
- AMP 在 5 月 25 日会默认更改任何行为吗?
- 如何停止在我所有的 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 会在 POST 请求中发送同意实例 ID、仅供此用途生成的用户 ID 和同意状态。
{ "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 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
元标记。请注意,如果您使用 type
属性进行 CMP 集成,则还必须包含 amp-consent-blocking
元标记。这可确保在接受同意之前,或者如果根据 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 假定发布商对同意阻止行为具有最终控制权。各个组件不能覆盖预定义同意策略带来的阻止行为,但是它们仍然可以在解锁后自定义组件的行为。
自定义同意阻止行为
可选的 policy
属性可以添加到 <amp-consent>
元素的 JSON 配置对象中。它的值是一个自定义同意阻止行为的对象。
<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 | 链接 | 是 |
常见问题
AMP 在 5 月 25 日会默认更改任何行为吗?
否。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
以调用您自己的服务器端端点,以检测用户的同意状态,并协调您希望 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 美国隐私字符串和 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