#android #admob #interstitial #google-admob
#Android #промежуточное #admob
Вопрос:
У меня есть действие для отображения полноэкранного изображения. Есть кнопка для загрузки изображения. Перед загрузкой мне нужно показать промежуточное объявление. После загрузки мне нужно запросить и загрузить новое промежуточное объявление. Я закодировал то же самое, что и следующее:
public class FullScreenViewActivity extends Activity implements OnClickListener {
private InterstitialAd interstitial;
private AdRequest adRequest;
....
@Override
protected void onCreate(Bundle savedInstanceState) {
interstitial = new InterstitialAd(FullScreenViewActivity.this);
interstitial.setAdUnitId(getString(R.string.admob_interstitial_id)); //live ad unit
...
}
protected void onResume() {
super.onResume();
adRequest = getInterstitialAdRequest();
interstitial.loadAd(adRequest);
interstitial.setAdListener(new AdListener() {
public void onAdClosed() {
downloadImage();
adRequest = getInterstitialAdRequest();
interstitial.loadAd(adRequest);
}
public void onAdFailedToLoad(int var1) {
downloadImage();
adRequest = getInterstitialAdRequest();
interstitial.loadAd(adRequest);
}
public void onAdLeftApplication() {
downloadImage();
adRequest = getInterstitialAdRequest();
interstitial.loadAd(adRequest);
}
});
}
public AdRequest getInterstitialAdRequest() {
return new AdRequest.Builder().build();
}
}
Моя проблема в том, что я продолжаю видеть одно и то же объявление каждый раз, когда нажимаю кнопку загрузки. Есть ли какая-то проблема в моей логике? Или admob выдает мне одно и то же объявление каждый раз, когда я запрашиваю?
Ответ №1:
Я не вижу в вашем коде ничего, что могло бы привести к повторному показу одного и того же объявления. Вполне возможно, что где бы вы ни находились в мире, один конкретный рекламодатель скупает почти весь спрос, что может привести к повторному показу одного объявления. Обычно это временная проблема, которая со временем исчезнет.
Однако я бы рекомендовал исключить loadAd
вызовы из этих методов:
public void onAdFailedToLoad(int var1) {
downloadImage();
adRequest = getInterstitialAdRequest();
interstitial.loadAd(adRequest);
}
public void onAdLeftApplication() {
downloadImage();
adRequest = getInterstitialAdRequest();
interstitial.loadAd(adRequest);
}
onAdLeftApplication
вызывается, когда пользователь нажимает на объявление, и в ответ открывается браузер (или другое приложение). Когда они вернутся, onAdClosed
они все равно будут вызываться, поэтому, поскольку ваш код остается в силе, вы получите два вызова loadAd
. Я бы удалил onAdLeftApplication
его и оставил один onAdClosed
.
loadAd
Повторный вызов для восстановления после сбоя ad in onAdFailedToLoad
— хорошая идея, но, похоже, у вас нет никакой логики отключения или увеличения времени перед повторной попыткой в случае повторных сбоев. Это может привести к бесконечному циклу, если сетевое соединение пользователя отключается (объявление № 1 немедленно завершается сбоем, что приводит к попытке загрузки объявления № 2, которая немедленно завершается сбоем и вызывает объявление № 3 …). Попробуйте использовать счетчик, чтобы отсечь попытки после определенного числа, или используйте a Handler
, чтобы ввести постепенно увеличивающуюся задержку.
И последнее замечание: если вы тестируете свое приложение, вам следует использовать тестовые объявления!
Ответ №2:
лучший способ использовать это:
void requestInterstitial(){
if (!mInterstitialAd.isLoading() amp;amp; !mInterstitialAd.isLoaded()) {
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);
}
}