请求投放个性化广告时,如何征得用户同意?
过去,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<AdProvider> 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<AdProvider> 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 最新技术资讯~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Serverless架构演进与实践
1.介绍 Serverless并不仅仅是一个概念,很多地方都已经有了它的影子和思想,本文将给大家介绍最近比较火的Serverless。 首先放出官方对Serverless的解释: Serverless的全称是Serverless computing无服务器运算,又被称为函数即服务(Function-as-a-Service,缩写为 FaaS),是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来提供。国内外比较出名的产品有阿里云Function Compute、AWS Lambda、Microsoft Azure Functions 等。 有人说它是云计算的未来,代表了一种技术趋势、理念和发展方向,因为不是官方科普,说说个人的理解。 首先Serverless代表了一种思想或者服务理念,使用者无需再关心除了业务逻辑之外的机器资源容量、配置管理等事项,不需要关注运营维护,是一种去DevOps的理念; 然后他又是一种全新的架构模式,通过一系列技术手段使得各项资源都到最充分的利用;...
- 下一篇
流程引擎的架构设计
1 什么是流程引擎 流程引擎是一个底层支撑平台,是为提供流程处理而开发设计的。流程引擎和流程应用,以及应用程序的关系如下图所示。 常见的支撑场景有:Workflow、BPM、流程编排等。本次分享,主要从BPM流程引擎切入,介绍流程引擎的架构设计方法。 1.1 什么是流程 简单来说,流程就是一系列活动的组合。比如,用于企业办公的OA系统中,就存在大量的申请审批类的流程。在生产制造业,有大量的从销售端的订单,到生产制造,再到签收回款的生产销售流程。在机器学习领域,有亚马逊AWS Sagemaker的大数据处理、机器学习的应用。综上,流程是一个概念,在和具体实现结合时,就产生了不同的流程产品,如DevOps、Spring Data Stream等。 在流程实现方面,主要可以分为2种实现方式,一种是用代码实现,比如:用代码实现一个加班申请,那么就要自己对接SSO进行单点登录,通过接口拿到发起人和审批人的信息,同时保存表单数据。另一种方式是使用流程引擎来实现,流程引擎对接应用场景所需数据,如加班申请,流程引擎对接SSO、OU、审批人配置、权限等,实现这样一个流程,只需要关心流程配置、流程节点和流...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路