处理AdWhirl onFailure

Xi *_*ang 4 android adwhirl

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

任何人都可以举个例子吗?

提前致谢,

sve*_*ven 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>
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您可以将视图添加到布局(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);
Run Code Online (Sandbox Code Playgroud)

而已.

更复杂的方式

在GoodNews中虽然我想要一种更复杂的方式:当AdWhirl忙于获取广告时,应显示"广告加载..."消息,如果没有任何东西可以填写内部广告横幅(在应用中作为资源提供,那么如果互联网不可用,它甚至可以显示.加载消息很容易,因为它可以如上所示实现,但动态内部标题有点棘手.

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

  1. 打开"广告网络设置"
  2. 点击顶部的"广告自定义事件"按钮
  3. 输入任意名称(例如"fallback")和函数名称(后者将直接映射到Java类中的方法名称)
  4. 启用该事件给它分配0%
  5. 现在打开"Backfill Priority"屏幕并将您的后备事件移动到列表的末尾

上述配置可确保只有在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();             
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您需要使用以下命令注册事件处理程序AdWhirlLayout:

adView.setAdWhirlInterface(new AdWhirlEventHandler(adView));
Run Code Online (Sandbox Code Playgroud)

而已.