У меня есть приличное приложение в 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();
}
}