AMP

重要提示:此文档不适用于您当前选择的格式广告

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>

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-analyticspurpose-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> 的子元素,其 idpromptUI 引用。有关用户如何与提示 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
    }
  }
}

对于 geoGroup1geoGroup2geoGroupUknown 之外的用户,合并后的配置是

{
  "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: trueconsentStateValue: 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 对象,可以包含 consentPromptCaptionbuttonActionCaption 字符串。这些字段的默认值分别为“用户同意提示”和“焦点提示”,但可以根据您的用例(例如本地化)进行覆盖和自定义。当加载 iframe 中的同意提示时,屏幕阅读器将读取 consentPromptCaption,然后读取 buttonActionCaptionconsentPromptCaption 应该充当同意提示的标题,而 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。有关用户操作通信的更多信息,请参见此处

Stories 的提示 UI

amp-story 扩展提供了一个默认提示 UI,它需要使用 <amp-story-consent> 组件作为提示 UI。此组件内容需要 titlemessagevendors 列表,并且必须在其自己的组件配置中指定。可以通过添加可选的 onlyAccept 布尔参数来隐藏拒绝按钮。此外,可以通过在同意配置中添加 "externalLink": {"title": "Privacy Settings", "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>

提示操作

三个用户操作适用于粒度同意和全局同意:acceptrejectdismiss

要允许用户选择同意状态并隐藏提示 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)

接受全局同意的 acceptreject 操作也会保存粒度同意选择。如果您向其中任何一个传递参数 (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: trueconsentRequired: false 删除存储的值。
  • 如果使用 promptUI 收集用户同意。使用 expireCache: true 将提示同意对话框,并在用户下次访问时阻止用户访问内容。

<amp-consent> 将同意选择存储在名为 amp-store:{xxx} 的键中,其中 {xxx} 是您的域名。该值是 base64 编码的 JSON。

基本阻止行为

在全局同意中,要阻止组件,可以将 data-block-on-consent 属性添加到 AMP 组件,或者添加带有要阻止的扩展列表的 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 组件,直到用户接受名为 performancemarketing 的目的。

<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(可选):如果在超时时没有用户操作并且没有存储状态,则在超时时的回退操作。支持的回退操作为 rejectdismiss。如果未配置,则默认操作为 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-consent> 组件,该组件允许使用 AcceptRejectDismiss 状态配置自定义 UI。每个 amp 组件供应商如何解释这些状态取决于他们,因此请仔细阅读您供应商的文档。

如何停止向来自欧洲经济区的用户显示我的所有内容?

您可以考虑通过实施 <amp-geo> 来隐藏 EEA 用户的所有内容。有关更多详细信息,请参见此博客文章

使用 <amp-geo> 配置国家/地区组,并将该国家/地区组连接到 <amp-consent> 中的 geoOverride 属性。如果用户从列表中配置的国家/地区访问 AMP 页面,则会调用适当的同意 UI。

是。UI 不是规定性的。如果您最终提供了非阻止版本的 UI,则关闭 UI 将导致 dismiss 状态。每个供应商(广告和分析)将如何处理 acceptrejectdismiss 取决于他们。

什么是 checkConsentHref?它是强制性的吗?

请注意,如果您完全在客户端收集和存储同意,则 checkConsentHref 不是强制性的。

checkConsentHref 使您(发布商)能够知道是否必须向用户显示同意。例如,通过使用此调用,您可以在服务器端确定用户的地理位置,从而使您可以禁止同意。您也可以使用 <amp-geo>geoOverride 来实现相同的结果,而无需任何服务器端设置。

如果您检测到用户不需要同意,因为他们在其他属性上或出于其他原因接受了同意,则您也可以选择禁止同意。

什么是 consentRequired

consentRequired 用于确定用户是否需要同意。它可以在 <amp-consent> 的配置中为不同的地理区域指定,也可以从 checkConsentHref 端点检索。

您可以配置 checkConsentHref 以调用您自己的服务器端端点来检测用户的同意状态,并使用来自 checkConsentHref 的响应来协调您希望 AMP 如何运行。

如何向广告网络/分析提供商发送其他信息?

checkConsentHref 上的响应还接受响应中键 sharedData 的值,这些值将可用于所有被同意逻辑阻止的供应商组件。供应商如何处理此 sharedData 取决于他们。DoubleClick/AdSense 需要特定的键值,请参阅他们的文档了解详细信息。

您应该尝试一下高级同意流程,以了解它是如何实施的。您也可以考虑使用 <amp-selector> 组件。

您可以使用可选的 提示后 UI 来完成此操作。查看 AMP By Example 上的示例以获取类似的实现。

我可以保持非欧盟体验不变,而只向所有欧盟用户提供“退出”体验吗?

您可以配置 <amp-consent><amp-geo>,以向特定国家/地区(例如,通过您配置的 EEA 国家/地区列表)的用户显示同意。如果发布商希望,也可以将 <amp-consent> 组件配置为代表用户自动“拒绝”同意。执行此操作的方法是将 timeout 秒设置为 0,并将 fallbackAction 设置为 reject。请注意,fallbackAction 状态不会跨会话存储。另请注意,每个广告网络都将具有其自己的实现方式,以解释来自用户的“拒绝”操作。没有办法代表用户自动“接受”同意。

您可以了解更多关于 Google AdSense 和 DoubleClick 计划如何处理“拒绝”以及用于投放非个性化广告的任何可用配置。

如果先前没有同意状态,则可以使用 checkConsentHref 的响应向用户显示同意,从而允许用户完成同意流程。有关如何默认拒绝同意的详细信息,请参见上面的选择退出问题。默认情况下无法“接受”同意。

是在每次页面浏览期间还是在每次用户操作期间调用“checkConsentHref”?

在向用户显示同意 UI 之前,将在每个页面视图上调用 checkConsentHref

是。请参阅此处的示例。

AMP 支持 IAB TCF 吗?

AMP 支持流行的透明度同意框架,包括 IAB TCF v1、TCF v2、TCF v2.2、IAB US Privacy String 和 IAB Global Privacy Platform String。请与您的同意管理平台 (CMP) 和广告网络联系,了解它们对 AMP 的支持。当 CMP/广告网络收到框架(IAB TCF v1、TCF v2、TCF v2.2、IAB US Privacy String 和 IAB Global Privacy Platform String)时,AMP 将读取并传递框架传递的字符串。

我有一个使用 AMP 实现的 CMP,但是对于 TCF v2,我需要做什么来支持 TCF v2.2?

对于 AMP 集成,您唯一需要做的是在客户端 postMessage 期间提供 tcfPolicyVersion 的值,如果您还使用 checkConsentHref,则需要在响应中提供它,并且您还可以通过服务器响应中的 tcfPolicyVersion 字段直接从响应更新它,这将允许您在交易到 TCF v2.2 之前未添加 tcfPolicyVersion 字段的情况下更新同意。

我看不到支持 X 功能,我该怎么办?

加入我们的讨论,我们正在讨论即将推出的潜在功能。如果尚未支持某些功能,请在帖子中评论。

需要更多帮助?

您已经阅读此文档很多遍了,但它并没有真正涵盖您的所有问题?也许其他人也有同样的感觉:在 Stack Overflow 上联系他们。

转到 Stack Overflow
发现错误或缺少功能?

AMP 项目强烈鼓励您的参与和贡献!我们希望您成为我们开源社区的持续参与者,但也欢迎您针对您特别关注的问题做出一次性贡献。

转到 GitHub