开始

Google User Messaging Platform (UMP) SDK 是一款隐私权和消息工具,可帮助您管理隐私选项。如需了解详情,请参阅隐私权和消息简介

创建消息类型

在 AdMob 账号的隐私权和消息标签页下,使用其中一种可用的用户消息类型创建用户消息。UMP SDK 会尝试显示根据项目中设置的 AdMob 应用 ID 创建的用户隐私保护消息。

如需了解详情,请参阅隐私权和消息简介

如需征求用户同意,请完成以下步骤:

  1. 请求获取最新的用户意见征求信息。
  2. 根据需要加载并显示用户意见征求表单。

每次启动应用时,您都应使用 Update() 请求更新用户的意见征求信息。此请求会检查以下内容:

  • 是否需要征得用户同意。例如,首次需要征得用户同意,或者之前的用户意见征求结果已过期。
  • 是否必须提供隐私设置选项入口点。某些隐私权消息要求应用允许用户随时修改其隐私权选项。

根据需要加载和显示隐私权消息表单

收到最新的意见征求状态后,调用 LoadAndShowConsentFormIfRequired() 以加载收集用户意见征求所需的所有表单。加载后,表单会立即显示。

以下代码演示了如何请求用户的最新意见征求信息。如有需要,该代码会加载并显示隐私权消息表单:

void Start()
{
    // Create a ConsentRequestParameters object.
    ConsentRequestParameters request = new ConsentRequestParameters();

    // Check the current consent information status.
    ConsentInformation.Update(request, OnConsentInfoUpdated);
}

void OnConsentInfoUpdated(FormError consentError)
{
    if (consentError != null)
    {
        // Handle the error.
        UnityEngine.Debug.LogError(consentError);
        return;
    }

    // If the error is null, the consent information state was updated.
    // You are now ready to check if a form is available.
    ConsentForm.LoadAndShowConsentFormIfRequired((FormError formError) =>
    {
        if (formError != null)
        {
            // Consent gathering failed.
            UnityEngine.Debug.LogError(consentError);
            return;
        }

        // Consent has been gathered.
    });
}

隐私设置选项

某些隐私权消息表单会通过发布商呈现的隐私权选项入口点显示,以便用户随时管理其隐私权选项。如需详细了解您的用户会在隐私权选项入口点看到哪条消息,请参阅可用的用户消息类型

如需实现隐私权选项入口点,请完成以下步骤:

  1. 调用 Update() 后,请检查 PrivacyOptionsRequirementStatus,以确定是否需要隐私设置选项入口点。
  2. 根据需要,向应用添加可见且可互动的界面元素,以用作隐私选项入口点。如果不需要隐私入口点,请将界面元素配置为不可见且可互动。
  3. 使用 ShowPrivacyOptionsForm() 显示隐私选项表单。

以下代码示例演示了这些步骤:

[SerializeField, Tooltip("Button to show the privacy options form.")]
private Button _privacyButton;

private void Start()
{
  // Enable the privacy settings button.
  if (_privacyButton != null)
  {
      _privacyButton.onClick.AddListener(UpdatePrivacyButton);
      // Disable the privacy settings button by default.
      _privacyButton.interactable = false;
  }
}

/// <summary>
/// Shows the privacy options form to the user.
/// </summary>
public void ShowPrivacyOptionsForm()
{
    Debug.Log("Showing privacy options form.");

    ConsentForm.ShowPrivacyOptionsForm((FormError showError) =>
    {
        if (showError != null)
        {
            Debug.LogError("Error showing privacy options form with error: " + showError.Message);
        }
        // Enable the privacy settings button.
        if (_privacyButton != null)
        {
            _privacyButton.interactable =
                ConsentInformation.PrivacyOptionsRequirementStatus ==
                PrivacyOptionsRequirementStatus.Required;
        }
    });
}

提出广告请求

在您的应用中请求广告之前,请检查您是否已使用 CanRequestAds() 征得用户同意。在征求用户意见时,您可以通过以下两种方式进行检查:

  • 在当前会话中征得用户同意后。
  • 在调用 Update() 后立即调用。可能已在上一次会话中征得用户同意。延迟时间最佳实践:我们建议您不要等待回调完成,以便在应用启动后尽快开始加载广告。

如果在征求用户同意的过程中发生错误,您仍应检查自己是否可以请求展示广告。UMP SDK 会使用上一个会话中的意见征求状态。

void Start()
{
    // Create a ConsentRequestParameters object.
    ConsentRequestParameters request = new ConsentRequestParameters();

    // Check the current consent information status.
    ConsentInformation.Update(request, OnConsentInfoUpdated);
}

void OnConsentInfoUpdated(FormError consentError)
{
    if (consentError != null)
    {
        // Handle the error.
        UnityEngine.Debug.LogError(consentError);
        return;
    }

    // If the error is null, the consent information state was updated.
    // You are now ready to check if a form is available.
    ConsentForm.LoadAndShowConsentFormIfRequired((FormError formError) =>
    {
        if (formError != null)
        {
            // Consent gathering failed.
            UnityEngine.Debug.LogError(consentError);
            return;
        }

        // Consent has been gathered.
        if (ConsentInformation.CanRequestAds())
        {
            MobileAds.Initialize((InitializationStatus initstatus) =>
            {
              // TODO: Request an ad.
            });
        }
    });
    
}

测试

如果您希望在应用开发过程中测试集成,请按照以下步骤以编程方式注册您的测试设备。在发布应用之前,请务必移除用于设置这些测试设备 ID 的代码。

  1. 欢迎致电Update()
  2. 检查日志输出中是否有类似于以下示例的消息,该消息显示了您的设备 ID 以及如何将其添加为测试设备:

    Android

    Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231")
    to set this as a debug device.
    

    iOS

    <UMP SDK>To enable debug mode for this device,
    set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
    
  3. 将测试设备 ID 复制到剪贴板。

  4. 修改代码,以便调用 DebugGeography.TestDeviceHashedIds 并将其传入您的测试设备 ID 列表。

    void Start()
    {
        var debugSettings = new ConsentDebugSettings
        {
            TestDeviceHashedIds =
            new List<string>
            {
                "TEST-DEVICE-HASHED-ID"
            }
        };
    
        // Create a ConsentRequestParameters object.
        ConsentRequestParameters request = new ConsentRequestParameters
        {
            ConsentDebugSettings = debugSettings,
        };
    
        // Check the current consent information status.
        ConsentInformation.Update(request, OnConsentInfoUpdated);
    }
    

强制调试地理位置

UMP SDK 提供了一种方法:使用 DebugGeography 测试您的应用行为,就像设备位于欧洲经济区 (EEA) 或英国境内一样。请注意,调试设置仅适用于测试设备。

void Start()
{
    var debugSettings = new ConsentDebugSettings
    {
        // Geography appears as in EEA for debug devices.
        DebugGeography = DebugGeography.EEA,
        TestDeviceHashedIds = new List<string>
        {
            "TEST-DEVICE-HASHED-ID"
        }
    };

    // Create a ConsentRequestParameters object.
    ConsentRequestParameters request = new ConsentRequestParameters
    {
        ConsentDebugSettings = debugSettings,
    };

    // Check the current consent information status.
    ConsentInformation.Update(request, OnConsentInfoUpdated);
}

通过 UMP SDK 测试应用时,您可能会发现重置 SDK 的状态很实用,因为您可以模拟用户的首次安装体验。该 SDK 提供的 Reset() 方法可实现此目的。

ConsentInformation.Reset();

GitHub 上的示例

如需查看本页介绍的 UMP SDK 集成的完整示例,请参阅 HelloWorld