如何在同一应用中添加两个不同AdMob应用ID?及横幅广告不显示排查
同一应用接入多AdMob应用ID+横幅广告不显示的解决方案
一、怎么在一个应用里用多个AdMob应用ID
首先得明确个关键点:AdMob的应用ID是和你的应用包名绑定的——每个AdMob账户里,同一个包名会对应一个专属的应用ID。如果你的App要拉取多个AdMob账户的广告,按下面的步骤来就行:
- 先在每个目标AdMob账户里,都注册你的应用包名,拿到对应的应用ID(格式都是
ca-app-pub-xxx~xxx这种)。 - 初始化AdMob SDK的时候,其实全局只需要初始化一次就行,用任意一个账户的应用ID都可以——因为广告单元ID本身已经和所属账户绑定了,只要单元ID有效、包名匹配,就能正常加载。
- 要是你需要更精细的控制(比如给不同账户的广告单独配置参数),可以创建多个
AdRequestConfiguration实例,加载对应广告的时候指定就行:
// 配置第一个账户的应用ID AdRequestConfiguration config1 = new AdRequestConfiguration.Builder() .setApplicationId("ca-app-pub-xxx~xxx") .build(); // 配置第二个账户的应用ID AdRequestConfiguration config2 = new AdRequestConfiguration.Builder() .setApplicationId("ca-app-pub-yyy~yyy") .build(); // 加载第一个账户的广告时用config1 AdRequest adRequest1 = new AdRequest.Builder() .setAdRequestConfiguration(config1) .build(); bannerAdView.loadAd(adRequest1); // 加载第二个账户的广告时用config2 AdRequest adRequest2 = new AdRequest.Builder() .setAdRequestConfiguration(config2) .build(); anotherBannerAdView.loadAd(adRequest2);
二、你的横幅广告看不到的原因&修复方法
看了你的代码,有几个很明显的问题,咱们一个个说:
1. 广告初始化代码根本没执行!
你写了setUpAds()方法,但在onCreate()里完全没调用它啊!代码都没跑,肯定不会加载广告。赶紧在onCreate()里加一行调用:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); // 加上这行,让广告代码跑起来 setUpAds(); }
2. 创建了AdView但没加到布局里
你只是new了一个AdView对象,设置了参数,但没把它添加到Activity的布局容器里!视图没被渲染到界面上,自然看不到。得先在你的activity_home.xml里加个容器(比如LinearLayout),然后把AdView加进去:
先改布局文件activity_home.xml,加个容器:
<LinearLayout android:id="@+id/ad_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"/>
然后修改setUpAds()方法,把AdView添加到容器:
private void setUpAds(){ MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713"); AdView bannerAdView = new AdView(this); // 这里注意!你之前写的BANER_ID_2少了个N,改成BANNER_ID_2 int idSelection = random.nextInt(2); if (idSelection == 0) { adId = BANNER_ID_1; } else { adId = BANNER_ID_2; // 修复拼写错误! } // 加权分布的逻辑如果要用也没问题,记得同样改拼写 // idSelection = random.nextInt(10); // if (idSelection < 8) { // adId = BANNER_ID_1; // } else { // adId = BANNER_ID_2; // } bannerAdView.setAdUnitId(adId); bannerAdView.setAdSize(AdSize.BANNER); // 找到布局里的容器,把AdView加进去 LinearLayout adContainer = findViewById(R.id.ad_container); adContainer.addView(bannerAdView, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT )); AdRequest adRequest6 = new AdRequest.Builder().addTestDevice("E4D1201527AD69E0FD7A0551277A5232").build(); bannerAdView.loadAd(adRequest6); }
3. 变量拼写错误
刚才也提了,你代码里的BANER_ID_2少了个字母N,改成BANNER_ID_2,不然要么编译报错,要么拿到无效的广告单元ID,广告肯定加载失败。
4. 额外建议:加个加载监听排错
可以给AdView加个AdListener,这样能知道广告到底是加载成功还是失败,失败的话还能看具体原因:
bannerAdView.setAdListener(new AdListener() { @Override public void onAdLoaded() { Log.d("AdMob", "横幅广告加载成功啦"); } @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { Log.e("AdMob", "横幅广告加载失败:" + loadAdError.getMessage()); } });
内容的提问来源于stack exchange,提问作者Nikhil Komalan
相关产品推荐
相关产品推荐

