处理AdWhirl onFailure

时间:2011-03-03 15:16:09

标签: android adwhirl

您好我正在使用Android应用并使用AdWhirl来展示我的广告。我希望能够在AdWhirl没有返回广告时处理这种情况。当它失败时,我想展示一个装饰条。

有人能举个例子吗?

提前致谢,

1 个答案:

答案 0 :(得分:5)

好的,我现在已经弄明白了。有两种可能的方法,一种是非常容易的,另一种需要更多的工作。

简单方法

只要没有任何内容可显示,adwhirl布局就会保持不可见状态。因此,您只需在背景中创建一个包含后备视图的FrameLayout,并在前面创建类似于此的adwhirl视图:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="53dp"
        android:layout_gravity="center_horizontal"
        >
    <!-- fallback view -->
    <TextView
        android:id="@+id/ad_fallback"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text="nothing to say..."
        >
</FrameLayout>

在您的代码中,您可以将视图添加到布局中(其中parentView是上面显示的膨胀布局):

final DisplayMetrics dm = activity.getResources().getDisplayMetrics();
final AdWhirlLayout adView = new AdWhirlLayout(activity, ADWHIRL_ID);
adView.setMaxWidth((int) (dm.density * 320));
adView.setMaxHeight((int) (dm.density * 53));
adView.setGravity(Gravity.CENTER);
parentView.addView(adView);

就是这样。

更复杂的方式

GoodNews虽然我想要一种更复杂的方式:AdWhirl忙于抓取广告时应显示“广告加载...”消息,如果没有任何东西可以填写内部广告横幅(提供为应该显示应用程序中的资源,以便在互联网不可用时甚至可以正常工作。加载消息很简单,因为它可以如上所示实现,但动态内部标题有点棘手。

解决方案是由AdWhirl提供的强大的自定义事件 - 不幸的是 - 记录严重。要采取的第一步是在AdWhirl Web界面中创建自定义事件:

  1. 调出“广告网络设置”
  2. 点击顶部的“广告自定义事件”按钮
  3. 输入任意名称(例如“fallback”)和函数名称(后者将直接映射到Java类中的方法名称)
  4. 启用事件,为其分配0%
  5. 现在调出“Backfill Priority”屏幕并将您的后备事件移至列表末尾
  6. 上述配置可确保您的自定义事件仅在AdWhirl无法展示任何真实广告时触发。

    现在您需要在代码中处理事件。因此,您需要一个实现AdWhirlLayout.AdWhirlInterface的类,并定义一个不带参数的公共方法,并且名称等于自定义事件指定的函数名。然后,此方法可以将您的特定视图注入AdWhirl布局:

    class AdWhirlEventHandler implements AdWhirlLayout.AdWhirlInterface {
        private final AdWhirlLayout adView;
    
        public AdWhirlEventHandler(AdWhirlLayout adView) {
            this.adView = adView;
        }
    
        @Override
        public void adWhirlGeneric() {
            // nothing to be done: Generic notifications should also be 
            // configurable in the AdWhirl web interface, but I could't find them
        }    
    
        /**
         * Will be called by AdWhirl when our custom event with the function name 
         * "fallback" is fired. Called via reflection.
         */
        public void fallback() {
            try {
                final View fallbackView = 
                    ... // inflate the view to be shown here
                adView.pushSubView(fallbackView);
    
                /*
                 * reset backfill chain and schedule next ad update
                 */
                adView.adWhirlManager.resetRollover();
                adView.rotateThreadedDelayed();
            } catch (MyExpectedException ex) {
                /*
                 * forward to next option from the backfill list
                 */
                adView.rolloverThreaded();             
            }
        }
    }
    

    现在您需要使用AdWhirlLayout注册您的事件处理程序,如下所示:

    adView.setAdWhirlInterface(new AdWhirlEventHandler(adView));
    

    就是这样。