如何基于User Messaging Platform SDK判断个性化/非个性化广告展示权限?
基于Google User Messaging Platform (UMP) SDK判断广告展示类型的逻辑
UMP SDK的设计逻辑和旧版Consent SDK不同,不再通过单一枚举值直接区分个性化/非个性化广告,而是需要结合ConsentInformation的多个状态参数和用户的具体同意选项来判断,以下是具体逻辑:
核心判断流程
无需同意(NOT_REQUIRED)
用户所在地区不属于需要广告同意的合规区域(如非EEA/英国地区),可直接加载个性化广告,无需额外判断。未获取同意(REQUIRED/UNKNOWN)
- 若状态为
REQUIRED:必须先展示consent弹窗,获取用户明确同意后再处理广告加载逻辑。 - 若状态为
UNKNOWN:先调用requestConsentInfoUpdate()获取最新的合规状态,再根据返回结果执行后续流程。
- 若状态为
已获取同意(OBTAINED)
此时需要进一步判断用户的具体同意选择:- 先通过
getConsentDecisionStatus()确认用户是否给出了有效同意(CONSENT_GIVEN); - 若用户同意,再检查是否允许个性化广告:对于EEA/英国地区用户,可通过
ConsentDetails中的ad_personalization字段判断;非合规区域用户默认允许个性化。 - 若用户拒绝所有同意请求,只能加载非个性化广告。
- 先通过
代码示例(Java)
ConsentInformation consentInfo = ConsentInformation.getInstance(context); switch (consentInfo.getConsentStatus()) { case ConsentStatus.NOT_REQUIRED: loadPersonalizedAds(); break; case ConsentStatus.REQUIRED: // 展示consent表单,获取用户同意 showConsentForm(); break; case ConsentStatus.OBTAINED: if (consentInfo.getConsentDecisionStatus() == ConsentDecisionStatus.CONSENT_GIVEN) { boolean allowPersonalized = true; // 针对EEA/英国地区用户,检查个性化广告权限 if (consentInfo.isRequestLocationInEeaOrUnknown()) { Map<String, Object> consentDetails = consentInfo.getConsentDetails(); allowPersonalized = Boolean.TRUE.equals(consentDetails.get("ad_personalization")); } if (allowPersonalized) { loadPersonalizedAds(); } else { loadNonPersonalizedAds(); } } else { // 用户拒绝同意,加载非个性化广告 loadNonPersonalizedAds(); } break; case ConsentStatus.UNKNOWN: // 请求更新合规状态 ConsentRequestParameters params = new ConsentRequestParameters.Builder().build(); consentInfo.requestConsentInfoUpdate( context, params, new ConsentInfoUpdateListener() { @Override public void onConsentInfoUpdated(ConsentStatus consentStatus) { // 状态更新后重新执行判断逻辑 } @Override public void onFailedToUpdateConsentInfo(String errorDescription) { // 处理更新失败逻辑,默认加载非个性化广告 loadNonPersonalizedAds(); } } ); break; } // 个性化广告加载逻辑 private void loadPersonalizedAds() { AdRequest adRequest = new AdRequest.Builder().build(); // 加载广告... } // 非个性化广告加载逻辑 private void loadNonPersonalizedAds() { AdRequest adRequest = new AdRequest.Builder() .addNetworkExtrasBundle(AdMobAdapter.class, new Bundle()) .build(); // 加载广告... }
关键说明
- UMP SDK的合规判断会自动识别用户所在地区,无需手动判断;
- 当用户开启"有限广告跟踪"(LAT)时,即使允许个性化,也应加载非个性化广告;
- 若用户撤回同意,需重新触发consent流程,更新状态后再调整广告类型。
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

