Skip to content

sud.createBannerAd ​

创建 banner 广告组件。每次调用该方法创建 banner 广告都会返回一个全新的实例。创建后自动加载,加载成功通过 BannerAd.onLoad() 通知,加载或展示失败通过 BannerAd.onError() 通知。

typescript
createBannerAd(params: {
    adUnitId: string;
    style: {
        left: number;
        top: number;
        width: number;
        height: number;
    };
    /** 广告自动刷新的间隔时间,单位为秒,必须大于等于 30(预留参数,暂未生效) */
    adIntervals?: number;
}): BannerAd;

Banner 自动加载受请求频次限制(现状 10 秒内重复请求会触发),触发限制时通过 BannerAd.onError() 返回错误码(errCode)和错误信息(errMsg)。

参数 ​

Object object ​

属性类型默认值必填说明
adUnitIdstring是SUD OpenPaaS 控制台配置的广告单元 ID
styleObject是banner 广告最大可用容器的位置与尺寸
adIntervalsnumber否广告自动刷新的间隔时间,单位为秒,参数值必须大于等于 30(预留参数,暂未生效)

object.style 的结构 ​

属性类型默认值必填说明
leftnumber是最大容器左上角横坐标,逻辑像素
topnumber是最大容器左上角纵坐标,逻辑像素
widthnumber是最大可用宽度,必须大于 0
heightnumber是最大可用高度,必须大于 0

width / height 表示最大可用区域,广告在区域内水平居中、顶部对齐,不拉伸、不裁剪;left / top 表示该区域的左上角坐标。

尺寸单位为逻辑像素(Android 为 dp,iOS 为 pt)。容器尺寸与 pixelRatio 可通过 sud.getContainerInfo 查询;直接使用逻辑宽高设置 banner 广告区域,无需乘除 pixelRatio,BannerAd.onResize() 提供的实际宽高同样无需再换算。

返回值 ​

BannerAd

banner 广告组件。

style.width / style.height 表示最大可用区域,style.realWidth / style.realHeight 是只读的实际展示尺寸,首次成功展示前为 0。收到 BannerAd.onResize() 通知时可读取对应的实际尺寸,最大可用宽高保持不变。

示例代码 ​

进入场景时创建 banner 广告,收到 BannerAd.onLoad() 通知后展示。下面以全屏游戏为例,通过 sud.getContainerInfo 在顶部预留与容器等宽、最高 100 逻辑像素的广告区域;游戏 UI 应避开该区域。分屏或嵌入式游戏应按实际布局确定预留区域。

javascript
const { containerWidth, containerHeight } = sud.getContainerInfo();

// adIntervals 为可选参数,暂未生效
const adIntervals = 30;

const bannerAd = sud.createBannerAd({
    adUnitId: 'adunit-xxxxxxxx',
    style: {
        left: 0,
        top: 0,
        // 直接使用逻辑宽高设置预留区域。
        width: Math.floor(containerWidth),
        height: Math.min(100, Math.floor(containerHeight)),
    },
    adIntervals,
});

let disposed = false;
let showRequested = false;

function onLoad() {
    if (disposed || showRequested) return;
    showRequested = true;
    bannerAd.show().catch(onError);
}

function onError(err) {
    if (disposed) return;
    console.error('Banner 广告失败', err);
    onBannerSceneExit();
}

function onResize({ width, height }) {
    if (disposed) return;
    // 对应 bannerAd.style.realWidth / realHeight,可用于调整周围的游戏 UI。
    console.log('Banner 实际尺寸', width, height);
}

function onBannerSceneExit() {
    if (disposed) return;
    disposed = true;
    bannerAd.offLoad(onLoad);
    bannerAd.offError(onError);
    bannerAd.offResize(onResize);
    bannerAd.destroy();
}

bannerAd.onLoad(onLoad);
bannerAd.onError(onError);
bannerAd.onResize(onResize);

预留区域与容器等宽,广告在区域内水平居中、顶部对齐,因此视觉上即为居中展示。将 onBannerSceneExit() 绑定到场景退出时机;即使广告仍在加载也应调用,销毁后迟到的加载回调不会再调用 show()。