无法获取提供程序 com.google.android.gms.ads.MobileAdsInitProvider:java.lang.IllegalStateException

Posted

技术标签:

【中文标题】无法获取提供程序 com.google.android.gms.ads.MobileAdsInitProvider:java.lang.IllegalStateException【英文标题】:Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException 【发布时间】:2019-03-18 02:58:39 【问题描述】:

我将我的 android Studio (3.2.1) 及其 sdk 更新到最新版本。之后,它需要通过添加这些标签来手动更新 Manifest:

<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

有人可以告诉我为什么会发生这种情况或帮助我解决它吗?我试图用谷歌搜索这个问题,但没有解决方案。这似乎是一个新的尚未解决的问题。非常感谢。

【问题讨论】:

你把元数据标签具体放在哪里了? 我编辑了问题并添加了清单数据。现在你应该可以看到我把元数据标签放在哪里了。很抱歉,但我不想分享应用 ID 和广告 ID,这就是我更换或更改它们的原因。谢谢你的帮助兄弟! 关注这个答案***.com/questions/53294162/… 我也遇到了同样的问题,但是在我的应用中我没有包含广告,我应该添加元数据部分吗?如果是这样,我可以从哪里获得 appID?我没有找到“Google addmob”的位置。 请注意:元数据标签必须以不同的方式处理,具体取决于您使用什么来投放广告。使用 AdMod 时使用:developers.google.com/admob/android/… 使用 Google Ad-Manager 时使用:developers.google.com/ad-manager/mobile-ads-sdk/android/… 【参考方案1】:

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

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

您可以从这里获取 appID -->Google addmob -->选择应用 --> 应用设置 --> 应用 ID。

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

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

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

【讨论】:

我发现了问题,我使用了错误的 ID(AdUnit 的 ID),这就是它不起作用的原因。非常感谢! 它对我有用,只是为了添加一个旁注,您可能希望在放置自己的 id 之前使用测试广告,其中显示“ca-app-pub-###### #########~##########”检查 AdMob 测试 ID:developers.google.com/admob/android/test-ads @SaveenDhiman 我遇到了同样的问题,但是在我的应用中我没有包含广告,我应该添加元数据部分吗?如果是这样,我可以从哪里获得 appID?我没有找到“Google addmob”的位置。 嗨@coder 我可以知道您在应用程序中使用的是哪个谷歌服务(com.google.android.gms:play-services)吗? @SaveenDhiman 我刚刚注意到我的年级中有 com.google.android.gms:play-services-ads 我已将其注释掉,并且该错误不再显示,谢谢。【参考方案2】:

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>

【讨论】:

如果我正在使用 androidTests 进行测试,我该如何避免这种情况 我花了很多时间寻找正确的测试 AppId。只需添加这个官方测试ID:ca-app-pub-3940256099942544~3347511713source 另外,请确保您修改的是“main\AndroidManifest.xml”而不是“profile\AndroidManifest.xml”或“debug\AndroidManifest.xml” admob_app_id 的格式已更改,如 android:value 答案中所述。【参考方案3】:

添加您的清单文件

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

【讨论】:

为什么要添加这个?【参考方案4】:

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

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

【讨论】:

【参考方案5】:

重要提示:从 Google 移动广告 SDK 版本 17.0.0 开始,此步骤是必需的。未能添加此标记会导致崩溃并显示以下消息:Google 移动广告 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>

【讨论】:

【参考方案6】:

适用于 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 Ad Manager 的发布商需要将自己声明为具有不同标记的 Ad Manager 应用,以避免同样的崩溃:

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

有关详细信息,请参阅link。

【讨论】:

【参考方案7】:

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

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

【讨论】:

为什么要添加这个? developers.google.com/ad-manager/mobile-ads-sdk/android/…【参考方案8】:

我已经添加了 但错误没有解决。解决方案是将 放在 android-> app -> src -> main 中存在的 androidManifest.xml 文件中的其他元数据的最后。像这样:

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

解决方案是将元数据行放在最后(意味着在您的 android 清单文件中存在的所有其他元数据下方,但在关闭应用程序标记之前)。

【讨论】:

在我投入 4 小时后为我工作。真的被低估了。 现在我明白了。感谢您的回答。 原来如此 omg...在关闭 标签之前将其放在最底部 为我工作!评价不足...【参考方案9】:

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

【讨论】:

当然!另外,我已经尝试用build.gradle中定义的applicationId下的真实app id替换它。没有成功,应用仍然崩溃.... 您的意思是将“APPLICATION_ID”替换为哪个ID? App_id?因为当我这样设置时它会崩溃。【参考方案10】:

使用新的 Admob 库,我们必须在 onCreate() 方法中初始化和加载 Ad,并在 AndroidManifest 文件中添加 App ID,如其他答案中所述。但是不要将广告 ID 放在 AndroidManifest 中,将其与应用 ID 混淆,这是我做的错误。

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

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

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

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

将 APPLICATION_ID 和 AD_MANAGER_APP 直接添加到其他答案中已经给出的清单文件对我来说仍然崩溃。

【讨论】:

【参考方案13】:

对于那些在 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

【讨论】:

回到旧版本并不是真正的解决方案。根据 Xamarin.GooglePlayServices Github 存储库中的一些问题,临时解决方法是添加 Xamarin.Android.ManifestMerger(截至 2020 年 15 月 1 日的预览版)。 我对 XF 有这个问题。 @MSicc,您能否提供更多信息,链接?谢谢!【参考方案14】:

java.lang.RuntimeException:无法获取提供程序 com.google.android.gms.ads.MobileAdsInitProvider:java.lang.ClassNotFoundException:找不到类“com.google.android.gms.ads.MobileAdsInitProvider”

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

这是 Google 说明:link

【讨论】:

【参考方案15】:

确保检查以下步骤。

1. 项目级 Gradle 在所有项目中添加了google()

allprojects 
    repositories 
        google()
    

2. 应用级 Gradle 添加了以下依赖项,与以下示例相同:

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

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'

3. 更新AndroidManifest.xml 中提到的&lt;meta-data&gt; 中的App-ID。将您的 App-ID 替换为 android:value

<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. adView 被添加到布局中。确保您添加了 ads:adUnitId 而不是 App-ID 两者都不同。

我遇到了错误,因为我在两者之间感到困惑。 App-ID 有“/”,adUnitId 有“~”。出于测试目的,请使用“ca-app-pub-3940256099942544/6300978111”作为adUnitId,否则您的帐户将被暂停。

当您准备好发布时,您可以添加您的真实 ID 并发布。

<com.google.android.gms.ads.AdView
      xmlns:ads="http://schemas.android.com/apk/res-auto"
      android:id="@+id/adView"
      android:layout_
      android:layout_
      android:layout_centerHorizontal="true"
      android:layout_alignParentBottom="true"
      ads:adSize="BANNER"
      ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
  </com.google.android.gms.ads.AdView>

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

【讨论】:

【参考方案16】:

确保检查好,因为在 &lt;meta-data ..../&gt; 清单文件中应该是 App ID 而不是 ADd ID

App ID: ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx 
Ad ID: ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx 

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于无法获取提供程序 com.google.android.gms.ads.MobileAdsInitProvider:java.lang.IllegalStateException的主要内容,如果未能解决你的问题,请参考以下文章

Android 依赖 'com.google.android.exoplayer:exoplayer' 有不同版本的编译(r2.1.0)和运行时(2.9.1)类路径

将gradle中的外部jar添加到Android项目

无法使用 Kivy 获取窗口或文本提供程序

无法获取提供程序 com.crashlytics.android.CrashlyticsInitProvider

pyinstaller kivy 错误无法获取任何图像提供程序,中止

“无法获取提供程序 com.google.firebase.provider.FirebaseInitProvider”错误路径 Android