目录

HUAWEI Ads SDK还提供了一些广告请求相关的高级设置。

1. 设置受众人群

HUAWEI Ads SDK提供了通过设置RequestOptions对象,来满足针对不同受众人群请求对应广告内容的能力。该对象应先通过HwAds静态方法获取应用的全局受众人群信息 。如果要更新请求配置,请从现有配置中获取构建器,再进行设置更新。

注意:
开发者必须将用户是否是儿童的标识在setTagForChildProtection方法中如实的告知HUAWEI Ads。开发者需要承担由于告知错误或没有告知导致广告误投放到儿童的手机上导致的一切后果。

示例代码如下:

  1. // 添加面向儿童的设置
  2. RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setTagForChildProtection(TAG_FOR_CHILD_PROTECTION_TRUE).build();
  3. HwAds.setRequestOptions(requestOptions);

RequestOptions提供了下面四种方法设置受众人群:

方法

描述

setTagForChildProtection

为了满足《儿童在线隐私保护法》(COPPA)的要求,HUAWEI Ads SDK提供了“面向儿童内容的标记”的设置。

参数说明:

  • TAG_FOR_CHILD_PROTECTION_TRUE:表明您的广告内容需要符合COPPA的规定(该广告请求停用基于兴趣的广告和再营销广告)。

  • TAG_FOR_CHILD_PROTECTION_FALSE:表明您的广告内容不需要符合COPPA的规定。

  • TAG_FOR_CHILD_PROTECTION_UNSPECIFIED:您不希望表明您的广告内容是否需要符合COPPA的规定。

setTagForUnderAgeOfPromise

为了满足《一般数据保护条例》   (GDPR)的要求,HUAWEI Ads SDK提供了“未达到法定承诺年龄的用户”的设置。一旦启用此设置,包含标记的广告请求均无法获取到个性化广告。

参数说明:

  • PROMISE_TRUE:表明您希望广告请求符合未达到法定承诺年龄用户的广告标准。

  • PROMISE_FALSE:表明您不希望广告请求符合未达到法定承诺年龄用户的广告标准。

  • PROMISE_UNSPECIFIED:表示您尚未指定广告请求是否符合未达到法定承诺年龄用户的广告标准。

setAdContentClassification

HUAWEI Ads SDK提供了广告内容过滤能力,在请求广告时可以设置广告内容分级的上限。使用此方法获取的广告内容会小于等于设置的分级。

设置的分级必须是下述值之一:

  • AD_CONTENT_CLASSIFICATION_W:适合幼儿及以上年龄段观众的内容。

  • AD_CONTENT_CLASSIFICATION_PI:适合少儿及以上年龄段观众的内容。

  • AD_CONTENT_CLASSIFICATION_J:适合青少年及以上年龄段观众的内容。

  • AD_CONTENT_CLASSIFICATION_A:仅适合成人观众的内容。

setNonPersonalizedAd

HUAWEI Ads SDK支持投放的广告分为个性化广告与非个性化广告两种。通过此方法可以设置请求的广告类型。

参数说明:

  • ALLOW_ALL:个性化广告与非个性化广告。

  • ALLOW_NON_PERSONALIZED:非个性化广告。

示例代码如下:

  1. // 面向儿童的设置,表明您的广告内容需要符合COPPA的规定
  2. RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setTagForChildProtection(TAG_FOR_CHILD_PROTECTION_TRUE).build();
  3. HwAds.setRequestOptions(requestOptions);
  4. // 未达到法定承诺年龄的用户的设置,表明您希望广告请求符合未达到法定承诺年龄用户的广告标准
  5. RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setTagForUnderAgeOfPromise(PROMISE_TRUE).build();
  6. HwAds.setRequestOptions(requestOptions);
  7. // 广告内容过滤,指定返回的广告内容应与分级标签名称对应,但不得高于W
  8. RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setAdContentClassification(AD_CONTENT_CLASSIFICATION_W).build();
  9. HwAds.setRequestOptions(requestOptions);
  10. // 请求个性化广告与非个性化广告
  11. RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setNonPersonalizedAd(ALLOW_ALL).build();
  12. HwAds.setRequestOptions(requestOptions);

2. 设置意见征求

HUAWEI Ads投放的广告包括个性化广告和非个性化广告。为了征求用户意见,HUAWEI Ads提供了Consent SDK。

本章节介绍了如何使用Consent SDK征求用户意见,以及在征得用户意见后如何根据用户意见获取广告。

2.1 ConsentSDK使用

步骤一:导入Consent SDK

在项目级build.gradle文件中配置maven仓地址:

  1. buildscript {
  2.    repositories {
  3.        google()
  4.        jcenter()
  5.        maven { url 'https://developer.huawei.com/repo/' }
  6.    }
  7.    ...
  8. }
  9. allprojects {
  10.    repositories {
  11.        google()
  12.        jcenter()
  13.        maven { url 'https://developer.huawei.com/repo/' }
  14.    }
  15. }

在应用级的build.gradle文件中添加编译依赖:

  1. dependencies {
  2.    implementation 'com.huawei.hms:ads-consent:3.4.30.301'
  3. }

保存build.gradle文件,点击“Sync Now”等待同步完成。

步骤二:更新用户意见状态

使用Consent SDK时,都应确保Consent SDK获得的是HUAWEI Ads广告技术提供商的最新信息。如果在征求用户意见后,广告技术提供商的列表发生改变,则Consent SDK会自动将用户意见置为未知状态。因此在每次启动应用时都必须通过调用requestConsentUpdate()方法确定用户的意见状态。

示例代码如下:

  1. ...
  2. import com.huawei.hms.ads.consent.*;
  3. ...
  4. public class ConsentActivity extends AppCompatActivity {
  5.    ...
  6.    @Override
  7.    protected void onCreate(Bundle savedInstanceState) {
  8.        ...
  9.        // 检查consent状态
  10.        checkConsentStatus();
  11.        ...
  12.    }
  13.    ...
  14.    private void checkConsentStatus() {
  15.        ...
  16.        Consent consentInfo = Consent.getInstance(this);
  17.        ...
  18.        consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
  19.            @Override
  20.            public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviders) {
  21.                // User's consent status successfully updated.
  22.            }
  23.            @Override
  24.            public void onFail(String errorDescription) {
  25.                // User's consent status failed to update.
  26.            }
  27.        });
  28.       ...
  29.    }
  30.    ...
  31. }

如果成功更新用户意见信息,那么会通过ConsentUpdateListener的onSuccess()方法提供更新后的用户意见状态参数consentStatus、是否需要Consent参数isNeedConsent和广告技术提供商的adProviders列表。

ConsentStatus具有以下三种状态:

用户意见状态

定义

ConsentStatus.PERSONALIZED

用户已同意接收个性化广告与非个性化广告。

ConsentStatus.NON_PERSONALIZED

用户已同意仅接收非个性化广告。

ConsentStatus.UNKNOWN

用户既未同意接收也未拒绝接收个性化广告或非个性化广告。

如果回调参数isNeedConsent取值为false,则表明可以向HUAWEI Ads SDK请求个性化广告。

如果回调参数isNeedConsent取值为返回 true,表明该用户在欧洲经济区内或其他敏感地区内,需要进一步确认用户意见:

如果ConsentUpdateListener返回onFail()时,则直接请求非个性化广告。

AdProvider为广告技术提供商信息,参数定义如下:

字段

定义

id

广告技术提供商的ID。

name

广告技术提供商的名称。

serviceArea

广告技术提供商的服务地。

privacyPolicyUrl

广告技术提供商的隐私政策链接URL。

说明:
requestConsentUpdate()方法每次会请求网络以更新广告技术提供商列表,为了保障用户体验,媒体可以自行实现超时控制。

步骤三:征求用户意见

开发者需要通过弹框等方式向用户征求意见,并展示广告技术提供商的完整列表。

以下是通过弹框征求用户意见的样例:

1. 弹框征求用户意见

示例代码如下:

  1. ...
  2. import com.huawei.hms.ads.consent.*;
  3. ...
  4. public class ConsentActivity extends AppCompatActivity {
  5.    ...
  6.    @Override
  7.    protected void onCreate(Bundle savedInstanceState) {
  8.        ...
  9.        // 检查consent状态
  10.        checkConsentStatus();
  11.        ...
  12.    }
  13.    ...
  14.    private void checkConsentStatus() {
  15.        ...
  16.        Consent consentInfo = Consent.getInstance(this);
  17.        ...
  18.        consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
  19.            @Override
  20.            public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviders) {
  21.                ...
  22.                // 此返回参数代表是否需要consent
  23.                if (isNeedConsent) {
  24.                    // UNKNOWN状态,需要重新收集用户信息
  25.                    if (consentStatus == ConsentStatus.UNKNOWN) {
  26.                    ...
  27.                        showConsentDialog();
  28.                    }
  29.                    // 如果是PERSONALIZED或者NON_PERSONALIZED状态,则不需要弹框收集用户意见
  30.                    else {
  31.                        // TODO
  32.                    ...
  33.                    }
  34.                } else {
  35.                    // TODO
  36.                    ...
  37.                }
  38.            }
  39.            @Override
  40.            public void onFail(String errorDescription) {
  41.                // TODO
  42.               ...
  43.            }
  44.        });
  45.        ...
  46.    }
  47.    ...
  48.    private void showConsentDialog() {
  49.        // 开始Consent弹出框处理
  50.        ConsentDialog dialog = new ConsentDialog(this, mAdProviders);
  51.        dialog.setCallback(this);
  52.        dialog.setCanceledOnTouchOutside(false);
  53.        dialog.show();
  54.    }
  55. }

对话框效果图如下:

点击here后,页面跳转至更多信息页面:

2. 展示广告技术提供商列表

开发者需要将广告技术提供商的名称展示给用户,并提供访问广告技术提供商隐私政策的入口。

通过点击上述更多信息页面中的here链接弹出广告技术提供商列表对话框,效果如下:

3. 设置用户意见

征得用户意见后,请使用setConsentStatus()方法设置用户的选择。

  1. Consent.getInstance(context).setConsentStatus(ConsentStatus.PERSONALIZED);
注意:
请务必让用户可以随时更改或撤消意见,并将用户更新后的意见设置给Consent SDK。

4. 未达到法定承诺年龄的用户(可选)

如果开发者需要针对未达到法定承诺年龄的用户请求对应的广告,则在调用requestConsentUpdate()前必须通过调用setUnderAgeOfPromise设置是否“未达到法定承诺年龄用户”的标记。

  1. // 设置“未达到法定承诺年龄用户”的标记
  2. Consent.getInstance(context).setUnderAgeOfPromise(true);

一旦将此设置置为true,则每次requestConsentUpdate()请求均会回调onFail(String errorDescription)方法,并提供给用户错误描述参数errorDescription,此时不需要再展示征求用户意见弹框。设置为false表明用户已达到法定承诺年龄。

注意:
当Consent SDK设置了此标记后,在请求广告时,设置受众人群章节中setTagForUnderAgeOfPromise的参数应与Consent参数保持一致。

步骤四:根据用户意见获取广告

请求广告时,默认不设置setNonPersonalizedAd方法,请求个性化广告与非个性化广告。如果用户在Consent阶段没有做出选择,则只能请求非个性化广告。

如果设置setNonPersonalizedAd方法且值为:

示例代码如下:

  1. // setNonPersonalizedAd设置为ALLOW_NON_PERSONALIZED时,只请求非个性化广告
  2. RequestOptions requestOptions = HwAds.getRequestOptions();
  3. requestOptions = requestOptions.toBuilder().setNonPersonalizedAd(ALLOW_NON_PERSONALIZED).build();
  4. HwAds.setRequestOptions(requestOptions);
  5. AdParam adParam = new AdParam.Builder().build();
  6. adView.loadAd(adParam);

2.2 ConsentSDK测试

为了让您能轻松地测试应用,Consent SDK提供了可设置的调试选项。

1. 您需要调用getTestDeviceId()获取设备ID:

  1. String testDeviceId = Consent.getInstance(context).getTestDeviceId();

2. 使用获取的设备 ID 将您的设备作为调试设备列入允许清单:

  1. Consent.getInstance(context).addTestDeviceId(testDeviceId);

3. 最后,请调用 setDebugNeedConsent 设置是否需要Consent。

  1. // 设置调试需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为true
  2. Consent.getInstance(context).setDebugNeedConsent(DebugNeedConsent.DEBUG_NEED_CONSENT);
  3. // 设置调试不需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为false
  4. Consent.getInstance(context).setDebugNeedConsent(DebugNeedConsent.DEBUG_NOT_NEED_CONSENT);

完成这些步骤后,调用更新用户意见状态时会根据您的调试状态返回isNeedConsent的值。

注意:
如果把设备设置为测试设备,那么会返回固定的测试广告技术提供商列表,无法验证真实广告技术提供商列表变化的场景。