">文档:<amp-consent> - amp.dev - AMP 框架
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 将在每次他们访问您的网页时出现。

例如,如果您想确保用户为 consent 目的做出选择,您已调用 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 为“已接受”或“已拒绝”,则它将使用此值并同步到缓存。

对于 geoGroupUnknown 中的用户,合并的配置为

{
  "onUpdateHref": "https://example.com/update-consent",
  "promptUI": "consent-ui",
  "checkConsentHref": "https://example.com/check-consent",
  "consentRequired": true
}

AMP 将并行检查客户端缓存和服务器以查找之前的同意状态。由于 "consentRequired": true,如果缓存为空,它将通过指定的提示界面收集同意,而无需等待服务器响应。服务器响应主要用于缓存刷新或获取 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 对象,可以包含字符串 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。有关用户操作通信的更多信息,请参阅 此处

故事的提示 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>

提示操作

三个用户操作适用于细粒度同意和全局同意: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 假设发布者对同意阻止行为拥有最终控制权。各个组件无法覆盖预定义同意政策带来的阻止行为,但它们仍然可以在解除阻止后自定义组件行为。

可以向 <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(可选):如果未执行用户操作且未存储任何状态,则在超时时执行的回退操作。支持的回退操作为 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 链接

常见问题解答

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-consent> 组件,该组件允许使用 AcceptRejectDismiss 状态配置自定义 UI。每个 amp-component 供应商如何解释这些状态取决于他们,因此请仔细阅读供应商的文档。

如何停止向 EEA 用户显示所有内容?

您可以考虑通过实施 <amp-geo> 为 EEA 用户隐藏所有内容。有关更多详细信息,请参阅 这篇博文

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

是的。用户界面并非强制性的。如果您最终提供非阻塞版本的 UI,则关闭 UI 将导致 dismiss 状态。由每个供应商(广告和分析)决定如何处理 acceptrejectdismiss

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

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

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

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

什么是 consentRequired

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

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

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

checkConsentHref 上的响应还接受响应中 sharedData 键的值,这些值将提供给被同意逻辑阻止的所有供应商组件。供应商如何处理此 sharedData 由其决定。DoubleClick/AdSense 需要特定的键值,请参阅其 文档 了解详情。

您应该试用 高级同意流程,了解其如何实现。您还可以考虑使用 <amp-selector> 组件。

您可以使用可选的 提示后 UI 来实现此目的。查看 AMP 示例中的此样本,了解类似的实现。

是否可以保持非欧盟体验不变,仅向所有欧盟用户提供“退出”体验?

您可以配置 <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 隐私字符串。请咨询您的同意管理平台 (CMP) 和广告网络以了解它们对 AMP 的支持。当 CMP/广告网络收到 IAB TCF v1、TCF v2、TCF v2.2 和 IAB US 隐私字符串等框架传递的字符串时,AMP 将读取并传递这些字符串。

我在 AMP 中实施了 CMP,但对于 TCF v2,我需要做什么才能支持 TCF v2.2?

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

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

加入我们讨论即将推出的潜在功能的讨论。如果尚未支持某些功能,请在主题中发表意见。

需要更多帮助?

您已经阅读了本文档十几次,但它并没有真正涵盖您的所有问题?也许其他人也有同感:在 Stack Overflow 上联系他们。

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

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

转到 GitHub