HUAWEI Ads SDK还提供了一些广告请求相关的高级设置。
HUAWEI Ads SDK提供了通过设置RequestOptions对象,来满足针对不同受众人群请求对应广告内容的能力。该对象应先通过HwAds静态方法获取应用的全局受众人群信息 。如果要更新请求配置,请从现有配置中获取构建器,再进行设置更新。
示例代码如下:
- // 添加面向儿童的设置
- RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setTagForChildProtection(TAG_FOR_CHILD_PROTECTION_TRUE).build();
- HwAds.setRequestOptions(requestOptions);
RequestOptions提供了下面四种方法设置受众人群:
方法 | 描述 |
setTagForChildProtection | 为了满足《儿童在线隐私保护法》(COPPA)的要求,HUAWEI Ads SDK提供了“面向儿童内容的标记”的设置。 参数说明:
|
setTagForUnderAgeOfPromise | 为了满足《一般数据保护条例》 (GDPR)的要求,HUAWEI Ads SDK提供了“未达到法定承诺年龄的用户”的设置。一旦启用此设置,包含标记的广告请求均无法获取到个性化广告。 参数说明:
|
setAdContentClassification | HUAWEI Ads SDK提供了广告内容过滤能力,在请求广告时可以设置广告内容分级的上限。使用此方法获取的广告内容会小于等于设置的分级。 设置的分级必须是下述值之一:
|
setNonPersonalizedAd | HUAWEI Ads SDK支持投放的广告分为个性化广告与非个性化广告两种。通过此方法可以设置请求的广告类型。 参数说明:
|
示例代码如下:
- // 面向儿童的设置,表明您的广告内容需要符合COPPA的规定
- RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setTagForChildProtection(TAG_FOR_CHILD_PROTECTION_TRUE).build();
- HwAds.setRequestOptions(requestOptions);
- // 未达到法定承诺年龄的用户的设置,表明您希望广告请求符合未达到法定承诺年龄用户的广告标准
- RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setTagForUnderAgeOfPromise(PROMISE_TRUE).build();
- HwAds.setRequestOptions(requestOptions);
- // 广告内容过滤,指定返回的广告内容应与分级标签名称对应,但不得高于W
- RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setAdContentClassification(AD_CONTENT_CLASSIFICATION_W).build();
- HwAds.setRequestOptions(requestOptions);
- // 请求个性化广告与非个性化广告
- RequestOptions requestOptions = HwAds.getRequestOptions().toBuilder().setNonPersonalizedAd(ALLOW_ALL).build();
- HwAds.setRequestOptions(requestOptions);
HUAWEI Ads投放的广告包括个性化广告和非个性化广告。为了征求用户意见,HUAWEI Ads提供了Consent SDK。
本章节介绍了如何使用Consent SDK征求用户意见,以及在征得用户意见后如何根据用户意见获取广告。
在项目级build.gradle文件中配置maven仓地址:

- buildscript {
- repositories {
- google()
- jcenter()
- maven { url 'https://developer.huawei.com/repo/' }
- }
- ...
- }
- allprojects {
- repositories {
- google()
- jcenter()
- maven { url 'https://developer.huawei.com/repo/' }
- }
- }
在应用级的build.gradle文件中添加编译依赖:

- dependencies {
- implementation 'com.huawei.hms:ads-consent:3.4.30.301'
- }
保存build.gradle文件,点击“Sync Now”等待同步完成。

使用Consent SDK时,都应确保Consent SDK获得的是HUAWEI Ads广告技术提供商的最新信息。如果在征求用户意见后,广告技术提供商的列表发生改变,则Consent SDK会自动将用户意见置为未知状态。因此在每次启动应用时都必须通过调用requestConsentUpdate()方法确定用户的意见状态。
示例代码如下:
- ...
- import com.huawei.hms.ads.consent.*;
- ...
- public class ConsentActivity extends AppCompatActivity {
- ...
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- ...
- // 检查consent状态
- checkConsentStatus();
- ...
- }
- ...
- private void checkConsentStatus() {
- ...
- Consent consentInfo = Consent.getInstance(this);
- ...
- consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
- @Override
- public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviders) {
- // User's consent status successfully updated.
- }
- @Override
- public void onFail(String errorDescription) {
- // User's consent status failed to update.
- }
- });
- ...
- }
- ...
- }
如果成功更新用户意见信息,那么会通过ConsentUpdateListener的onSuccess()方法提供更新后的用户意见状态参数consentStatus、是否需要Consent参数isNeedConsent和广告技术提供商的adProviders列表。
ConsentStatus具有以下三种状态:
用户意见状态 | 定义 |
ConsentStatus.PERSONALIZED | 用户已同意接收个性化广告与非个性化广告。 |
ConsentStatus.NON_PERSONALIZED | 用户已同意仅接收非个性化广告。 |
ConsentStatus.UNKNOWN | 用户既未同意接收也未拒绝接收个性化广告或非个性化广告。 |
如果回调参数isNeedConsent取值为false,则表明可以向HUAWEI Ads SDK请求个性化广告。
如果回调参数isNeedConsent取值为返回 true,表明该用户在欧洲经济区内或其他敏感地区内,需要进一步确认用户意见:
当返回的ConsentStatus为PERSONALIZED或NON_PERSONALIZED,则表明已征求过用户意见,不需要再次征求。
当返回的ConsentStatus为UNKNOWN,则需要通过弹框等方式征求用户意见。
如果ConsentUpdateListener返回onFail()时,则直接请求非个性化广告。
AdProvider为广告技术提供商信息,参数定义如下:
字段 | 定义 |
id | 广告技术提供商的ID。 |
name | 广告技术提供商的名称。 |
serviceArea | 广告技术提供商的服务地。 |
privacyPolicyUrl | 广告技术提供商的隐私政策链接URL。 |
开发者需要通过弹框等方式向用户征求意见,并展示广告技术提供商的完整列表。
以下是通过弹框征求用户意见的样例:
1. 弹框征求用户意见
示例代码如下:
- ...
- import com.huawei.hms.ads.consent.*;
- ...
- public class ConsentActivity extends AppCompatActivity {
- ...
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- ...
- // 检查consent状态
- checkConsentStatus();
- ...
- }
- ...
- private void checkConsentStatus() {
- ...
- Consent consentInfo = Consent.getInstance(this);
- ...
- consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
- @Override
- public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviders) {
- ...
- // 此返回参数代表是否需要consent
- if (isNeedConsent) {
- // UNKNOWN状态,需要重新收集用户信息
- if (consentStatus == ConsentStatus.UNKNOWN) {
- ...
- showConsentDialog();
- }
- // 如果是PERSONALIZED或者NON_PERSONALIZED状态,则不需要弹框收集用户意见
- else {
- // TODO
- ...
- }
- } else {
- // TODO
- ...
- }
- }
- @Override
- public void onFail(String errorDescription) {
- // TODO
- ...
- }
- });
- ...
- }
- ...
- private void showConsentDialog() {
- // 开始Consent弹出框处理
- ConsentDialog dialog = new ConsentDialog(this, mAdProviders);
- dialog.setCallback(this);
- dialog.setCanceledOnTouchOutside(false);
- dialog.show();
- }
- }
对话框效果图如下:

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

2. 展示广告技术提供商列表
开发者需要将广告技术提供商的名称展示给用户,并提供访问广告技术提供商隐私政策的入口。
通过点击上述更多信息页面中的here链接弹出广告技术提供商列表对话框,效果如下:

3. 设置用户意见
征得用户意见后,请使用setConsentStatus()方法设置用户的选择。
- Consent.getInstance(context).setConsentStatus(ConsentStatus.PERSONALIZED);
4. 未达到法定承诺年龄的用户(可选)
如果开发者需要针对未达到法定承诺年龄的用户请求对应的广告,则在调用requestConsentUpdate()前必须通过调用setUnderAgeOfPromise设置是否“未达到法定承诺年龄用户”的标记。
- // 设置“未达到法定承诺年龄用户”的标记
- Consent.getInstance(context).setUnderAgeOfPromise(true);
一旦将此设置置为true,则每次requestConsentUpdate()请求均会回调onFail(String errorDescription)方法,并提供给用户错误描述参数errorDescription,此时不需要再展示征求用户意见弹框。设置为false表明用户已达到法定承诺年龄。
请求广告时,默认不设置setNonPersonalizedAd方法,请求个性化广告与非个性化广告。如果用户在Consent阶段没有做出选择,则只能请求非个性化广告。
如果设置setNonPersonalizedAd方法且值为:
ALLOW_ALL:个性化广告与非个性化广告
ALLOW_NON_PERSONALIZED:非个性化广告
示例代码如下:
- // setNonPersonalizedAd设置为ALLOW_NON_PERSONALIZED时,只请求非个性化广告
- RequestOptions requestOptions = HwAds.getRequestOptions();
- requestOptions = requestOptions.toBuilder().setNonPersonalizedAd(ALLOW_NON_PERSONALIZED).build();
- HwAds.setRequestOptions(requestOptions);
- AdParam adParam = new AdParam.Builder().build();
- adView.loadAd(adParam);
为了让您能轻松地测试应用,Consent SDK提供了可设置的调试选项。
1. 您需要调用getTestDeviceId()获取设备ID:
- String testDeviceId = Consent.getInstance(context).getTestDeviceId();
2. 使用获取的设备 ID 将您的设备作为调试设备列入允许清单:
- Consent.getInstance(context).addTestDeviceId(testDeviceId);
3. 最后,请调用 setDebugNeedConsent 设置是否需要Consent。
- // 设置调试需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为true
- Consent.getInstance(context).setDebugNeedConsent(DebugNeedConsent.DEBUG_NEED_CONSENT);
- // 设置调试不需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为false
- Consent.getInstance(context).setDebugNeedConsent(DebugNeedConsent.DEBUG_NOT_NEED_CONSENT);
完成这些步骤后,调用更新用户意见状态时会根据您的调试状态返回isNeedConsent的值。