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

Mar*_*phi 36 sdk android ads kotlin

我将我的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>
Run Code Online (Sandbox Code Playgroud)

相反,应用程序ID我把我的应用程序的真实ID.该值也已更改为正确的广告单元ID,如https://developers.google.com/admob/android/quick-start所示.我还在MainActivity.kt中调用了这个函数:

MobileAds.initialize(this, resources.getString(R.string.banner_ad_unit_id)) 
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么会这样或者帮助我解决它?我试图谷歌这个问题,但没有解决方案.这似乎是一个尚未解决的新问题.提前谢谢了.

Sav*_*een 60

这是因为更新的AdMob SDK.现在,您需要在清单文件中添加appID.

<application> . . . 
      <meta-data 
           android:name="com.google.android.gms.ads.APPLICATION_ID" 
           android:value="ca-app-pub-################~##########"/>
</application>
Run Code Online (Sandbox Code Playgroud)

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

您可以从此处了解更多广告开发者.

如果您想在使用自己的ID之前使用测试广告,请在此处查看来自developers.google的AdMob测试ID .

希望这会帮助你.谢谢 :)

  • 我发现了问题,我使用了错误的ID(AdUnit的ID),这就是为什么它不起作用.非常感谢! (2认同)
  • @SaveenDhiman我刚刚注意到我的年级中有 com.google.android.gms:play-services-ads 我将其注释掉并且错误不再显示,谢谢。 (2认同)

小智 30

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>
Run Code Online (Sandbox Code Playgroud)

  • 我花了很多时间寻找正确的测试 AppId。只需添加此官方测试 ID:_ca-app-pub-3940256099942544~3347511713_ [来源](https://developers.google.com/admob/android/quick-start#update_your_androidmanifestxml) (2认同)

Viv*_*ara 20

添加您的清单文件

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


Pri*_*ain 10

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

<application>
   ...
   ...
   < meta-data 
        android:name="com.google.android.gms.ads.APPLICATION_ID" 
        android:value="ca-app-pub-################~##########"/> 
</application>
Run Code Online (Sandbox Code Playgroud)

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

  • 在我投入了 4 个小时后,它为我工作了。确实被低估的答案。 (4认同)
  • 就是这样,天哪...在关闭 &lt;/application&gt; 标签之前将其放在最底部 (2认同)
  • 为我工作!低于评级... (2认同)

Bik*_*ram 9

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

<application>
...
      <meta-data 
           android:name="com.google.android.gms.ads.APPLICATION_ID" 
           android:value="ca-app-pub-################~##########"/>
...
</application>
Run Code Online (Sandbox Code Playgroud)


san*_*adi 7

重要提示:从 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>
Run Code Online (Sandbox Code Playgroud)


0xA*_*iHn 5

v17.0.0适用于 Android 的Google 移动广告 SDK刚刚发布,它带来了这些重要的变化。

所需的 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>
Run Code Online (Sandbox Code Playgroud)

未能添加此标签将导致应用程序在应用程序启动时崩溃,并显示以开头的消息 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>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅链接