Функция onAdLoaded() прослушивателя межстраничной рекламы не будет работать

interstitial.setAdListener(new AdListener(){
    public void onAdLoaded(){
        display();
    }
});

Пробовал с отладчиком, 1-я строчка запустилась, а вот вторая строчка просто не запустилась. Вот как я инициализирую объявление в методе onCreate:

interstitial = new InterstitialAd(this);
interstitial.setAdUnitId("******************************");
AdRequest adRequest = new AdRequest.Builder().build();
interstitial.loadAd(adRequest);

и InterstitialAd interstitial; вне метода внутри класса. AdUnitId был намеренно скрыт.

Логкат:

05-17 20:10:49.802: E/GooglePlayServicesUtil(17509): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
05-17 20:10:49.807: E/GooglePlayServicesUtil(17509): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
05-17 20:10:51.597: I/GATE(17509): <GATE-M>DEV_ACTION_COMPLETED</GATE-M>
05-17 20:10:51.597: I/Ads(17509): Scheduling ad refresh 60000 milliseconds from now.
05-17 20:10:51.602: I/Ads(17509): Ad finished loading.
05-17 20:10:51.632: D/TilesManager(17509): Starting TG #0, 0x5b3446f0
05-17 20:10:51.632: D/TilesManager(17509): new EGLContext from framework: 593202c0 
05-17 20:10:51.632: D/GLWebViewState(17509): Reinit shader
05-17 20:10:51.632: D/GLWebViewState(17509): Reinit transferQueue
05-17 20:10:56.262: D/AbsListView(17509): Get MotionRecognitionManager
05-17 20:11:31.987: I/Ads(17509): Ad is not visible. Not refreshing ad.
05-17 20:11:31.992: I/Ads(17509): Scheduling ad refresh 60000 milliseconds from now.

person zbz.lvlv    schedule 17.05.2014    source источник


Ответы (4)


Вам не хватает @override перед методом onAdLoaded()

person essess    schedule 17.05.2014
comment
да. Даже я добавил в (at)Override все равно ничего не вышло. @essess - person zbz.lvlv; 17.05.2014
comment
добавьте это и посмотрите, вызывается ли это (at) Override public void onAdFailedToLoad (int errorCode) - person essess; 17.05.2014
comment
Я предполагаю, что вы вызываете interstitial.show() в методе display(). Если нет, то вызовите interstitial.show(). В качестве альтернативы проверьте, используете ли вы последнюю версию google-play-services_lib. - person essess; 17.05.2014
comment
Я не могу обновить инструменты Android SDK. Означает ли это, что у меня установлена ​​последняя версия библиотеки Google Play? @essess - person zbz.lvlv; 17.05.2014
comment
да, тогда у вас есть последний. См. ответ MAC ниже, вам необходимо проверить разрешения и метаданные в файле манифеста. - person essess; 17.05.2014

Надеюсь, вы добавили следующее в AndroidManifest.xml

Интернет-разрешение

<uses-permission android:name="android.permission.INTERNET"/>

рекламная активность

<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

Сервисная библиотека Google Play под тегом приложения

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

И добавил код как

    interstitial = new InterstitialAd(this);
    interstitial.setAdUnitId(getResources().getString(R.string.admob_inst));
    // interstitial.setAdUnitId("01010101");
    // Create ad request.
    AdRequest adRequest = new AdRequest.Builder().build();
    // Begin loading your interstitial.
    interstitial.loadAd(adRequest);
    interstitial.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            // TODO Auto-generated method stub
            super.onAdLoaded();
            interstitial.show();
        }
    });
person MAC    schedule 17.05.2014
comment
Это не сработает. Кстати, идентификатор рекламного блока был намеренно скрыт. @MAC - person zbz.lvlv; 17.05.2014
comment
@zbz.lvlv: обновленный ответ. - person MAC; 17.05.2014
comment
У меня уже были такие в AndroidManifest. У меня есть еще один баннер в основной деятельности, который работает. Это межстраничное объявление не входит в основное действие. - person zbz.lvlv; 17.05.2014
comment
проверял логи? и убедитесь, что вы добавили эту строку interstitial.show(); - person MAC; 17.05.2014
comment
Я только что проверил. Я нашел что-то подозрительное. Я обновлю свой вопрос. У меня есть строка interstitial.show() @MAC - person zbz.lvlv; 17.05.2014
comment
твоя проблема решена? Я столкнулся с той же проблемой. onAdLoaded никогда не попадает. - person Sanmoy; 22.10.2014

НЕ вызывайте display() из #onAdLoaded. Это приведет к очень плохому UX. Вместо этого вызывайте отображение из естественной точки останова в вашем приложении (если объявление было загружено).

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

05-17 20:11:31.987: I/Ads(17509): Ad is not visible. Not refreshing ad.
05-17 20:11:31.992: I/Ads(17509): Scheduling ad refresh 60000 milliseconds from now.

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

person William    schedule 18.05.2014
comment
Можете ли вы объяснить дальше? Я не могу понять. Так что я должен делать? @Уильям - person zbz.lvlv; 18.05.2014
comment
Какой бит вам не понятен? - person William; 18.05.2014

Используйте следующий код, чтобы отобразить прослушиватель объявления в AdLoaded(). Я использовал то же самое. Это сработало для меня.

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

interstitial = new InterstitialAd(this);
interstitial.setAdUnitId("***********");

AdRequest adRequest = new AdRequest.Builder().build();
interstitial.loadAd(adRequest);
interstitial.setAdListener(new AdListener() {
public void onAdLoaded() {
displayInterstitial();
}
});
}

Вне функции oncreate используйте следующий код:

public void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
}
person arunkumar    schedule 28.06.2014
comment
Почему вы проверяете interstitial.isLoaded(), если он был вызван методом слушателя, который называется onAdLoaded? - person Ricardo; 24.01.2015