You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Google欧盟用户同意政策,DFP mediation自定义同意对话框方法咨询

我来帮你梳理下自定义DFP Mediation同意对话框的完整流程,你已经拿到了关键的adProviders列表,接下来就围绕这个列表做这几步:

自定义欧盟同意对话框的实操步骤

1. 解析AdProvider列表,构建用户可见的UI

每个AdProvider对象里包含了你需要展示给用户的核心信息:

  • getName():广告提供商的名称(比如Google AdMob、Unity Ads等)
  • getPrivacyPolicyUrl():该提供商的隐私政策链接(要给用户跳转查看的入口)
  • getId():提供商的唯一标识ID(后续提交同意状态会用到)

你需要在自定义对话框里清晰展示这些内容,比如:

  • 开头说明:"为了提供广告服务,以下第三方广告商可能会收集你的数据用于个性化广告,你可以选择同意、拒绝或自定义允许的广告商"
  • 列出所有广告商名称,每个名称旁搭配跳转隐私政策的按钮/链接
  • 提供三个选项:同意个性化广告(允许所有广告商收集数据)、仅接受非个性化广告(不收集个性化数据)、自定义选择(让用户勾选具体允许的广告商)

举个简单的代码片段,用来遍历列表构建UI项:

// 遍历获取到的adProviders列表,逐个添加到对话框布局中
for (AdProvider provider : adProviders) {
    String providerName = provider.getName();
    Uri privacyUrl = provider.getPrivacyPolicyUrl();
    
    // 这里可以用TextView+CheckBox组合,或者自定义View来展示每个广告商的信息
    CheckBox providerCheckbox = new CheckBox(context);
    providerCheckbox.setText(providerName);
    // 给Checkbox添加点击跳转隐私政策的逻辑(比如长按或右侧加图标)
    providerCheckbox.setOnLongClickListener(v -> {
        Intent intent = new Intent(Intent.ACTION_VIEW, privacyUrl);
        context.startActivity(intent);
        return true;
    });
    // 将View添加到对话框的LinearLayout或RecyclerView中
    dialogLayout.addView(providerCheckbox);
}

2. 处理用户选择,构建同意状态数据

根据用户的选择,你需要对应生成ConsentStatus和(如果是自定义选择)AdProviderConsent列表:

  • 若用户选同意所有:直接设置ConsentStatus.PERSONALIZED,无需单独处理广告商
  • 若用户选拒绝所有:设置ConsentStatus.NON_PERSONALIZED
  • 若用户选自定义勾选:设置ConsentStatus.PARTIAL,同时创建一个AdProviderConsent列表,把用户勾选的广告商ID和同意状态(PERSONALIZED)添加进去,未勾选的可以设置为NON_PERSONALIZED(根据需求调整)

示例代码处理自定义选择的情况:

List<AdProviderConsent> consentList = new ArrayList<>();
// 假设selectedProviders是用户勾选的AdProvider集合
for (AdProvider provider : selectedProviders) {
    consentList.add(new AdProviderConsent(provider.getId(), ConsentStatus.PERSONALIZED));
}
// 处理未勾选的广告商(可选,若不需要细分也可以跳过)
for (AdProvider provider : unselectedProviders) {
    consentList.add(new AdProviderConsent(provider.getId(), ConsentStatus.NON_PERSONALIZED));
}

3. 将同意状态同步到Google ConsentInformation

用户做出选择后,必须把状态提交给ConsentInformation,这样DFP Mediation才能根据用户的同意状态正确请求广告:

ConsentInformation consentInfo = ConsentInformation.getInstance(context);

// 设置全局同意状态
consentInfo.setConsentStatus(yourSelectedConsentStatus); // 比如PERSONALIZED/NON_PERSONALIZED/PARTIAL

// 如果是PARTIAL状态,还要提交广告商的具体同意列表
if (yourSelectedConsentStatus == ConsentStatus.PARTIAL) {
    consentInfo.setAdProviderConsents(consentList);
}

// 保存同意状态,避免下次启动重复询问
consentInfo.saveConsent(new ConsentInformation.OnConsentSavedListener() {
    @Override
    public void onConsentSaved() {
        // 同意状态保存成功,现在可以正常加载广告了
        loadYourAds();
    }

    @Override
    public void onFailedToSaveConsent(String errorDescription) {
        // 处理保存失败的情况,比如默认设置为NON_PERSONALIZED并加载广告
        consentInfo.setConsentStatus(ConsentStatus.NON_PERSONALIZED);
        loadYourAds();
    }
});

4. 额外注意点

  • 地区判断:每次启动应用时,先调用consentInfo.isRequestLocationInEeaOrUnknown(),只有用户在欧盟地区或未知地区时,才需要展示同意对话框
  • 修改入口:在应用的设置页面要保留修改同意状态的入口,允许用户随时更改选择
  • 测试模式:开发阶段可以用consentInfo.setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA)强制开启欧盟地区模式,方便测试对话框逻辑

内容的提问来源于stack exchange,提问作者Tien Nguyen Huu

火山引擎 最新活动