AdMob никогда не загружается на определенных устройствах - PullRequest
1 голос
/ 11 марта 2020

У меня есть приличное приложение в Play Store с несколькими тысячами пользователей, и я уже несколько лет пользуюсь рекламными вставками и баннерами AdMob. Недавно я заметил, что на некоторых устройствах реклама никогда не загружается.

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

        MobileAds.initialize( this, (InitializationStatus initializationStatus) -> {
        Log.d( TAG, "initAds: " + initializationStatus );
        loadInterstitialAd();
        //loadRewardedVideoAd();
    } );

Вышеуказанное возвращает com.google. android .gms.internal.ads. zzahg@xxxxxx

Кто-нибудь с подобным опытом?

Каждый раз, когда я пытаюсь показать рекламу, статус вставки - «загрузка». Возможно, это происходит примерно на 10-15% всех моих клиентских устройств и на одном из моих симуляторов с Android API 22.

Я также проверил свои журналы и могу сказать, что эти устройства меняются с Android 8,9 & 10 и устройства от Samsung, LGE, Motorola и Google.

Я даже пытался использовать идентификатор тестового рекламного блока. Результат тот же.

Обновление-> Код

  private void loadInterstitialAd() {
    if (mInterstitialAd == null) {
        mInterstitialAd = new InterstitialAd( MainActivity.this );
        mInterstitialAd.setAdUnitId( ADMOB_INTERSTITIAL );//REAL
    }

    List<String> testDevices = new ArrayList<>();
    testDevices.add(AdRequest.DEVICE_ID_EMULATOR);
    testDevices.add( ADMOB_TEST_DEVICE_1 );
    testDevices.add( ADMOB_TEST_DEVICE_2 );
    RequestConfiguration requestConfiguration
            = new RequestConfiguration.Builder()
            .setTestDeviceIds(testDevices)
            .build();
    MobileAds.setRequestConfiguration(requestConfiguration);

    final AdRequest request = new AdRequest.Builder()
            .build();
    mInterstitialAd.loadAd( request );


    mInterstitialAd.setAdListener( new AdListener() {
        @Override
        public void onAdClosed() {
            //Log.d( TAG, "onAdClosed: Before" );
            new Handler().postDelayed( () -> EventBus.getDefault().post( new MessageEvent( EVENT_MESSAGE_ADMOB, EVENT_ACTION_AD_FINISHED, new Bundle() ) ), 200 );
            //Log.d( TAG, "onAdClosed: After" );s
            mInterstitialAd.loadAd( request );
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            if (!mInterstitialAd.isLoading()) {
                mInterstitialAd.loadAd( request );
            }
            Log.d( TAG, "onAdFailedToLoad: " + errorCode );
        }

        @Override
        public void onAdLoaded() {
            Log.d( TAG, "onAdLoaded: " );
            super.onAdLoaded();
        }

    } );
    Log.d( TAG, "loadInterstitialAd: 4 " + (mInterstitialAd == null ? "NULL" : "NOT NULL") );
}



  public void showInterstitial() {
    Log.d( TAG, "showInterstitial: 0" );
    try {
        if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
            Log.d( TAG, "showInterstitial: 1" );
        } else {
            EventBus.getDefault().post( new MessageEvent( EVENT_MESSAGE_ADMOB, EVENT_ACTION_AD_FINISHED, new Bundle() ) );
            loadInterstitialAd();
            Log.d( TAG, "showInterstitial: 2" );
            SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences( mContext ).edit();
            editor.putLong( "mLastAdShownTime" + appSuffix, 0 );
            editor.commit();

        }
        if (mInterstitialAd.isLoading()) {
            Log.d( TAG, "showInterstitial: LOADING" );
            Crashlytics.log( TAG + " -showInterstitial - " + getAccountID( mContext ) );
            Crashlytics.logException( new RuntimeException() );
        }
    } catch (Exception e) {
        Log.d( TAG, "showInterstitial: 3" );
        Crashlytics.log( TAG + " -showInterstitial - " + e.toString() );
        Crashlytics.logException( e );
        EventBus.getDefault().post( new MessageEvent( EVENT_MESSAGE_ADMOB, EVENT_ACTION_AD_FINISHED, new Bundle() ) );
        e.printStackTrace();
        loadInterstitialAd();
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences( mContext ).edit();
        editor.putLong( "mLastAdShownTime" + appSuffix, 0 );
        editor.commit();

    }
}

1 Ответ

0 голосов
/ 18 марта 2020

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

Идентификатор тестового приложения: ca-app-pub-3940256099942544 ~ 3347511713

Тестовые объявления

Объявить в манифесте

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

Фрагмент кода

private InterstitialAd interstitialAd;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    loadFullscreenAd();
}

private void loadFullscreenAd() {

    if (mInterstitialAd != null) {
        if (!mInterstitialAd.isLoading() && !mInterstitialAd.isLoaded()) {
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }
        return;
    }
    mInterstitialAd = new InterstitialAd(getActivity());
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            // Code to be executed when an ad finishes loading.
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            loadFullscreenAd();
        }

        @Override
        public void onAdOpened() {
            // Code to be executed when the ad is displayed.

        }

        @Override
        public void onAdLeftApplication() {
            // Code to be executed when the user has left the app.
        }

        @Override
        public void onAdClosed() {

            loadFullscreenAd();
        }
    });
}

 public void showFullScreenAds() {
    if (mInterstitialAd != null) {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        }else if(!mInterstitialAd.isLoading()){
            loadFullscreenAd();
        }
    }else {
        loadFullscreenAd();
    }
}
...