Не удалось получить поставщика com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException

Я обновляю свою 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>

при этом вместо идентификатора приложения я помещаю настоящий идентификатор своего приложения. Значение также было изменено на правильный идентификатор рекламного блока, как показано здесь 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

Может ли кто-нибудь сказать мне, почему это происходит, или помочь мне решить эту проблему? Пытался погуглить проблему, но решения нет. Кажется, это новый, до сих пор нерешенный вопрос. Спасибо заранее.

Где именно вы разместили тег метаданных?

TheWanderer 12.10.2018 23:05

Я отредактировал вопрос и добавил данные манифеста. Теперь вы должны увидеть, где я разместил тег метаданных. Извините, но я не хочу сообщать идентификатор приложения и идентификатор рекламы, поэтому я заменил или изменил их. Спасибо за помощь, братан!

Mark Delphi 12.10.2018 23:34

Следуйте этому ответу stackoverflow.com/questions/53294162/…

Tahmid Bin Rashid 23.11.2018 09:40

Я столкнулся с той же проблемой, но в моем приложении я не включил рекламу, следует ли мне добавить часть метаданных? если да, то где я могу получить appID? Я не понял, где можно найти "Google addmob".

coder 07.01.2019 14:12

Обратите внимание: теги metaData необходимо обрабатывать по-разному, в зависимости от того, что вы используете для показа рекламы. При использовании AdMod используйте: developers.google.com/admob/android/… При использовании Google Ad-Manager используйте: developers.google.com/ad-manager/mobile-ads-sdk/android/…

SMagic 30.07.2020 13:31
61
5
78 870
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

Я думаю, имя должно быть «APPLICATION_ID», а не «APP_ID»

Конечно! Кроме того, я уже пытался заменить его реальным идентификатором приложения, определенным в build.gradle в applicationId. Безуспешно, приложение все равно вылетает ....

Mark Delphi 13.10.2018 17:30

вы хотите заменить "APPLICATION_ID" на какой идентификатор? App_id? потому что он вылетает, когда я устанавливаю его таким образом.

eyalix 20.11.2019 14:51

Это произошло из-за обновленного SDK AdMob. Теперь вам нужно добавить appID в свой файл манифеста.

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

Вы можете получить appID отсюда -> Google addmob -> Выбрать приложение -> Настройки приложения -> Идентификатор приложения.

Вы можете прочитать больше здесь рекламодатели.

Если вы хотите использовать тестовые объявления, прежде чем указывать собственный идентификатор, проверьте идентификаторы тестов AdMob здесь developers.google.

Надеюсь, что это поможет вам. Спасибо :)

Я обнаружил проблему, я использовал неправильный идентификатор (идентификатор для AdUnit), поэтому он не сработал. Большое спасибо!

Mark Delphi 13.10.2018 20:56

У меня это сработало, и просто чтобы добавить примечание, вы можете использовать тестовые объявления, прежде чем указывать свой собственный идентификатор, где он говорит: «ca-app-pub - ############## ## ~ ########## "проверьте идентификаторы тестов AdMob по адресу: developers.google.com/admob/android/test-ads

Herbert Schiller 27.12.2018 19:03

@SaveenDhiman Я столкнулся с той же проблемой, но в моем приложении я не включил рекламу, следует ли мне добавить часть метаданных? если да, то где я могу получить appID? Я не понял, где можно найти "Google addmob".

coder 08.01.2019 07:39

Привет, @coder. Могу ли я узнать, какую службу Google (com.google.android.gms: play-services) вы используете в своем приложении?

Saveen 08.01.2019 11:58

@SaveenDhiman Я только что заметил, что в моем классе был com.google.android.gms: play-services-ads. Я прокомментировал это, и ошибка больше не отображается, спасибо.

coder 09.01.2019 06:35
Ответ принят как подходящий

Google предоставил обновление для рекламы Google, поэтому, если вы обновляете свою библиотеку Admob в gradle, вам нужно добавить это в свой манифест.

<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

vizsatiz 03.04.2020 09:10

Я потратил много времени на поиск подходящего тестового AppId. Просто добавьте этот официальный идентификатор теста: ca-app-pub-3940256099942544 ~ 3347511713источник

Shpand 16.04.2020 10:35

Кроме того, убедитесь, что вы изменяете «main \ AndroidManifest.xml», а не «profile \ AndroidManifest.xml» или «debug \ AndroidManifest.xml».

J. Saw 17.05.2020 18:43

Формат admob_app_id изменяется, как указано в ответе android: value.

Ravi Yadav 11.08.2020 14:34

Добавить в свой файл манифеста

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

зачем добавлять это?

MBH 15.07.2020 10:36

SDK Google Mobile Ads SDK v17.0.0 для Android только что выпущен, и в нем есть эти важные изменения.

Требуемые изменения AndroidManifest.xml

Начиная с версии 17.0.0, если вы являетесь издателем AdMob, вам необходимо добавить свой идентификатор приложения AdMob в файл AndroidManifest.xml. Как только вы найдете свой идентификатор приложения AdMob в пользовательском интерфейсе 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>

Отсутствие этого тега приведет к сбою приложения при запуске с сообщением, начинающимся с The Google Mobile Ads SDK was initialized incorrectly..

Что делать, если я использую Google Ad Manager вместо AdMob?

Издателям, использующим Google Ad Manager, необходимо будет объявить себя приложением Менеджера рекламы с другим тегом, чтобы избежать такого же сбоя:

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

См. ссылка для более подробной информации.

В Unity3D, начиная с V3.18 и Ad SDK V 7.45.0, вам необходимо настроить эти данные @ Menu: Assets> Google Mobile Ads> Settings, и он автоматически запишет эти данные в файл манифеста.

Добавление APPLICATION_ID и AD_MANAGER_APP в файл манифеста напрямую, который уже указан в других ответах, все еще приводил к сбою.

Важно! Этот шаг требуется для Google Mobile Ads SDK версии 17.0.0. Отсутствие этого тега приводит к сбою с сообщением: SDK Google Mobile Ads был инициализирован неправильно.

<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>

Для тех, кто получает эту ошибку в приложении Xamarin Forms Cross Platform, ошибка

Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException`

это может быть связано с установленной версией Xamarin.GooglePlayServices.Ads. Когда я использовал Version 71.1720.0, я получал эту ошибку. Поэтому я удалил эту версию и восстановил ее на Version 60.1142.1, и она работала без сбоев.

Для обучения обратитесь к это видео на Youtube

Возврат к более старой версии - не настоящее решение. В соответствии с некоторыми проблемами в репозитории Github Xamarin.GooglePlayServices временным обходным решением является добавление Xamarin.Android.ManifestMerger (предварительная версия по состоянию на 2020/15/01).

MSicc 15.01.2020 14:33

У меня именно такая проблема с XF. @MSicc, не могли бы вы дать дополнительную информацию, ссылки? Спасибо!

Zotyi 03.04.2020 11:32

java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.MobileAdsInitProvider"

Если вы получили указанную выше ошибку и во время поиска попали сюда, возможно, это не связано с тем, что вы забыли вставить метаданные AdMob в свой манифест. Я столкнулся с этой проблемой, и решением является реализация MultiDex внутри вашего приложения.

Вот инструкция Google: ссылка

Если вы еще не опубликовали свое приложение, попробуйте следующее

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

почему мы добавляем это?

MBH 15.07.2020 10:36

Убедитесь, что вы проверили следующие шаги.

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. Обновить App-ID в AndroidManifest.xml, упомянутом в <meta-data>. Замените свой 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, иначе ваша учетная запись будет заблокирована.

Когда вы будете готовы к публикации, вы можете добавить свой настоящий идентификатор и опубликовать.

<com.google.android.gms.ads.AdView
      xmlns:ads = "http://schemas.android.com/apk/res-auto"
      android:id = "@+id/adView"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content"
      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 шага, и вы сможете устранить эту ошибку.

С новой библиотекой Admob мы должны инициализировать и загрузить Ad в методе onCreate() и добавить идентификатор приложения внутри файла AndroidManifest, как указано в других ответах. Но не помещайте идентификатор объявления в AndroidManifest, путая его с идентификатором приложения, что было моей ошибкой.

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

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

Не путайте с APPLICATION_ID. Вы должны не заменять это с вашим идентификатором приложения, например. com.example.myapp. Просто оставьте это как есть.

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

Я уже добавил <метаданные ..... />, но ошибка не исчезла. Решение состоит в том, чтобы поместить <meta-data ... /> в последнюю очередь из других метаданных в ваш файл androidManifest.xml, присутствующий в android -> app -> src -> main. Нравится:

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

Решение состоит в том, чтобы поместить строки метаданных в Последний (означает под всеми другими метаданными, присутствующими в вашем файле манифеста Android, но непосредственно перед закрытием тега приложения)..

Сработало для меня после того, как я вложил в это 4 часа. Действительно недооцененный ответ.

Nandan Wewhare 27.12.2020 12:52

Теперь я понимаю. Благодарю за ответ.

Wai Yan 31.05.2021 13:34

Убедитесь, что у вас нет тега метаданных внутри активности ... был там, сделал это.

Другие вопросы по теме