征求欧洲用户的同意

前提条件

完成使用入门中的 1.3.0 版 GMA Flutter 插件(支持 User Messaging Platform SDK)。

不妨参阅 IAB 要求对欧盟地区用户意见征求消息的影响

简介

UMP SDK 提供了一些工具,供发布商针对个性化广告征求用户意见,以及处理 Apple 的应用跟踪透明度 (ATT) 要求。发布商可以通过显示单一表单来使用 UMP SDK 处理其中一个或两个请求,因为所有配置都在 AdMob 的“隐私权和消息”中进行。

根据 Google 欧盟地区用户意见征求政策,您必须向位于欧洲经济区 (EEA) 以及英国境内的用户披露相关信息;在法律要求的情况下,必须征得他们的同意才能使用 Cookie 或其他本地存储方式;此外,您必须同意使用个人数据(例如 AdID)来投放广告。此政策反映了欧盟《电子隐私指令》和《一般数据保护条例》(GDPR) 的要求。

为了帮助发布商履行此政策规定的职责,Google 提供了 User Messaging Platform (UMP) SDK。UMP SDK 已更新,可支持最新的 IAB 标准。此外,我们还简化了设置用户意见征求表单和列出广告合作伙伴的流程。现在,所有这些配置都可以在 AdMob 的“隐私权和消息”中轻松处理。

本指南逐步介绍了如何安装 SDK、实现 IAB 解决方案以及启用测试功能。

应用跟踪透明度(仅限 iOS)

如果您打算使用 UMP SDK 来满足 Apple 的应用跟踪透明度要求,请确保您已通过 AdMob 的“隐私权和消息”创建、配置并发布了 ATT 消息。

为了让 UMP SDK 显示自定义提醒消息,请更新 Info.plist 以添加 NSUserTrackingUsageDescription 键,并采用自定义消息字符串来描述您的使用情况。

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

显示用户意见征求表单时,该使用情况说明会作为 ATT 对话框的一部分显示:

接下来,您需要关联 AppTrackingTransparency 框架:

测试时请注意,根据 Apple 的要求,IDFA ATT 对话框仅会显示一次,因为 requestTrackingAuthorization: 是一次性请求。如需使提醒再次显示,您必须在测试设备上卸载您的应用,然后再重新安装。

使用 SDK

该 SDK 以线性方式使用。使用 SDK 的步骤如下:

  1. 请求最新的用户意见征求信息。
  2. 检查是否需要征得用户同意。
  3. 检查表单是否可用,如果可用,请加载表单。
  4. 显示表单。
  5. 为用户提供更改其同意情况的方式。

我们建议您在每次应用启动时请求更新用户意见征求信息。这将决定您的用户是否需要提供同意声明。

final params = ConsentRequestParameters();
ConsentInformation.instance.requestConsentInfoUpdate(
  params,
  () async {
    // The consent information state was updated.
    // You are now ready to check if a form is available.
  },
  (FormError error) {
    // Handle the error
  },
);

加载表单(如果可用)

用于征求用户意见的表单是在界面中创建的。 AdMob确定需要征求用户意见后,下一步就是确定表单是否可用。有多种原因可能会导致表单无法使用,例如:

  • 用户已启用限制广告跟踪。
  • 您标记了用户未达到同意年龄。

如需检查表单是否可用,请在 ConsentInformation 实例上使用 isConsentFormAvailable() 方法。添加用于加载表单的封装容器方法:

final params = ConsentRequestParameters();
ConsentInformation.instance.requestConsentInfoUpdate(
  params,
  () async {
    if (await ConsentInformation.instance.isConsentFormAvailable()) {
      loadForm();
    }
  },
  (FormError error) {
    // Handle the error
  },
);

如需加载表单,您需要对 ConsentForm 类使用静态 loadConsentForm() 方法。按如下方式更改 loadForm() 方法:

void loadForm() {
  ConsentForm.loadConsentForm(
    (ConsentForm consentForm) async {
      // Present the form
    },
    (FormError formError) {
      // Handle the error
    },
  );
}

根据需要显示表单

如需显示用户意见征求表单,请对 ConsentForm 类使用 show() 方法。在显示表单之前,您必须确定用户是否需要征得用户同意。 如需检查是否需要征得用户同意,请对 ConsentInformation 对象调用 getConsentStatus(),这将返回一个 ConsentStatus 类型的枚举。ConsentStatus 有四个可能的值:

  • unknown:用户意见征求状态未知。
  • required:需要征得用户同意,但尚未征得用户同意。
  • notRequired:无需征得用户同意。例如,用户不在欧洲经济区 (EEA) 或英国。
  • obtained:已征得用户同意。未定义个性化设置。

按如下方式更改 loadForm 方法:

void loadForm() {
  ConsentForm.loadConsentForm(
    (ConsentForm consentForm) async {
      var status = await ConsentInformation.instance.getConsentStatus();
      if (status == ConsentStatus.required) {
        consentForm.show(
          (FormError formError) {
            // Handle dismissal by reloading form
            loadForm();
          },
        );
      }
    },
    (formError) {
      // Handle the error
    },
  );
}

如果不需要征得用户同意,您可以保留对表单的引用,以便用户更改其同意情况。

测试

强制设置地理位置

UMP SDK 提供了一种方法来使用 ConsentDebugSettings.debugGeography 测试应用行为,就像设备位于 EEA 内一样。

您需要在应用的调试设置中提供经过哈希处理的测试设备 ID 才能使用调试功能。如果您在未设置此值的情况下调用 requestConsentInfoUpdate(),您的应用将在运行时记录必需的 ID 哈希值。

ConsentDebugSettings debugSettings = ConsentDebugSettings(
  debugGeography: DebugGeography.debugGeographyEea,
  testIdentifiers: ['TEST-DEVICE-HASHED-ID']);

ConsentRequestParameters params = ConsentRequestParameters(
  consentDebugSettings: debugSettings);

ConsentInformation.instance.requestConsentInfoUpdate(
  params,
  () {},
  (error) {});

如需强制 SDK 将设备视为不在欧洲经济区 (EEA) 或英国,请使用 DebugGeography.debugGeographyNotEea。请注意,调试设置仅适用于测试设备。无需将模拟器添加到设备 ID 列表中,因为它们已默认启用测试。

通过 UMP SDK 测试应用时,您可能会发现重置 SDK 的状态非常有用,因为您可以模拟用户的首次安装体验。为此,SDK 提供了 reset 方法。

ConsentInformation.instance.reset();

如果您决定从项目中完全移除 UMP SDK,也应调用重置操作。

延迟应用衡量(可选)

默认情况下,Google 移动广告 SDK 会在应用启动时立即初始化应用衡量功能,并开始向 Google 发送用户级事件数据。这种初始化行为可确保您无需对代码进行额外的更改,即可启用 AdMob 用户指标。

但是,如果您的应用需要在征得用户同意后才能发送这些事件,则可以延迟应用衡量,直到明确初始化移动广告 SDK 或加载广告为止。

要延迟 Android 应用衡量,请在 AndroidManifest.xml 中添加以下 <meta-data> 标记。

<manifest>
     <application>
        <!-- Delay app measurement until MobileAds.initialize() is called. -->
        <meta-data
            android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
            android:value="true"/>
    </application>
</manifest>

如需在 iOS 上延迟进行应用衡量,请将布尔值为 YESGADDelayAppMeasurementInit 键添加到应用的 Info.plist。您可以通过编程方式进行此项更改:

<key>GADDelayAppMeasurementInit</key>
<true/>

或者,在属性列表编辑器中进行修改:

中介

如果您使用中介,则需要根据您选择在应用中使用的用户意见征求框架,以不同的方式处理中介合作伙伴的用户意见征求。Google 支持 IAB 用户意见征求框架,但也允许您提供自己的自定义用户意见征求解决方案。下面详细介绍了如何在每个选项下处理中介。 详细了解我们的用户意见征求解决方案

AdMob

UMP SDK 和移动广告 SDK 都不会向中介合作伙伴转发用户意见信息。相反,在使用 IAB 解决方案时,UMP SDK 会将用户意见征求状态信息写入本地存储空间,并由每个中介合作伙伴的 SDK 读取相应的键。请务必与每个第三方广告联盟联系,以确定他们是否支持 IAB 解决方案。

如果使用自定义用户意见征求解决方案,您有责任将应用的用户意见征求状态告知第三方 SDK。每个中介广告联盟都有自己的 API 来处理用户意见征求,这些 API 针对 AndroidiOS 进行了介绍。

如需了解如何从 Dart 调用这些 API,请参阅使用网络专用 API

Google 移动广告 SDK 的默认行为是投放个性化广告。如果用户仅同意接收非个性化广告,您可以使用以下代码配置 AdRequest 对象,以指定只应请求非个性化广告:

final AdRequest = AdRequest(nonPersonalizedAds: true);

Google 的《欧盟地区用户意见征求政策》规定,在您针对发布商 ID 配置的所有 广告技术提供商 之前,您也需要先征得用户同意,然后才能展示个性化广告。即使您使用第三方中介解决方案向 Google 发送广告请求,也是如此。