配置预置展位

在基于 mPaaS H5 容器的 H5 页面上配置预置展位。在 H5 页面上预置展位的操作,仅获取展位信息,获取方式分为逐个获取和批量获取两种方式。

除了获取展位信息,您也可以通过调用接口实现展位和广告信息的拦截。

关于此任务

如果您是智能投放组件的新手用户,建议您直接通过该组件的控制台(服务端)动态配置广告展位的 H5 页面。更多服务端的配置信息,查看 创建展位

逐个获取

在 H5 页面使用 getCdpSpaceInfo 可以获得展位信息:

AlipayJSBridge.call('getCdpSpaceInfo', {
  spaceCode: 'space-code1',
  extInfo: {
    tradeNo: '123'
  },
  immediately: false,
  multiCallback: true
}, function (result) {
  console.log(result);
});

其中:

  • spaceCode:展位代码,一般在后台申请。

  • extInfo:扩展信息,用 key/value 的方式。

  • immediately:Bool 值。是否不需要缓存数据直接从服务器拉取。默认为读取缓存,不需要传。

  • multiCallback: Bool 值。调用一次情况下,是否需要处理多次回调场景。

说明

如果 multiCallback 参数传 NO 或者不传,业务仅接受一次结果回调,首次进入页面在有缓存机制时广告不能按照预期展示,第二次进入该页面才能展示广告。若该参数传 YES,业务需要处理智能投放两次回调的场景,第一次回调是缓存数据(有缓存前提下),第二次回调是 RPC 返回的结果。

批量获取

在 H5 页面使用 getCdpSpaceInfos 可获得展位信息:

AlipayJSBridge.call('getCdpSpaceInfos', {
  spaceCodes: ['space-code1', 'space-code2'],
  extInfo: {
    tradeNo: '123'
  },
  immediately: false,
  multiCallback: true
}, function (result) {
  console.log(result);
});
/**
 * Cdp广告服务接口
 *
 */
public abstract class CdpAdvertisementService extends ExternalService {

    /**
     * 初始化所有广告信息
     *
     * @param extInfo  扩展信息
     * @param callBack 回调
     */
    public abstract void initialized(Map<String, String> extInfo, IAdGetSpaceInfoCallBack callBack);

    /**
     * 通过展位 ID 查询展位,异步回调 onSuccess(SpaceInfo spaceInfo)返回查询结果。
     * 若无本地缓存,则回调一次 RPC 查询结果。
     * 若有本地缓存且未到更新时间,则回调一次本地查询结果。
     * 若有本地缓存且已到更新时间,则回调一次本地查询结果,RPC 完毕后再回调一次更新的结果。
     * 仅在 RPC 失败时会回调 onFail()接口。
     *
     * @param spaceCode 展位 ID,需要向投放平台申请
     * @param callback  回调接口
     */
    public abstract void getSpaceInfoByCode(String spaceCode, IAdGetSingleSpaceInfoCallBack callback);

    /**
     * 通过展位 ID 查询展位,异步回调 onSuccess(SpaceInfo spaceInfo) 返回查询结果。
     * 若无本地缓存,则回调一次 RPC 查询结果。
     * 若有本地缓存且未到更新时间,则回调一次本地查询结果。
     * 若有本地缓存且已到更新时间,则回调一次本地查询结果,RPC 完毕后再回调一次更新的结果。
     * 仅在 RPC 失败时会回调 onFail()接口。
     *
     * @param spaceCode   展位 ID,需要向投放平台申请
     * @param extInfo     扩展参数
     * @param immediately 只返回 RPC 结果
     * @param callback    回调接口
     */
    public abstract void getSpaceInfoByCode(String spaceCode, Map<String, String> extInfo, boolean immediately, final IAdGetSingleSpaceInfoCallBack callback);

    /**
     * 通过展位 ID 列表批量查询展位,异步 onSuccess(List<SpaceInfo> adSpaceInfo) 返回查询结果。
     * 若无本地缓存,则回调一次 RPC 查询结果。
     * 若有本地缓存且未到更新时间,则回调一次本地查询结果。
     * 若有本地缓存且已到更新时间,则回调一次本地查询结果,RPC 完毕后再回调一次更新的结果。
     * 仅在 RPC 失败时会回调 onFail(List<String> adSpaceCodes)接口。
     *
     * @param spaceCodeList 展位 ID 列表,需要向投放平台申请
     * @param extInfo       扩展参数
     * @param immediately   只返回 RPC 结果
     * @param callback      回调接口
     */
    public abstract void batchGetSpaceInfoByCode(List<String> spaceCodeList, Map<String, String> extInfo, boolean immediately, final IAdGetSpaceInfoCallBack callback);

    /**
     * TODO 预留 H5 接口
     * 查询并展示广告,目前仅供 AdH5Plugin 调用
     *
     * @param activity   当前页面
     * @param parentView 父控件
     * @param url        地址
     * @param h5Param    参数
     */
    public abstract void checkAndShowAdInH5(final Activity activity, ViewGroup parentView, String url, String h5Param);

    /**
     * 移除指定 spaceCode 的广告 view
     *
     * @param activity  需要移除公告的页面
     * @param spaceCode 广告 ID
     */
    public abstract void removeAdvertisement(Activity activity, String spaceCode);

    /**
     * 获取 action 执行器,没有设置则返回 null
     *
     * @return action 执行器
     */
    public abstract ActionExecutor getActionExecutor();

    /**
     * 设置 action 执行器
     *
     * @param executor action 执行器
     */
    public abstract void setActionExecutor(ActionExecutor executor);


    /**
     * 设置用户 ID
     *
     * @param userId 用户 ID
     */
    public abstract void setUserId(String userId);

    /**
     * 获取用户 ID
     *
     * @return 用户 ID
     */
    public abstract String getUserId();

    /**
     * 获取广告展位的回调类
     */
    public interface IAdGetSpaceInfoCallBack {
        /**
         * 获取展位信息成功
         *
         * @param adSpaceInfo 展位列表
         */
        void onSuccess(List<SpaceInfo> adSpaceInfo);

        /**
         * 获取展位信息失败
         *
         * @param adSpaceCodes 展位请求code列表
         */
        void onFail(List<String> adSpaceCodes);
    }

    /**
     * 获取单个展位的回调类
     */
    public interface IAdGetSingleSpaceInfoCallBack {
        /**
         * 获取展位信息成功
         *
         * @param spaceInfo 展位信息
         */
        void onSuccess(SpaceInfo spaceInfo);

        /**
         * 失败
         */
        void onFail();
    }
}

ActionExecutor

ActionExecutor(Action 处理器)实现展位和广告信息的拦截。拦截时,客户端将不展示相应展位以及广告内容;不拦截时,则展示展位以及广告内容。

/**
 * Action 处理器
 *
 */
public interface ActionExecutor {

    /**
     * 是否拦截 Action
     * @param spaceInfo 展位信息
     * @param spaceObjectInfo 广告信息
     * @param url action url
     * @return true表示拦截该 action,false 表示不拦截
     */
    boolean interceptAction(final SpaceInfo spaceInfo, final SpaceObjectInfo spaceObjectInfo, final String url);

    /**
     * 执行Action
     *
     * @param spaceInfo 展位信息
     * @param spaceObjectInfo 广告信息
     * @param url action url
     * @return 1 表示执行成功,其他值表示异常
     */
    int executeAction(final SpaceInfo spaceInfo, final SpaceObjectInfo spaceObjectInfo, final String url);
}