AdMob onFailedToReceiveRefreshedAd не вызывается - PullRequest
1 голос
/ 30 января 2011

Я использую AdMob в своем приложении для Android и хочу показывать резервную копию объявления, если AdMob не заполняется.Я подключаюсь к _adView.setAdListener(, но когда реклама не возвращается, onFailedToReceiveAd не срабатывает так, как я ожидал.Когда возвращается объявление, onReceiveAd срабатывает, поэтому я знаю, что правильно подключен.LogCat говорит мне: «Нет заполнения. Сервер ответил, что нет объявлений».что кажется правильным.Есть идеи?

открытый класс MultipleAdView расширяет LinearLayout {

private AdView _adView = null;
private WebView _webView = null;
private Context _context = null;

/*
 * Constructor from parent class.
 */
public MultipleAdView(Context context) {
    super(context, null);

    _context = context;
}

public MultipleAdView(Context context, AttributeSet attrs){   
    super(context, attrs);

    _context = context;
}

public void initialize(Activity activity){
    _adView = new AdView(activity);
    _adView.setAdListener(new AdListener() {

        @Override
        public void onReceiveRefreshedAd(AdView arg0) {
            int j = 0;
            j++;
        }

        @Override
        public void onReceiveAd(AdView arg0) {
            // Just here for breakpoint - gets in here fine when ad is returned
            int j = 0;
            j++;
        }

        @Override
        public void onFailedToReceiveRefreshedAd(AdView arg0) {
            // Is never called when no ad is returned
            loadBackupAd();
        }

        @Override
        public void onFailedToReceiveAd(AdView arg0) {
            // Is never called when no ad is returned
            loadBackupAd();
        }

        private void loadBackupAd(){

            // Load backup ad here
        }
    });

    addView(_adView, new LinearLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

}   

}

Ответы [ 2 ]

0 голосов
/ 30 января 2011

Я понял это недавно. Вы должны знать, что onFailedToReceiveAd и onFailedToReceiveRefreshedAd, кажется, имеют особые условия, которые я определил только при тестировании.

onFailedToReceiveAd будет вызываться только в том случае, если начальный вызов для получения первого объявления для adview не возвращает никакого объявления. Если объявление получено во время вашего первого запроса объявления, либо с refreshAd, либо с настройкой интервала, вы никогда не получите это сообщение.

onFailedToReceiveRefreshedAd не срабатывает, если adView автоматически обновляется. Кажется, он вызывается только тогда, когда refreshAd вызывается напрямую (то же самое с onReceivedRefreshedAd). Смотрите мои правки ниже ...

Рекламный вихрь - лучший вариант, если вы хотите охватить несколько доступных рекламных сетей. Это обрабатывает нормирование на сервере, но я все еще сталкиваюсь с проблемами, где это, кажется, не синхронизировано с admob. К счастью, код adwhirl имеет открытый исходный код, поэтому вы можете посмотреть, что он делает.


Ваш вопрос заставил меня покопаться. Из Android AdWhirl SDK:

 public void onReceiveAd(AdView adView) {
    Log.d(AdWhirlUtil.ADWHIRL, "AdMob success");

    AdWhirlLayout adWhirlLayout = adWhirlLayoutReference.get();
    if (adWhirlLayout == null) {
      return;
    }

    adWhirlLayout.adWhirlManager.resetRollover();
    adWhirlLayout.handler.post(new ViewAdRunnable(adWhirlLayout, adView));
    adWhirlLayout.rotateThreadedDelayed();
  }

  public void onFailedToReceiveAd(AdView adView) {
    Log.d(AdWhirlUtil.ADWHIRL, "AdMob failure");

    adView.setAdListener(null);

    AdWhirlLayout adWhirlLayout = adWhirlLayoutReference.get();
    if (adWhirlLayout == null) {
      return;
    }

    adWhirlLayout.rollover();
  }

  public void onFailedToReceiveRefreshedAd(AdView adView) {
    // Don't call adView.refreshAd so this is never called.
  }

  public void onReceiveRefreshedAd(AdView adView) {
    // Don't call adView.refreshAd so this is never called.
  }
}

Это наводит меня на мысль, что механизм получения onFailedToReceiveRefreshedAd действительно может заключаться в настройке собственного рекламного интервала Timer с помощью TimerTask или в другом роде. Если вы сделали это, отключив автоматическое обновление, я думаю, вам повезет больше.

0 голосов
/ 30 января 2011

Вы также можете попробовать реализовать onFailedToReceiveRefreshedAd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...