4

嗨,我正在开发一个 android 应用程序并使用 AdWhirl 来展示我的广告。我希望能够处理 AdWhirl 不返回任何广告的情况。当它失败时,我想显示一个装饰条。

谁能给我一个例子?

提前致谢,

4

1 回答 1

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 网络界面中创建一个自定义事件:

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

上面的配置确保只有在 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));

而已。

于 2011-03-23T09:19:17.477 回答