Android 8.1 Невозможно получить поставщика com.google.android.gms.ads.MobileAds!!! apk crash

Моя Android Studio версии 3.4.1, я пытаюсь добавить код MobileAds в свой проект, созданный с использованием SDK 28, но получаю отчет о сбое. Я не знаю почему????

Я проверил все подобные посты, но некоторые из них устарели и, к сожалению, не смогли найти решение

Мой Android Манифест

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

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-3940256099942544/6300978111"/>
        <activity
    android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
    android:screenOrientation="portrait" />

MainActivity Layout

    <com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_gravity="bottom"
android:layout_weight="1"
ads:adSize="SMART_BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">

Приложение build.gradle

   android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
multiDexEnabled true
buildTypes {
release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 
'proguard-rules.txt'
}
}
repositories {
jcenter()
mavenCentral()  // GPUImage for Android
}
dexOptions {
javaMaxHeapSize "4g"
}
productFlavors {
}
} 
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/acra-4.5.0.jar')
implementation files('libs/ormlite-android-4.43.jar')
implementation files('libs/ormlite-core-4.43.jar')
// If you want to use the GPU Filters
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
 implementation 'com.google.firebase:firebase-ads:17.2.1'
implementation 'com.google.firebase:firebase-messaging:18.0.0'
implementation 'com.loopj.android:android-async-http:1.4.9'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'jp.wasabeef:glide-transformations:2.0.1'
implementation 'com.onesignal:OneSignal:3.10.9'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:animated-vector-drawable:28.0.0'
implementation 'com.android.support:customtabs:28.0.0'
implementation 'com.android.support:exifinterface:28.0.0'
implementation 'com.google.android.gms:play-services-ads:17.2.1'
implementation 'com.google.android.gms:play-services-maps:+'

}
apply plugin: 'com.google.gms.google-services'

HomeActivity.java

    @Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_new);
MobileAds.initialize(this, "ca-app-pub-3940256099942544/6300978111");

AdView mAdView = (AdView) findViewById(R.id.adView);
try{

    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

    if (admov_status.equalsIgnoreCase("true")){
        mAdView.setVisibility(View.VISIBLE);
    }else if(admov_status.equalsIgnoreCase("false")) {
        mAdView.setVisibility(View.GONE);
    }
}catch (RuntimeException e){
    mAdView.setVisibility(View.GONE);
}
}

Но все еще ОШИБКА работает. Ошибка logcat подробности здесь

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

******************************************************************************
* Invalid application ID. Follow instructions here: Link to *
* find your app ID.                                                          *
******************************************************************************


    at android.app.ActivityThread.installProvider(ActivityThread.java:6242)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:5805)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5722)
    at android.app.ActivityThread.-wrap1(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.IllegalStateException: 

******************************************************************************
* Invalid application ID. Follow instructions here: Link to *
* find your app ID.                                                          *
******************************************************************************


    at com.google.android.gms.internal.ads.zzabh.attachInfo(Unknown Source:19)
    at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(Unknown Source:3)
    at android.app.ActivityThread.installProvider(ActivityThread.java:6239)
        ... 10 more

Может кто-нибудь помочь мне разобраться в проблеме, пожалуйста.

4 ответа

Решение

В Admob есть 2 объявления.

1). APPID

2). AdUnitId

Для приложения независимо от того, какой тип объявления вы используете, appID один и тот же. Но adUnitID отличается для каждого типа рекламы, который вы используете. Например, в приложении вы можете размещать как рекламные баннеры, так и рекламные вставки. Для обоих этих типов объявлений appID одинаков, но adUnitID отличается.

В соответствии с вашим кодом вы везде использовали один и тот же идентификатор, что неверно. Вам нужно использовать appID, adUnitID в соответствующих местах. В макете xml, где вы объявляете рекламный блок, он должен иметь adUnitID и другие места appID.

manifest.xml

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value=**appID**/>

MainActivity Layout

<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_gravity="bottom"
android:layout_weight="1"
ads:adSize="SMART_BANNER"
ads:adUnitId=**adUnitID**>

HomeActivity.java

MobileAds.initialize(this, **appID**);

Так что в вашем случае кажется, что вы использовали adUnitID для тех мест, где вы должны были использовать appID. Наверное, поэтому выдает ошибку, как в

******************************************************************************
* Invalid application ID. Follow instructions here: Link to *
* find your app ID.                                                          *
******************************************************************************

Перейдите по этой ссылке, чтобы узнать, как узнать appID и adUnitID для вашей рекламы.

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

Действия, которые необходимо выполнить:

  • Создать AdMobАккаунт, если у вас его нет (https://apps.admob.com/signup/)
  • Создайте приложение, перейдя на левую панель и предоставив требуемые детали, запрошенные там (см. Изображение - 1)

Изображение - 1

  • После того, как будут даны запрошенные подробности, вы увидите экран, как показано на рисунке - 2.

Изображение - 2

  • Затем вы можете добавить «AD Unit» или нажать «Готово». (Если вы нажмете «Готово», вы будете перенаправлены на страницу AppOverview, где вы сможете добавить «AD Unit»).
  • Теперь нажмите «Приложение» -> «Просмотреть все приложения» (снова обратитесь к изображению -1 , чтобы увидеть вариант).
  • Затем вы будете перенаправлены на страницу, где будет показана вся информация о приложениях (см. Изображение - 3).

Изображение - 3

  • Нажмите на показанный здесь идентификатор приложения, это ваш идентификатор приложения. Скопируйте это и вставьте в файл манифеста в строку значения, как показано ниже, вы также можете обратиться к Image -4

Изображение -4

                 <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-8623492450664484~4654380864">
  • Затем перейдите в свой файл Activity.xml (куда вы добавили баннер Ad Mob) и добавьте "Ad Unit Id"как показано ниже

                    <com.google.android.gms.ads.AdView
             android:id="@+id/adView"
             android:layout_width="416dp"
             android:layout_height="52dp"
             android:layout_alignParentBottom="true"
             android:layout_centerHorizontal="true"
             ads:adSize="BANNER"
             ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
             tools:ignore="MissingConstraints" />
    

Если вы хотите протестировать, используйте AdUnitId, как указано ниже (предложено в документе разработчика AdMob).

ca-app-pub-3940256099942544/6300978111

Затем добавьте следующие две строки в соответствующее действие (файл Kotlin)

          val adRequest = AdRequest.Builder().build()
    mAdView?.loadAd(adRequest)

Теперь запустите приложение, вы увидите рекламный баннер. Надеюсь, это будет полезно

Не ответ для вас, но может помочь другим:

Модули динамических функций вызывают проблемы, если вы также не включаете зависимость в базовый файл build.gradle (app) (недостаточно только динамического манифеста).

У меня такая же проблема. После выполнения приведенной выше рекомендации я также добавляю

              repositories {
        google()
         jcenter()
        mavenCentral()  // GPUImage for Android
    }

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

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