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

集成Google UMP SDK时遇cannot find symbol variable canRequestAds错误求助

问题

我正尝试为应用集成Google User Messaging Platform(UMP)SDK,以便向欧洲经济区(EEA)和英国用户投放广告。严格遵循官方指南操作,但在代码行consentInformation.canRequestAds处遇到错误提示:"cannot find symbol variable canRequestAds"。相关代码如下:

import com.google.android.gms.ads.MobileAds;
import com.google.android.material.tabs.TabLayout;
import com.google.android.ump.ConsentForm;
import com.google.android.ump.ConsentInformation;
import com.google.android.ump.ConsentRequestParameters;
import com.google.android.ump.UserMessagingPlatform;
import java.util.concurrent.atomic.AtomicBoolean;

public class MainActivity extends AppCompatActivity {
  private ConsentInformation consentInformation;
  // 用原子布尔值确保Google移动广告SDK只初始化并加载广告一次
  private final AtomicBoolean isMobileAdsInitializeCalled = new AtomicBoolean(false);

  @Override
  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 设置未成年人同意标签,false表示用户不属于未成年人
ConsentRequestParameters params = new ConsentRequestParameters
    .Builder()
    .setTagForUnderAgeOfConsent(false)
    .build();

consentInformation = UserMessagingPlatform.getConsentInformation(this);
consentInformation.requestConsentInfoUpdate(
    this,
    params,
    (OnConsentInfoUpdateSuccessListener) () -> {
      UserMessagingPlatform.loadAndShowConsentFormIfRequired(
        this,
        (OnConsentFormDismissedListener) loadAndShowError -> {
          if (loadAndShowError != null) {
            // 同意信息收集失败
            Log.w(TAG, String.format("%s: %s",
                loadAndShowError.getErrorCode(),
                loadAndShowError.getMessage()));
          }

          // 已完成同意信息收集
          if (consentInformation.canRequestAds) {
            initializeMobileAdsSdk();
          }
        }
      )
    },
    (OnConsentInfoUpdateFailureListener) requestConsentError -> {
      // 同意信息收集失败
      Log.w(TAG, String.format("%s: %s",
          requestConsentError.getErrorCode(),
          requestConsentError.getMessage()));
    });

// 检查是否可以在检查新同意信息的同时并行初始化Google移动广告SDK,上一次会话获取的同意可用于请求广告
if (consentInformation.canRequestAds) {
  initializeMobileAdsSdk();
}
  }

  private void initializeMobileAdsSdk() {
if (isMobileAdsInitializeCalled.getAndSet(true)) {
  return;
}

// 初始化Google移动广告SDK
MobileAds.initialize(this);

// TODO: 请求广告
// InterstitialAd.load(...);
  }
}
解决方案
  • 错误原因:UMP SDK版本更新后,canRequestAds不再是ConsentInformation的成员变量,而是需要通过方法调用获取,原代码中缺少方法调用的括号。
  • 修复方法:将所有consentInformation.canRequestAds替换为consentInformation.canRequestAds()。

修复后的关键代码片段:

// 已完成同意信息收集
if (consentInformation.canRequestAds()) {
  initializeMobileAdsSdk();
}

// ...

// 检查是否可以在检查新同意信息的同时并行初始化Google移动广告SDK
if (consentInformation.canRequestAds()) {
  initializeMobileAdsSdk();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:53:17