Skip to content

插屏广告

参考Demo

注意: 如果聚合集成了腾讯广告,则触发展示插屏广告的Activity需要配置:

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

1. 主要API

1.1 WMInterstitialAd

  • com.windmill.sdk.interstitial.WMInterstitialAd
方法名方法介绍
WMInterstitialAd(Activity activity, WMInterstitialAdRequest request)构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)。
setAdSourceStatusListener(WMAdSourceStatusListener adSourceStatusListener)设置广告源层级加载回调,需要在广告load 之前设置
setInterstitialAdListener(WMInterstitialAdListener interstitialAdListener)回调监听。广告相关状态会通过 interstitialAdListener 通知开发者。
loadAd()拉取广告。
isReady()广告是否准备好,未准备好广告将无法展示。
setFilter(WMAdFilter filter)广告源加载及播放过滤设置,具体使用见高级设置->广告过滤->广告对象级广告源过滤器设置。
setCustomGroup(HashMap<String, String> customGroup)广告对象级自定义广告源分组,可设置多个分组,每个分组下可设置多个广告源。
setActivityChannelFilterList(Set<Integer> channelIds)广告对象加载时渠道 Activity 透传过滤,设置渠道对应 id 后加载时传给三方渠道加载的参数由 activity 改为 context。
目前不支持传 context 的渠道:tapadn,广点通,美数,oppoadn,oppo,vivo,vivoadn,小米。
show(Activity activity, HashMap<String, String> options)展示广告。参数说明:activity(展示广告的 activity)、options(广告展示时的扩展参数,可选,可参考demo)。
checkValidAdCaches()查询当前广告位的所有缓存信息的AdInfo对象、在广告加载成功后调用。
getLoadFailMessages()获取当前广告位详细报错信息,包含广告源的详细错误信息。返回 String 类型(可能会为 null)。在 onInterstitialAdLoadError() 回调之后之后调用。
getAdInfo()获取当前Ready最高价格的AdInfo信息。
destroy()销毁广告。

1.2 WMInterstitialAdRequest

  • com.windmill.sdk.interstitial.WMInterstitialAdRequest
方法名方法介绍
WMInterstitialAdRequest(String placementId, String userId, Map<String, Object> options)构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选,不要超过65个字符, 超过限制后会导致数据计算异常)、options(扩展参数,可传任意)。

1.3 WMInterstitialAdListener

  • com.windmill.sdk.interstitial.WMInterstitialAdListener
方法名方法介绍
onInterstitialAdLoadSuccess(String placementId)广告成功加载。参数说明:placementId(广告位Id)。
onInterstitialAdLoadError(WindMillError error, String placementId)广告加载失败。参数说明:error(报错信息,具体可看其内部code和message)、placementId(报错的广告位Id)。
onInterstitialAdPlayStart(AdInfo adInfo)广告成功展示,媒体可在此记录曝光。参数说明:adInfo(广告信息,具体可看其内部成员变量)。
onInterstitialAdPlayError(WindMillError error, String placementId)广告播放出错。参数说明:error(报错信息,具体可看其内部code和message)、placementId(报错的广告位Id)。
onInterstitialAdPlayEnd(AdInfo adInfo)广告播放结束。参数说明:adInfo(广告信息,具体可看其内部成员变量)。
onInterstitialAdClicked(AdInfo adInfo)广告被点击。参数说明:adInfo(广告信息,具体可看其内部成员变量)。
onInterstitialAdClosed(AdInfo adInfo)广告关闭。参数说明:adInfo(广告信息,具体可看其内部成员变量)。

2. 接入代码示例

2.1 设置监听回调

java
private WMInterstitialAd interstitialAd;

/**
 * PLACEMENT_ID 必填
 * USER_ID 可选
 * OPTIONS 自定义参数 可选
 */
WMInterstitialAdRequest request = new WMInterstitialAdRequest(PLACEMENT_ID, USER_ID, OPTIONS);

interstitialAd = new WMInterstitialAd(this, request);

interstitialAd.setInterstitialAdListener(new WMInterstitialAdListener() {
    @Override
    public void onInterstitialAdLoadSuccess(String placementId) {

    }

    @Override
    public void onInterstitialAdPlayStart(AdInfo adInfo) {

    }

    @Override
    public void onInterstitialAdPlayEnd(AdInfo adInfo) {

    }

    @Override
    public void onInterstitialAdClicked(AdInfo adInfo) {

    }

    @Override
    public void onInterstitialAdClosed(AdInfo adInfo) {

    }

    /**
     * 加载广告错误回调
     * WindMillError 插屏错误内容
     * placementId 广告位
     */
    @Override
    public void onInterstitialAdLoadError(final WindMillError error, final String placementId) {

    }

    /**
     * 播放错误回调
     * WindMillError 插屏错误内容
     * placementId 广告位
     */
    @Override
    public void onInterstitialAdPlayError(final WindMillError error, final String placementId) {

    }
});

2.2 插屏广告加载

java
/**
 *同一个WMInterstitialAd不建议在广告playing中重复load
 *同一个WMInterstitialAd在onInterstitialAdClosed中可以load下一次广告
 */
if (interstitialAd != null) {
    interstitialAd.loadAd();
}

2.3 插屏广告播放

java
/**
 * 收到onInterstitialAdLoadSuccess回调代表广告已ready
 * option 自定义参数(可选)
 */
if (interstitialAd != null && interstitialAd.isReady()) {
    //广告播放
    HashMap option = new HashMap();
        option.put(WMConstants.AD_SCENE_ID, "567");
        option.put(WMConstants.AD_SCENE_DESC, "转盘抽奖");
    interstitialAd.show(this, option);
}

2.4 插屏广告预加载注意事项

  • 需要在平台开启预加载功能。

  • 开启预加载功能后,sdk内部会在广告播放中再次去请求广告,成功后会再次回调onInterstitialAdLoadSuccess。(相当于load一次广告会有两次onInterstitialAdLoadSuccess

  • 开启预加载功能后,要注意全局使用同一个WMInterstitialAd对象。(new注意判null

  • 广告播放时可先判断isReady(),如果ready直接播放,否则可再次调用loadAd()。

java
private WMInterstitialAd mInterstitialAd;//全局对象

    /**
     * 加载广告
     */
    private void loadAd() {

        if (mInterstitialAd == null) {
            mInterstitialAd = new WMInterstitialAd(this, new WMInterstitialAdRequest(placementId, userID, options));
        }

        mInterstitialAd.setInterstitialAdListener(new WMInterstitialAdListener() {
            @Override
            public void onInterstitialAdLoadSuccess(String placementId) {

            }

            @Override
            public void onInterstitialAdPlayStart(AdInfo adInfo) {

            }

            @Override
            public void onInterstitialAdPlayEnd(AdInfo adInfo) {

            }

            @Override
            public void onInterstitialAdClicked(AdInfo adInfo) {

            }

            @Override
            public void onInterstitialAdClosed(AdInfo adInfo) {

            }

            @Override
            public void onInterstitialAdLoadError(WindMillError windMillError, String placementId) {

            }

            @Override
            public void onInterstitialAdPlayError(WindMillError windMillError, String placementId) {

            }
        });

        mInterstitialAd.loadAd();
    }

2.5 插屏广告自动加载回调

/**
 *  后台开启自动加载功能才会收到此回调
 *  不实现该回调监听不影响自动加载功能
 */
interstitialAd.setAutoLoadListener(new AutoAdLoadListener() {
    @Override
    public void onAutoAdLoadSuccess(String placementId) {
        Log.i("Sigmob", "----InterstitialUI--onAutoAdLoadSuccess " + placementId);
    }

    @Override
    public void onAutoAdLoadFail(WindMillError error, String placementId) {
        Log.i("Sigmob", "---InterstitialUI--onAutoAdLoadFail " + placementId);

    }
});