无法获得提供商com.google.android.gms.ads.MobileAdsInitProvider:java.lang.IllegalStateException:为什么?

时间:2018-10-12 21:02:34

标签: android kotlin sdk ads

我将Android Studio(3.2.1)及其SDK更新到了最新版本。之后,需要通过添加以下标签来对清单进行手动更新:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@drawable/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:ignore="AllowBackup,GoogleAppIndexingWarning">

    <meta-data
        android:name="com.google.android.gms.ads.APP_ID"
        android:value="ca-app-pub-#############"/>

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".NewActivity" />
    <activity android:name=".PreviewActivity" />
    <activity android:name=".EditActivity" />
    <activity
        android:name=".preferencesdata.AboutActivity"
        android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" />
    <activity android:name=".preferencesdata.SettingsActivity"
        android:label="@string/settings">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity"/>
    </activity>
</application>

我将应用的真实ID替换为应用ID。该值也已更改为正确的广告单元ID,如https://developers.google.com/admob/android/quick-start所示。我还在MainActivity.kt中调用了此函数:

MobileAds.initialize(this, resources.getString(R.string.banner_ad_unit_id)) 

但是,问题无法解决。它仍然打印如下:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.easyapps.cryptnote, PID: 3991
    java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException: 

    ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions LINK to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: LINK.                           *
    ******************************************************************************


        at android.app.ActivityThread.installProvider(ActivityThread.java:5156)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
        at android.app.ActivityThread.-wrap1(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     Caused by: java.lang.IllegalStateException: 

    ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions here: LINK to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: LINK.                           *
    ******************************************************************************


        at com.google.android.gms.internal.ads.zzmn.attachInfo(Unknown Source)
        at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(Unknown Source)
        at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
            ... 10 more

有人可以打电话给我为什么会发生或帮助我解决它吗?我试图用Google搜索这个问题,但没有解决方案。这似乎是一个尚未解决的新问题。预先非常感谢。

16 个答案:

答案 0 :(得分:56)

发生这种情况是由于更新了AdMob SDK。现在,您需要在清单文件中添加appID。

<application> . . . 
      <meta-data 
           android:name="com.google.android.gms.ads.APPLICATION_ID" 
           android:value="ca-app-pub-################~##########"/>
</application>

您可以从此处-> Google addmob->选择应用程序->应用程序设置->应用程序ID获取appID。

您可以在这里ads-developers上阅读更多内容。

如果您想在放置自己的ID之前使用测试广告,请从developers.google此处检查AdMob测试ID。

希望这会对您有所帮助。谢谢:)

答案 1 :(得分:14)

Google提供了Google广告的更新,因此,如果您在gradle中更新了Admob库,则需要在清单中添加它。

<manifest>
   <application>
      <!-- TODO: Replace with your real AdMob app ID -->
      <meta-data
          android:name="com.google.android.gms.ads.APPLICATION_ID"
          android:value="ca-app-pub-################~##########"/>
  </application>
</manifest>

答案 2 :(得分:14)

添加清单文件

<meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true" />

答案 3 :(得分:2)

重要提示:从Google Mobile Ads SDK版本17.0.0开始,此步骤是必需的。添加此标签失败会导致以下消息崩溃:Google Mobile Ads SDK初始化不正确。

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    </application>
</manifest>

答案 4 :(得分:2)

使用新的Admob库,我们必须在onCreate()方法中初始化和加载Ad,并像其他答案中提到的那样在AndroidManifest文件内添加App ID。但是,请勿将广告ID与应用ID混淆,而将其放置在AndroidManifest中。

Ex App ID:  ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx 

Ex Ad ID:   ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx 

答案 5 :(得分:1)

我认为名称应为“ APPLICATION_ID”而不是“ APP_ID”

答案 6 :(得分:1)

如果您尚未发布应用,请尝试以下操作

 <meta-data
      android:name="com.google.android.gms.ads.AD_MANAGER_APP"
      android:value="true"/>

答案 7 :(得分:1)

不要与 APPLICATION_ID 混淆。您不应不要将其替换为您的应用程序ID。 com.example.myapp。保持原样。

<application>
...
      <meta-data 
           android:name="com.google.android.gms.ads.APPLICATION_ID" 
           android:value="ca-app-pub-################~##########"/>
...
</application>

答案 8 :(得分:0)

适用于Android的Google移动广告SDK v17.0.0刚刚发布,并且进行了这些重要更改。

所需的AndroidManifest.xml更改

从版本17.0.0开始,如果您是AdMob发布商,则现在需要在AndroidManifest.xml文件中添加AdMob应用ID。在AdMob用户界面中找到AdMob应用ID后,将其添加到清单中并添加以下标记:

<manifest>
    <application>
        <!-- TODO: Replace with your real AdMob app ID -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-################~##########"/>
    </application>
</manifest>

未能添加此标签将导致应用在启动时崩溃,并以The Google Mobile Ads SDK was initialized incorrectly.开头的消息

如果我使用Google Ad Manager代替AdMob怎么办?

使用Google广告管理系统的发布商需要将自己声明为具有不同标签的广告管理系统应用程序,以避免发生相同的崩溃:

<manifest>
    <application>
        <meta-data
            android:name="com.google.android.gms.ads.AD_MANAGER_APP"
            android:value="true"/>
    </application>
</manifest>

有关更多详细信息,请参见link

答案 9 :(得分:0)

在从V3.18和Ad SDK V 7.45.0开始的Unity3D中,您需要在菜单>资产> Google移动广告>设置中设置这些数据,它将自动将这些数据写入清单文件中。

将APPLICATION_ID和AD_MANAGER_APP直接添加到清单文件中(在其他答案中已经给出)仍然对我造成崩溃。

答案 10 :(得分:0)

我附带了开发人员指南中的此解决方案,对我来说很好用。 在manifest中,android:value替换为:

android:value="ca-app-pub-3940256099942544~3347511713"

答案 11 :(得分:0)

对于那些在Xamarin Forms Cross Platform应用程序中遇到此错误的人,错误

无法获得提供商com.google.android.gms.ads.MobileAdsInitProvider:java.lang.IllegalStateException`

这可能是由于安装的Xamarin.GooglePlayServices.Ads版本引起的。使用Version 71.1720.0时出现此错误。因此,我卸载了该版本并将其还原到Version 60.1142.1,并且该版本正常运行而没有崩溃。

有关教程,请参阅this Youtube Video

答案 12 :(得分:0)

java.lang.RuntimeException:无法获取提供者com.google.android.gms.ads.MobileAdsInitProvider:java.lang.ClassNotFoundException:找不到类“ com.google.android.gms.ads.MobileAdsInitProvider” < / p>

如果您在上面发现错误并在搜索时出现问题,这可能不是因为您忘记在清单中插入adMob元数据。我已经遇到了这个问题,解决方案是在您的应用程序内部实现MultiDex。

这是Google的说明:link

答案 13 :(得分:0)

确保检查以下步骤。

1。。项目级别Gradle已在所有项目中添加const { ClientSecretCredential } = require("@azure/identity"); const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

google()

2。。应用程序级别Gradle添加了与以下示例相同的以下依赖项:

allprojects {
    repositories {
        google()
    }
}

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

3。。更新dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'com.google.android.gms:play-services-ads:19.3.0' }中提到的AndroidManifest.xml中的App-ID。在<meta-data>

中替换您的App-ID

android:value

4。<manifest> <application> <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/> </application> </manifest>已添加到布局中。确保您添加的adView和App-ID都不相同。

我因为两个而感到困惑,所以出现了错误。 App-ID具有“ /”,而ads:adUnitId具有“〜”。出于测试目的,请以adUnitId作为“ ca-app-pub-3940256099942544 / 6300978111”,否则您的帐户将被暂停。

准备发布时,可以添加真实ID并发布。

adUnitId

检查所有4个步骤,您将能够解决此错误。

答案 14 :(得分:0)

确保你的元数据标签没有在活动中......去过那里,做到了。

答案 15 :(得分:-1)

我花了将近6个小时来寻找解决方案。上面的每个人都说要添加