Я обновляю свою 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
Может ли кто-нибудь сказать мне, почему это происходит, или помочь мне решить эту проблему? Пытался погуглить проблему, но решения нет. Кажется, это новый, до сих пор нерешенный вопрос. Спасибо заранее.
Я отредактировал вопрос и добавил данные манифеста. Теперь вы должны увидеть, где я разместил тег метаданных. Извините, но я не хочу сообщать идентификатор приложения и идентификатор рекламы, поэтому я заменил или изменил их. Спасибо за помощь, братан!
Следуйте этому ответу stackoverflow.com/questions/53294162/…
Я столкнулся с той же проблемой, но в моем приложении я не включил рекламу, следует ли мне добавить часть метаданных? если да, то где я могу получить appID? Я не понял, где можно найти "Google addmob".
Обратите внимание: теги metaData необходимо обрабатывать по-разному, в зависимости от того, что вы используете для показа рекламы. При использовании AdMod используйте: developers.google.com/admob/android/… При использовании Google Ad-Manager используйте: developers.google.com/ad-manager/mobile-ads-sdk/android/…
Я думаю, имя должно быть «APPLICATION_ID», а не «APP_ID»
Конечно! Кроме того, я уже пытался заменить его реальным идентификатором приложения, определенным в build.gradle в applicationId. Безуспешно, приложение все равно вылетает ....
вы хотите заменить "APPLICATION_ID" на какой идентификатор? App_id? потому что он вылетает, когда я устанавливаю его таким образом.
Это произошло из-за обновленного 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), поэтому он не сработал. Большое спасибо!
У меня это сработало, и просто чтобы добавить примечание, вы можете использовать тестовые объявления, прежде чем указывать свой собственный идентификатор, где он говорит: «ca-app-pub - ############## ## ~ ########## "проверьте идентификаторы тестов AdMob по адресу: developers.google.com/admob/android/test-ads
@SaveenDhiman Я столкнулся с той же проблемой, но в моем приложении я не включил рекламу, следует ли мне добавить часть метаданных? если да, то где я могу получить appID? Я не понял, где можно найти "Google addmob".
Привет, @coder. Могу ли я узнать, какую службу Google (com.google.android.gms: play-services) вы используете в своем приложении?
@SaveenDhiman Я только что заметил, что в моем классе был com.google.android.gms: play-services-ads. Я прокомментировал это, и ошибка больше не отображается, спасибо.
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
Я потратил много времени на поиск подходящего тестового AppId. Просто добавьте этот официальный идентификатор теста: ca-app-pub-3940256099942544 ~ 3347511713источник
Кроме того, убедитесь, что вы изменяете «main \ AndroidManifest.xml», а не «profile \ AndroidManifest.xml» или «debug \ AndroidManifest.xml».
Формат admob_app_id изменяется, как указано в ответе android: value.
Добавить в свой файл манифеста
<meta-data
android:name = "com.google.android.gms.ads.AD_MANAGER_APP"
android:value = "true" />
зачем добавлять это?
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).
У меня именно такая проблема с XF. @MSicc, не могли бы вы дать дополнительную информацию, ссылки? Спасибо!
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"/>
почему мы добавляем это?
Убедитесь, что вы проверили следующие шаги.
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 часа. Действительно недооцененный ответ.
Теперь я понимаю. Благодарю за ответ.
Убедитесь, что у вас нет тега метаданных внутри активности ... был там, сделал это.
Где именно вы разместили тег метаданных?