You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Admob User Messaging Platform用户同意个人数据使用

UMP强制用户同意个人数据使用实现方案

状态检测方法

你遇到的无法判断用户同意状态、广告加载报错的问题,都可以通过UMP自带的状态接口解决:

  • 调用ConsentInformation.getInstance(context).canRequestAds()即可直接判断当前用户的同意状态是否满足广告投放要求,返回false就说明用户未同意足够的个人数据使用权限,此时调用广告加载接口就会抛出Ad failed to load, no ad config错误。
  • 配套的状态枚举ConsentInformation.getInstance(context).getConsentStatus()可以辅助判断场景:
    • ConsentStatus.NOT_REQUIRED:用户不在GDPR适用区域,无需同意直接使用应用、加载广告
    • ConsentStatus.REQUIRED:用户属于GDPR覆盖范围且未做出同意选择,必须弹出同意表单
    • ConsentStatus.OBTAINED:用户已经做出选择,此时通过canRequestAds()判断是否满足投放要求

强制同意逻辑实现

按照以下流程实现即可做到用户不同意就无法使用应用:

  1. 应用冷启动时优先初始化UMP,不要先初始化广告SDK
  2. 第一步校验用户同意状态,如果canRequestAds()返回false,直接拦截应用进入主界面的流程,全程只展示同意弹窗,不提供返回、退出弹窗的操作入口
  3. 监听同意弹窗的关闭事件,用户提交选择后立即重新校验canRequestAds()状态:
    • 如果返回true:允许进入应用主界面,再执行广告SDK初始化、广告加载逻辑
    • 如果返回false:立即重新加载并弹出同意表单,循环此流程直到用户同意所有必要的个人数据使用权限
  4. 针对用户点击Manage Options进入设置页提交选择的场景,同样在提交后触发状态校验逻辑,不满足要求就重复弹出同意表单。

代码实现参考

// 同意表单加载方法
private void loadConsentForm() {
    ConsentRequest request = new ConsentRequest.Builder()
            .setTagForUnderAgeOfConsent(false)
            // 测试阶段可以添加测试设备ID,正式上线删除即可
            .addTestDeviceHashedId("你的测试设备ID")
            .build();
    ConsentForm.load(this, request, new ConsentForm.OnConsentFormLoadedListener() {
        @Override
        public void onConsentFormLoaded(ConsentForm consentForm) {
            consentForm.show(MainActivity.this, dismissListener);
        }
        @Override
        public void onConsentFormLoadFailed(ConsentError consentError) {
            // 加载失败重试,避免用户无法操作
            loadConsentForm();
        }
    });
}

// 弹窗关闭监听
private final ConsentForm.OnConsentFormDismissedListener dismissListener = consentError -> {
    ConsentInformation consentInfo = ConsentInformation.getInstance(MainActivity.this);
    if (!consentInfo.canRequestAds()) {
        // 未满足要求重新弹框
        loadConsentForm();
    } else {
        // 满足要求,初始化广告进入应用
        MobileAds.initialize(MainActivity.this, initializationStatus -> {
            loadAd();
        });
        enterMainPage();
    }
};

// 启动时入口逻辑
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ConsentInformation consentInfo = ConsentInformation.getInstance(this);
    if (consentInfo.canRequestAds()) {
        // 已经同意直接进入
        MobileAds.initialize(this, initializationStatus -> loadAd());
        enterMainPage();
    } else {
        // 未同意加载表单
        loadConsentForm();
    }
}

内容的提问来源于stack exchange,提问作者dzboot02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:09:03