HUAWEI Ads的用户意见征求,华为ads需要打开吗HUAWEI Ads的用户意见征求在法律有相应要求的情况下,您必须征得用户的同意才能使用其个人数据(例如OAID)来投放广告。HUAWEI Ads平台投放的广告包括个性化广告和非个性化广告。为了征求用户意见,HUAWEI Ads平台提供了Consent SDK。本......
在法律有相应要求的情况下,您必须征得用户的同意才能使用其个人数据(例如OAID)来投放广告。
HUAWEI Ads平台投放的广告包括个性化广告和非个性化广告。为了征求用户意见,HUAWEI Ads平台提供了Consent SDK。
本章节介绍了如何使用Consent SDK征求用户意见,以及在征得用户意见后如何根据用户意见获取广告。
Consent SDK使用
1.集成Consent SDK。
a.在项目级build.gradle文件中配置Maven仓地址:
buildscript {
repositories {
google()
jcenter()
//配置Consent SDK的Maven仓地址
maven { url https://developer.huawei.com/repo/ }
}
...
}
allprojects {
repositories {
google()
jcenter()
//配置Consent SDK的Maven仓地址
maven { url https://developer.huawei.com/repo/ }
}
}
b.在应用级的build.gradle文件中添加编译依赖:
c.将{version}替换为实际的版本号,版本号索引请参见版本更新说明,修改如下:
dependencies {
implementation com.huawei.hms:adsconsent:3.4.39.302
}
在完成以上的配置后,点击工具栏中的gradle同步图标,完成“build.gradle”文件的同步,将相关依赖下载到本地。
2.更新用户意见状态。
使用Consent SDK时,应确保Consent SDK获得的是HUAWEI Ads平台广告技术提供商的最新信息。如果在征求用户意见后,广告技术提供商的列表发生改变,则Consent SDK会自动将用户意见置为未知状态。因此在每次启动应用时都必须通过调用requestConsentUpdate()方法确定用户的意见状态。
示例代码如下所示:
Java
...
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, ListAdProvider adProviders) {
// 获取用户意见状态成功
...
}
@Override
public void onFail(String errorDescription) {
// 获取用户意见状态失败
...
}
});
...
}
...
}
Kotlin
...
import com.huawei.hms.ads.consent.*
...
class ConsentActivity : BaseActivity() {
...
override fun onCreate(savedInstanceState: Bundle ) {
...
// 检查consent状态
checkConsentStatus()
...
}
...
private fun checkConsentStatus() {
...
val consentInfo = Consent.getInstance(this)
...
consentInfo.requestConsentUpdate(object : ConsentUpdateListener {
override fun onSuccess(consentStatus: ConsentStatus, isNeedConsent: Boolean, adProviders: ListAdProvider) {
// 获取用户意见状态成功
...
}
override fun onFail(errorDescription: String) {
// 获取用户意见状态失败
...
}
})
...
}
...
}
如果成功更新用户意见信息,那么会通过ConsentUpdateListener的onSuccess()方法提供更新后的用户意见状态参数consentStatus、是否需要Consent参数isNeedConsent和广告技术提供商的adProviders列表。
ConsentStatus具有以下三种状态:
·如果回调参数isNeedConsent取值为false,则表明可以向HUAWEI Ads SDK请求个性化广告。
·如果回调参数isNeedConsent取值为true,则表明该用户在欧洲经济区内或其他敏感地区内,需要进一步确认用户意见。
·当返回的ConsentStatus为PERSONALIZED或NONPERSONALIZED,则表明已征求过用户意见,不需要再次征求。
·当返回的ConsentStatus为UNKNOWN,则需要通过弹框等方式征求用户意见。
如果ConsentUpdateListener返回onFail()时,则直接请求非个性化广告。
AdProvider为广告技术提供商信息,参数定义如下:
说明
requestConsentUpdate()方法每次会请求网络以更新广告技术提供商列表,为了保障用户体验,媒体可以自行实现超时控制。
3.征求用户意见。
您需要通过弹框等方式向用户征求意见,并展示广告技术提供商的完整列表。以下是通过弹框征求用户意见的样例:
a.弹框征求用户意见。
示例代码如下所示:
Java
...
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, ListAdProvider adProviders) {
...
// 此返回参数代表是否需要consent
if (isNeedConsent) {
// UNKNOWN状态,需要重新收集用户信息
if (consentStatus == ConsentStatus.UNKNOWN) {
...
showConsentDialog();
}
// 如果是PERSONALIZED或者NONPERSONALIZED状态,则不需要弹框收集用户意见
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();
}
}
Kotlin
...
import com.huawei.hms.ads.consent.*
...
class ConsentActivity : BaseActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
// 检查consent状态
checkConsentStatus()
...
}
...
private fun checkConsentStatus() {
...
val consentInfo = Consent.getInstance(this)
...
consentInfo.requestConsentUpdate(object : ConsentUpdateListener {
override fun onSuccess(consentStatus: ConsentStatus, isNeedConsent: Boolean, adProviders: ListAdProvider) {
...
// 此返回参数代表是否需要consent
if (isNeedConsent) {
// UNKNOWN状态,需要重新收集用户信息
if (consentStatus == ConsentStatus.UNKNOWN) {
...
showConsentDialog()
}
// 如果是PERSONALIZED或者NONPERSONALIZED状态,则不需要弹框收集用户意见
else {
...
}
} else {
...
}
}
override fun onFail(errorDescription: String) {
// 获取用户意见状态失败
...
}
})
...
}
...
private fun showConsentDialog() {
// 开始Consent弹出框处理
val dialog = ConsentDialog(this, mAdProviders)
dialog.setCallback(this)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
}
}
对话框效果图如下:
点击“here”跳转至更多信息:
b.展示广告技术提供商列表。
您需要将广告技术提供商的名称展示给用户,并提供访问广告技术提供商隐私政策的入口。
通过点击上述更多信息页面中的here链接弹出广告技术提供商列表对话框,效果如下:
c.设置用户意见。
征得用户意见后,请使用setConsentStatus()方法设置用户的选择。
示例代码如下所示:
Java
Consent.getInstance(getApplicationContext()).setConsentStatus(ConsentStatus.PERSONALIZED);
Kotlin
Consent.getInstance(getApplicationContext()).setConsentStatus(ConsentStatus.PERSONALIZED)
说明
请务必让用户可以随时更改或撤消意见,并将用户更新后的意见设置给Consent SDK。
d.设置“未达到法定承诺年龄用户”的标记。
如果您需要针对未达到法定承诺年龄的用户请求对应的广告,则在调用requestConsentUpdate()前必须通过调用setUnderAgeOfPromise设置“未达到法定承诺年龄用户”的标记。
示例代码如下所示:
Java
//设置“未达到法定承诺年龄用户”的标记
Consent.getInstance(getApplicationContext()).setUnderAgeOfPromise(true);
Kotlin
//设置“未达到法定承诺年龄用户”的标记
Consent.getInstance(getApplicationContext()).setUnderAgeOfPromise(true)
一旦将此设置为true,则每次requestConsentUpdate()请求均会回调onFail(String errorDescription)方法,并提供给用户错误描述参数errorDescription,此时不需要再展示征求用户意见弹框。设置为false表明用户已达到法定承诺年龄。
说明
当Consent SDK设置了此标记后,在请求广告时,基于受众人群请求广告中setTagForUnderAgeOfPromise的参数应与Consent参数保持一致。
4.根据用户意见获取广告。
请求广告时,默认不设置setNonPersonalizedAd方法,请求个性化广告与非个性化广告。如果用户在Consent阶段没有做出选择,则只能请求非个性化广告。
如果设置setNonPersonalizedAd方法且值为:
·ALLOWALL:个性化广告与非个性化广告
·ALLOWNONPERSONALIZED:非个性化广告
示例代码如下所示:
Java
//setNonPersonalizedAd设置为ALLOWNONPERSONALIZED时,只请求非个性化广告
RequestOptions requestOptions=HwAds.getRequestOptions();
requestOptions=requestOptions.toBuilder().setNonPersonalizedAd(ALLOWNONPERSONALIZED).build();
HwAds.setRequestOptions(requestOptions);
AdParam adParam=new AdParam.Builder().build();
adView.loadAd(adParam);
Kotlin
//setNonPersonalizedAd设置为ALLOWNONPERSONALIZED时,只请求非个性化广告
var requestOptions:RequestOptions?=HwAds.getRequestOptions()
requestOptions=requestOptions.toBuilder().setNonPersonalizedAd(ALLOWNONPERSONALIZED).build()
HwAds.setRequestOptions(requestOptions)
val adParam=AdParam.Builder().build()
adView!!.loadAd(adParam)
Consent SDK测试
为了让您能轻松地测试应用,Consent SDK提供了可设置的调试选项。
1.调用getTestDeviceId()获取设备ID。
示例代码如下所示:
Java
String testDeviceId=Consent.getInstance(getApplicationContext()).getTestDeviceId();
Kotlin
val testDeviceId = Consent.getInstance(getApplicationContext()).testDeviceId
2.使用获取的设备ID将您的设备作为调试设备列入允许清单。
示例代码如下所示:
Java
Consent.getInstance(getApplicationContext()).addTestDeviceId(testDeviceId);
Kotlin
Consent.getInstance(getApplicationContext()).addTestDeviceId(testDeviceId)
调用setDebugNeedConsent设置是否需要Consent。
示例代码如下所示:
Java
//设置调试需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为true
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUGNEEDCONSENT);
//设置调试不需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为false
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUGNOTNEEDCONSENT);
Kotlin
// 设置调试需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为true
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUGNEEDCONSENT)
// 设置调试不需要Consent,此时ConsentUpdateListener方法返回的isNeedConsent参数为false
Consent.getInstance(getApplicationContext()).setDebugNeedConsent(DebugNeedConsent.DEBUGNOTNEEDCONSENT)
完成这些步骤后,调用更新用户意见状态时会根据您的调试状态返回isNeedConsent的值。
说明
如果把设备设置为测试设备,那么会返回固定的测试广告技术提供商列表,无法验证真实广告技术提供商列表变化的场景。
特别声明:以上文章内容仅代表作者本人观点,不代表ESG跨境电商观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与ESG跨境电商联系。
二维码加载中...
使用微信扫一扫登录
使用账号密码登录
平台顾问
微信扫一扫
马上联系在线顾问
小程序
ESG跨境小程序
手机入驻更便捷
返回顶部