2011-01-29 15 views
1

私はAndroidアプリケーションでAdMobを使用していますが、AdMobが満たされない場合はバックアップ広告を表示します。私は_adView.setAdListener(にフックしますが、広告が返ってこないときは、onFailedToReceiveAdは私が期待するように発火しません。広告が返されたときにonReceiveAdが発生するので、正しく接続されていることがわかります。 LogCatは次のように言っています: "No fill。Serverは利用可能な広告がないと回答しました。"それは正しいようです。何か案は?AdMob onFailedToReceiveRefreshedAdが呼び出されていません

パブリッククラスMultipleAdViewはあなたにもonFailedToReceiveRefreshedAdを実装しようとすることができの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

私はこれを最近考え出しました。 onFailedToReceiveAdonFailedToReceiveRefreshedAdには、私がテストを通して決定した特別な条件があるように思えます。

onFailedToReceiveAdは、adviewの最初の広告を取得する最初の呼び出しで広告が返されない場合にのみ呼び出されます。 refreshAdのいずれかの広告の最初のリクエスト中に広告が受信されるか、間隔を設定すると、このメッセージは表示されません。

onFailedToReceiveRefreshedAdadViewが自動的にリフレッシュされている限り、起動されていないようです。 refreshAdが直接呼び出されたときに呼び出されるようです(onReceivedRefreshedAdと同じ)。下記の私の編集を参照してください...

複数の利用可能な広告ネットワークにまたがって広がっていくことを望んでいる場合は、広告旋回はより良い選択肢です。それはサーバー上の配給を処理しますが、私はまだadmobとの同期が外れているような問題にぶち当たっています。幸いなことに、adwhirlコードはオープンソースなので、何をしているのか見ることができます。


あなたの質問により、私はいくつかの掘り出しをしました。 AndroidのSDK AdWhirlから:

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

誰かがadwhirlでonfailedtoreceiveadの回答を得ることができましたか? 私はデモのために本当に感謝しています... –

関連する問題