无法获取提供程序 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】:我已经添加了
<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
中提到的<meta-data>
中的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】:确保检查好,因为在 <meta-data ..../>
清单文件中应该是 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)类路径
无法获取提供程序 com.crashlytics.android.CrashlyticsInitProvider
pyinstaller kivy 错误无法获取任何图像提供程序,中止
“无法获取提供程序 com.google.firebase.provider.FirebaseInitProvider”错误路径 Android