2011-01-29 3 views
1

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

общественного класса 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)); 

} 

}

+0

Я читаю сейчас об AdWhirl - это то, что я хочу сделать вместо этого? – skaz

ответ

0

Я понял это недавно. Вы должны знать, что 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 действительно может быть для настройки вашего собственного рекламного интервального таймера с использованием TimerTask или сортировки. Если вы это сделали, отключив автоматическое обновление, я предполагаю, что вам повезет больше.

+0

Спасибо за подробный отклик. Я даже не могу включить onFailedToReceiveAd для вызова при первом запросе объявления. Я собираюсь разместить больше кода в основной части. – skaz

+0

Я никогда не получал эту работу, но я переключился на AdWhirl, которая решила все мои проблемы :) – skaz

+0

Неужели кому-то удалось получить onfailedtoreceivead ответ с adwhirl? Я был бы очень благодарен за демонстрацию, как ... –

0

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