过去,App里各种弹窗和贴片广告不仅令用户心烦,广告主们也头疼。一方面,广撒网的广告成本较高;另一方面,这些广告不能精准触达需要的用户。直到个性化广告的出现,才解决了这一痛点。
如今媒体广告主们为了更精准地投放广告,通常会收集用户个人数据来判断他们的特征定位、兴趣爱好或近期需求等,然后在App里进行定向的广告推送。基于有些用户不愿意共享隐私数据来接收个性化广告,所以App出于实现个性化广告的目的需要收集、使用和共享用户的个人数据,须先获得用户的有效同意。
HUAWEI Ads提供了征求用户意见能力,在一些隐私比较严格的地区,建议发布商通过HUAWEI Ads SDK接入个性化广告服务,将收集和使用用户的个人数据与HUAWEI Ads共享,HUAWEI Ads有权对媒体广告主们的隐私和数据合规性进行监督。默认情况下,向HUAWEI Ads平台发出的广告请求会投放个性化广告,并根据以前收集的用户数据筛选广告。HUAWEI Ads平台也支持通过配置广告请求来投放非个性化广告。详情请参见《HUAWEI Ads隐私与数据安全相关政策》“个性化广告和非个性化广告”。
为了征求用户意见,可以使用HUAWEI Ads平台提供的Consent SDK,也可以使用符合IAB TCF v2.0规范的CMP,详情请参见IAB TCF v2.0用户同意信息传递。
接下来我们就看一下如何使用Consent SDK征求用户意见,以及在征得用户意见后如何根据用户意见获取广告。
开发步骤
在开发前需要集成HMS Core SDK和HUAWEI Ads SDK,具体步骤可参考开发文档。
Consent SDK使用
- 集成Consent SDK。
a. 配置Maven仓地址。
Android Studio的代码库配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle 插件版本,选择对应的配置过程。
b. 在应用级的“build.gradle”文件中添加编译依赖。
将{version}替换为实际的版本号,版本号索引请参见版本更新说明,修改如下:
dependencies {
implementation 'com.huawei.hms:ads-consent:3.4.54.300'
}
c. 在完成以上的配置后,点击工具栏中的gradle同步图标,完成“build.gradle”文件的同步,将相关依赖下载到本地。
- 更新用户意见状态。
使用Consent SDK时,应确保Consent SDK获得的是HUAWEI Ads平台广告技术提供商的最新信息。如果在征求用户意见后,广告技术提供商的列表发生改变,则Consent SDK会自动将用户意见置为未知状态。因此在每次启动应用时都必须通过调用requestConsentUpdate()方法确定用户意见状态。示例代码如下所示:
...
import com.huawei.hms.ads.consent.*;
...
public class ConsentActivity extends BaseActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// 检查用户意见状态
checkConsentStatus();
...
}
...
private void checkConsentStatus() {
...
Consent consentInfo = Consent.getInstance(this);
...
consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
@Override
public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List adProviders) {
// 获取用户意见状态成功
...
}
@Override
public void onFail(String errorDescription) {
// 获取用户意见状态失败
...
}
});
...
}
...
}
如果成功更新用户意见信息,那么会通过ConsentUpdateListener的onSuccess()方法提供更新后的用户意见状态参数ConsentStatus、isNeedConsent参数(是否需要consent)和广告技术提供商的adProviders列表。
- 征求用户意见。
您需要通过弹框等方式向用户征求意见,并展示广告技术提供商的完整列表。以下是通过弹框征求用户意见的样例:
a. 弹框征求用户意见。
示例代码如下所示:
...
import com.huawei.hms.ads.consent.*;
...
public class ConsentActivity extends BaseActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// 检查用户意见状态
checkConsentStatus();
...
}
...
private void checkConsentStatus() {
...
Consent consentInfo = Consent.getInstance(this);
...
consentInfo.requestConsentUpdate(new ConsentUpdateListener() {
@Override
public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List adProviders) {
...
// 此返回参数代表是否需要consent
if (isNeedConsent) {
// UNKNOWN状态,需要重新征求用户意见
if (consentStatus == ConsentStatus.UNKNOWN) {
...
showConsentDialog();
}
// 如果是PERSONALIZED或者NON_PERSONALIZED状态,则不需要弹框征求用户意见
else {
...
}
} else {
...
}
}
@Override
public void onFail(String errorDescription) {
...
}
});
...
}
...
private void showConsentDialog() {
// 开始Consent弹出框处理
ConsentDialog dialog = new ConsentDialog(this, mAdProviders);
dialog.setCallback(this);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
}
对话框效果图如下:
注:该页面仅为简单示例,具体实现需要开发者结合隐私界面自行设计UI。
点击“here”跳转至更多信息:
注:该页面仅为简单示例,具体实现需要开发者结合隐私界面自行设计UI。
b. 展示广告技术提供商列表。
您需要将广告技术提供商的名称展示给用户,并提供访问广告技术提供商隐私政策的入口。
通过点击上述更多信息页面中的here链接弹出广告技术提供商列表对话框,效果如下:
注:该页面仅为简单示例,具体实现需要开发者结合隐私界面自行设计UI。
c. 设置用户意见。
征得用户意见后,请使用setConsentStatus()方法设置用户的选择。示例代码如下所示:
Consent.getInstance(getApplicationContext()).setConsentStatus(ConsentStatus.PERSONALIZED);
d. 设置“未达到法定承诺年龄用户”的标记。
如果您需要针对未达到法定承诺年龄的用户请求对应的广告,则在调用requestConsentUpdate()前必须通过调用setUnderAgeOfPromise设置“未达到法定承诺年龄用户”的标记。示例代码如下所示:
// 设置“未达到法定承诺年龄用户”的标记
Consent.getInstance(getApplicationContext()).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测试
为了让您能轻松地测试应用,Consent SDK提供了可设置的调试选项。
- 调用getTestDeviceId()获取设备ID。
示例代码如下所示:
String testDeviceId = Consent.getInstance(getApplicationContext()).getTestDeviceId();
- 使用获取的设备ID将您的设备作为调试设备列入允许清单。
示例代码如下所示:
Consent.getInstance(getApplicationContext()).addTestDeviceId(testDeviceId);
- 调用setDebugNeedConsent设置是否需要Consent。
示例代码如下所示:
// 设置调试需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为true
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUG_NEED_CONSENT);
// 设置调试不需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为false
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUG_NOT_NEED_CONSENT);
完成这些步骤后,调用更新用户意见状态时会根据您的调试状态返回isNeedConsent的值。
如果您需要了解更多Consent SDK相关信息,请查看此示例代码。
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~