首页 > 解决方案 > Google AdMob AdView 始终为空白

问题描述

我正在尝试让 AdMob 广告在 Android 应用程序中运行,但无论我尝试什么,AdView 似乎总是空白,无论它是测试广告还是我尝试展示的真实广告,以及它是否显示在虚拟设备或物理设备。

我现在创建了一个空白项目并尝试直接复制Google 教程,但仍然没有成功。我仍在使用教程中的示例 ID,但使用我自己的 ID 时结果仍然相同。

我在项目级别 build.gradle 中添加了以下内容:

allprojects {
repositories {
    google()
    jcenter()
    
    }
}

我的应用程序级别 build.gradle 出现错误,但我几乎找不到有关导致它的原因或如何修复它的信息。关于我发现的唯一信息是一条告诉 Android Studio 停止报告错误的行。我的应用程序级别 build.gradle 中有以下内容:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.google.android.gms:play-services-ads:17.2.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

错误发生在第二个“实施”行,是:

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 28.0.0, 26.1.0. Examples include com.android.support:animated-vector-drawable:28.0.0 and com.android.support:customtabs:26.1.0

除此之外,代码中似乎没有任何其他错误。

我已将 AdView 添加到 activity_main.xml,如下所示:

    <com.google.android.gms.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="1000px"
        android:layout_height="500px"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544~3347511713">
    </com.google.android.gms.ads.AdView>

我也切换到使用 RelativeLayout,因为这是教程中使用的。

然后,我使用以下 Java 来(希望)请求广告。

    package com.jakecharman.myapplication;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import com.google.android.gms.ads.MobileAds;
    import com.google.android.gms.ads.AdRequest;
    import com.google.android.gms.ads.AdView;
    
    public class MainActivity extends AppCompatActivity {
    
        private AdView mAdView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
            MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
            mAdView = findViewById(R.id.adView);
            AdRequest adRequest = new 
            mAdView.loadAd(adRequest);
        }
    }

当我在虚拟设备上运行应用程序时,它按预期运行,但 AdView 不可见。我在日志中发现了一些错误,但我无法在网上找到很多有用的信息:

E/Ads: Google Mobile Ads SDK initialization functionality unavailable for this session. Ad requests can be made at any time.
I/Ads: This request is sent from a test device.

I/Ads: Ad failed to load : 0
W/cr_ChildProcessConn: onServiceDisconnected (crash or killed by oom): pid=15347

我也得到:

W/Ads: Invoke Firebase method getInstance error.
W/Ads: The Google Mobile Ads SDK will not integrate with Firebase. Admob/Firebase integration requires the latest Firebase SDK jar, but Firebase SDK is either missing or out of date

但据我了解,这很好,因为我不想使用 Firebase?

对此的任何帮助将不胜感激,这是我第一次正确尝试为 Android 编写任何东西,这是阻碍我的最后一个问题。

标签: javaandroidadmob

解决方案


build.gradle确保您已在应用级别文件中将 admob gradle 依赖项添加到您的项目中。这可以通过 2 种方式完成,或者直接添加 play-services-ads

implementation 'com.google.firebase:firebase-ads:18.2.0'

或者,如果您已经在使用(或计划使用)firebase ,请添加 firebase-ads library

implementation 'com.google.android.gms:play-services-ads:18.2.0'

play-services-ads使用的好处minSdkVersion是 14,而firebase-ads实现需要minSdkVersion16。

为了解决这些依赖关系,您还需要将google()存储库添加到您的项目级build.gradle文件中。我在您的示例代码中看到了您所做的,所以我不会在这里重复该部分。

从这些库的 17.0.0 版本开始,您需要在AndroidManifest.xml项目文件中添加 Admob ApplicationId。

<application
      ...>
     <!-- meta data -->
     <meta-data
         android:name="com.google.android.gms.ads.APPLICATION_ID"
         android:value="@string/cAppId" /> 
</application>

作为最后一步,使用该Admob.initialize()方法在应用程序启动时的某个地方初始化项目中的 admob。在我看到的你的例子中也是如此。


推荐阅读