二、获取微信小程序广告细分数据(publisher_adunit_general)

需要向相应接口调用地址增加以下GET请求参数:

参数 是否必须 说明
page 返回第几页数据
page_size 当页返回数据条数
start_date 获取数据的起始日期 yyyy-mm-dd
end_date 获取数据的结束时间 yyyy-mm-dd
ad_slot 广告位类型名称
ad_unit_id 广告位id

请注意: 当需要获取全部广告位的细分数据时,无需传递广告位类型名称及广告位id;当需要获取某类型广告位的细分数据时,仅需传递广告位类型名称;当需要获取某广告位id的细分数据时,仅需传递广告位id。


返回参数说明(publisher_adunit_general)

参数 说明
err_msg 返回错误信息
ret 错误码
list: ad_unit_id 广告位id
list: ad_unit_name 广告位名称
list: stat_item: ad_slot 广告位类型名称
list: stat_item :date 数据日期
list: stat_item :req_succ_count 拉取量
list: stat_item :exposure_count 曝光量
list: stat_item: exposure_rate 曝光率
list: stat_item :click_count 点击量
list: stat_item :click_rate 点击率
list: stat_item :income 收入
list: stat_item :ecpm 广告千次曝光收益(分)
total_num 请求返回总数


返回数据包示例(publisher_adunit_general)

{
    "base_resp":{
        "err_msg":"ok",
        "ret":0
    },
    "list":[
        {
            "ad_unit_id":"adunit-9cedd8514XXXX",
            "ad_unit_name":"激励视频长广告",
            "stat_item":{
                "ad_slot":"SLOT_ID_WEAPP_REWARD_VIDEO",
                "date":"2020-04-10",
                "req_succ_count":138250,
                "exposure_count":74771,
                "exposure_rate":0.54083906,
                "click_count":2242,
                "click_rate":0.029984887,
                "income":93883,
                "ecpm":6.790813743
            }
        }
    ],
    "total_num":1
}


一、获取微信小程序广告汇总数据(publisher_adpos_general)

需要向相应接口调用地址增加以下GET请求参数:

参数 是否必须 说明
page 返回第几页数据
page_size 当页返回数据条数
start_date 获取数据的开始时间 yyyy-mm-dd
end_date 获取数据的结束时间 yyyy-mm-dd
ad_slot 广告位类型名称

请注意: 如果不传递广告位类型名称,将默认返回全部类型广告位的数据。


返回参数说明(publisher_adpos_general)

参数 说明
err_msg 返回错误信息
ret 错误码
list: slot_id 广告位类型id
list: ad_slot 广告位类型名称
list: date 日期
list: req_succ_count 拉取量
list: exposure_count 曝光量
list: exposure_rate 曝光率
list: click_count 点击量
list: click_rate 点击率
list: income 收入(分)
list: ecpm 广告千次曝光收益(分)
summary: req_succ_count 总拉取量
summary: exposure_count 总曝光量
summary: exposure_rate 总曝光率
summary: click_count 总点击量
summary: click_rate 总点击率
summary: income 总收入(分)
summary: ecpm 广告千次曝光收益(分)
total_num list返回总条数


返回数据包示例(publisher_adpos_general)

{
    "base_resp":{
        "err_msg":"ok",
        "ret":0
    },
    "list":[
        {
            "slot_id":3030046789020061,
            "ad_slot":"SLOT_ID_WEAPP_INTERSTITIAL",
            "date":"2020-04-13",
            "req_succ_count":443610,
            "exposure_count":181814,
            "exposure_rate":0.409850995,
            "click_count":10095,
            "click_rate":0.055523777,
            "income":52175,
            "ecpm":286.969100289
        }
    ],
    "summary":{
        "req_succ_count":4406394,
        "exposure_count":1797225,
        "exposure_rate":0.407867522,
        "click_count":100167,
        "click_rate":0.055734257,
        "income":578003,
        "ecpm":321.608591022
    },
    "total_num":1
}


广告预加载接口

基础库 2.14.1 开始支持,低版本需做兼容处理

在微信小程序环境下,支持通过调用wx.preloadAd接口,提前加载广告数据,再后续创建对应广告标签ad,ad-custom时,会自动使用预加载的广告数据,省去创建广告标签时再次拉取广告的耗时。

预加载示例

  wx.preloadAd([{
      unitId: 'adunit-XXX', // 原生模板广告广告单元
      type: 'custom' // 原生模板广告
    },
    {
      unitId: 'adunit-XXX', // banner广告广告单元
      type: 'banner' // banner广告
    },
    {
      unitId: 'adunit-XXX', // 前贴广告广告单元
      type: 'videoPatch' // 视频前贴广告
    },
    {
      unitId: 'adunit-XXX', // 视频广告广告单元
      type: 'video' // 视频广告
    }
  ])

wx.preloadAd(Array object)

object 参数

属性 类型 默认值 必填 说明
unitId string 广告单元id,可在微信小程序管理后台的流量主模块新建
type string 广告单元所属广告位类型
custom 原生模板广告
banner banner广告
videoPatch 视频前贴广告
video 视频广告

注意事项

1、预加载是否成功对开发者无感知,广告使用方式同无预加载一致即可。

2、广告单元id和广告单元所属广告位类型需要匹配成功,否则会导致无法正常使用预加载数据。

3、在合适的场景使用预加载接口(如pageA调用预加载,pageB调用广告展示,pageA跳转pageB),留充足的时间间隔给到接口调用和广告标签创建才能体现预加载的优势。

4、如果在进入首页就有需要展示广告,且后续广告无新增,刷新等逻辑,无需调用预加载。

5、如果在进入首页就有需要展示广告,后续有新增,刷新逻辑,可在app.js中调用预加载接口。

6、广告单元预加载后,会带来MP后台广告数据的拉取量增长,可能出现曝光率下降现象。建议开发者关注曝光量绝对值变化规律。

原生模板广告

微信小程序广告流量主操作指引:文档地址
开发者可以使用 ad-custom 组件创建 原生模板 广告组件,原生模板 广告组件在创建后会自动拉取广告数据并显示。

广告尺寸设置

原生模板 广告不允许直接设置样式属性,默认宽度为100%(width: 100%),高度会自动等比例计算,因此开发者可以设置广告外层组件的宽度调整广告的尺寸。 广告外层组件的宽度和具体模板相关,具体可以参考模板编辑器文档。

/* 外层组件的宽度可设置成100%或具体数值 */
.adContainer {
  width: 100%;
}
<view class="adContainer">
  <ad-custom unit-id="xxxx"></ad-custom>
</view>

广告事件监听

原生模板 广告在创建后会自动拉取广告。开发者可以通过 ad-custom 组件的 onloadonerror 事件监听广告拉取成功或失败,同时可通过onclose事件监听广告关闭。

<view class="adContainer">
  <ad-custom unit-id="xxxx" bindload="adLoad" binderror="adError" bindclose="adClose"></ad-custom>
</view>
Page({
  adLoad() {
    console.log('原生模板广告加载成功')
  },
  adError(err) {
    console.log('原生模板广告加载失败', err)
  },
  adClose() {
    console.log('原生模板广告关闭')
  },
})

广告定时刷新

开发者可以在创建 原生模板 广告时传入 ad-intervals 参数实现广告的定时刷新,ad-intervals 参数为数字类型,单位为秒。注意:自动刷新的间隔不能低于30秒,因此 ad-intervals 的参数值必须大于或等于30。

<view class="adContainer">
  <ad-custom unit-id="xxxx" ad-intervals="30"></ad-custom>
</view>

监听广告隐藏

  • 矩阵格子广告触发型特殊说明: 用户在点击右上角关闭按钮时,广告将通过控制 元素的样式 display: none 使其隐藏。 开发者可通过 ad-custom 组件的 onhide 事件监听隐藏事件,在必要时机通过改些 display 样式使广告重新展示。
<ad-custom unit-id="xxxx" bindhide="adHide"></ad-custom>

Grid 广告

微信小程序广告流量主操作指引:文档地址
开发者可以使用 ad 组件创建 Grid 广告组件,Grid 广告组件在创建后会自动拉取广告数据并显示。

广告尺寸设置

Grid 广告不允许直接设置样式属性,默认宽度为100%(width: 100%),高度会自动等比例计算,因此开发者可以设置广告外层组件的宽度来调整广告的尺寸。格子广告有最小尺寸限制,5个格子的形态最小宽度为331px,8个格子的形态最小宽度为294px。

/* 外层组件的宽度可设置成100%或具体数值 */
.adContainer {
  width: 100%;
}
<view class="adContainer">
  <ad unit-id="xxxx" ad-type="grid" ad-theme="white" grid-count="5"></ad>
</view>

广告事件监听

Grid 广告在创建后会自动拉取广告。开发者可以通过 ad 组件的 onloadonerror 事件监听广告拉取成功或失败,可以通过 onclose 事件监听广告被关闭。

<view class="adContainer">
  <ad unit-id="xxxx" ad-type="grid" ad-theme="white" grid-count="5" bindload="adLoad" binderror="adError" bindclose="adClose"></ad>
</view>
Page({
  adLoad() {
    console.log('Grid 广告加载成功')
  },
  adError(err) {
    console.log('Grid 广告加载失败', err)
  },
  adClose() {
    console.log('Grid 广告关闭')
  }
})

广告主题样式设置

微信小程序视频广告组件提供黑、白两种主题样式,开发者可以在创建视频广告时传入ad-theme参数实现主题样式选择,ad-theme参数为字符串类型,参数值可选whiteblack

<view class="adContainer">
  <ad unit-id="xxxx" ad-type="grid" ad-theme="white"></ad>
</view>
<view class="adContainer">
  <ad unit-id="xxxx" ad-type="grid" ad-theme="black"></ad>
</view>

广告格子个数设置

微信小程序视频广告组件提供黑、白两种主题样式,开发者可以在创建视频广告时传入grid-count参数实现格子个数选择,grid-count参数为数字类型,参数值可选58

<view class="adContainer">
  <ad unit-id="xxxx" ad-type="grid" grid-count="5"></ad>
</view>
<view class="adContainer">
  <ad unit-id="xxxx" ad-type="grid" grid-count="8"></ad>
</view>

视频前贴广告

微信小程序广告流量主操作指引:文档地址
开发者可以在 video 组件中添加属性配置,创建微信小程序视频前贴广告组件,视频广告组件在创建后会自动拉取广告数据,视频播放前展示广告。

广告样式

展示样式在开发者所设置的video组件中,以16:9的比例,垂直或者水平居中

广告创建

在video 组件中添加了以下广告相关的属性配置,设置ad-unit-id后可以展示对应广告

属性 类型 默认值 必填 说明
ad-unit-id string 广告单元id,可在微信小程序管理后台的流量主模块新建
bindadload eventhandle 广告加载成功的回调
bindaderror eventhandle 广告加载失败的回调,返回码同ad组件
bindadclose eventhandle 广告关闭的回调
bindadplay eventhandle 广告开始,结束播放的回调 event.detail = {type: ‘begin/end’}

添加广告单元,绑定广告事件

<video 
  class="xxx"
  src="xxx"
  bindadplay="onAdplay"
  bindadload="onAdload"
  bindadclose="onAdclose"
  bindaderror="onAdError"
  ad-unit-id="xxx"
>
</video>

监听广告事件

Page({
  onAdplay(e) {
    console.log('onAdplay', e)
  },
  onAdload(e){
    console.log('onAdload', e)
  },
  onAdclose(e) {
    console.log('onAdclose', e)
  },
  onAdError(e) {
    console.log('onAdError', e)
  },
})

广告预加载

开发者可以调用 wx.preloadVideoAd 的方式进行广告的预加载


const adUnitId1 = 'xxx'
const adUnitId2 = 'xxx'
wx.preloadVideoAd([adUnitId1, adUnitId2])

错误码

错误码是通过bindaderror回调获取到的错误信息,前贴广告再普通广告组件ad错误码基础上新增了以下错误码。

代码 异常情况 解决方案
3001 命中频控策略 按照没有广告处理
3002 命中频控策略 按照没有广告处理
3003 命中频控策略 按照没有广告处理
3004 命中频控策略 按照没有广告处理

注意事项

1、支持视频预加载能力:文档地址

2、仅支持同层渲染模式下的video组件。

3、开发者可监听bindadplay事件获取广告播放状态,做出相应处理。

4、ad-unit-id不支持异步设置,只支持设置在wxml或者js文件的data属性里,通过setData设置的无效。

5、全屏模式下不展示视频前贴广告。

微信小程序视频广告

微信小程序广告流量主操作指引:文档地址
开发者可以使用 ad 组件创建微信小程序视频广告组件,视频广告组件在创建后会自动拉取广告数据并显示。暂时仅支持在同层渲染模式下使用,且不支持嵌套使用。

广告尺寸设置

微信小程序视频广告不允许直接设置样式属性,默认宽度为100%(width: 100%),高度会自动等比例计算,因此开发者可以设置广告外层组件的宽度调整广告的尺寸。 广告外层组件的宽度不允许小于屏幕宽度90%,当宽度小于屏幕宽度的90%时,视频广告组件的宽度会强制调整为屏幕宽度的90%。

/* 外层组件的宽度可设置成100%或具体数值 */
.adContainer {
  width: 100%;
}
<view class="adContainer">
  <ad unit-id="xxxx" ad-type="video" ad-theme="white"></ad>
</view>

广告主题样式设置

微信小程序视频广告组件提供黑、白两种主题样式,开发者可以在创建视频广告时传入ad-theme参数实现主题样式选择,ad-theme参数为字符串类型,参数值可选white, black

<view class="adContainer">
  <ad unit-id="xxxx" ad-type="video" ad-theme="white"></ad>
</view>
<view class="adContainer">
  <ad unit-id="xxxx" ad-type="video" ad-theme="black"></ad>
</view>

广告事件监听

视频广告在创建后会自动拉取广告。开发者可以通过 ad 组件的 onloadonerror 事件监听广告拉取成功或失败,可以通过 onclose 事件监听广告被关闭。

<view class="adContainer">
  <ad unit-id="xxxx" ad-type="video" ad-theme="white" bindload="adLoad" binderror="adError" bindclose="adClose"></ad>
</view>
Page({
  adLoad() {
    console.log('<a href="https://weixin-xiaochengxu-kaifa.yuannext.com">微信小程序</a>视频广告加载成功')
  },
  adError(err) {
    console.log('微信小程序视频广告加载失败', err)
  },
  adClose() {
    console.log('微信小程序视频广告关闭')
  }
})

广告定时刷新

微信小程序视频广告组件不适用于定时刷新参数ad-intervals

插屏广告

插屏广告组件是由客户端原生的图片、文本、视频控件组成的,层级最高,会覆盖在普通组件上。

开发者可以调用 wx.createInterstitialAd 创建插屏广告组件。每调用一次该方法,返回的都是一个全新实例,该实例仅对当前页面有效,不允许跨页面使用。

广告创建

插屏广告组件默认是隐藏的,因此可以提前创建,以提前初始化组件。开发者可以在微信小程序页面的 onLoad 事件回调中创建广告实例,并在该页面的生命周期内重复调用该广告实例。

let interstitialAd = null
Page({
  onLoad() {
    if(wx.createInterstitialAd){
      interstitialAd = wx.createInterstitialAd({ adUnitId: 'xxxx' })
      interstitialAd.onLoad(() => {
        console.log('onLoad event emit')
      })
      interstitialAd.onError((err) => {
        console.log('onError event emit', err)
      })
      interstitialAd.onClose((res) => {
        console.log('onClose event emit', res)
      })
    }
  }
})

显示/隐藏

插屏广告组件默认是隐藏的,开发者需要调用 InterstitialAd.show() 进行显示。如果广告拉取失败或触发频率限制,InterstitialAd.show() 方法会返回一个被拒绝的 Promise,开发者可自行监听错误信息。常见异常错误参考文档

interstitialAd.show().catch((err) => {
  console.error(err)
})

用户可以主动关闭插屏广告。开发者不可控制插屏广告组件的隐藏。

广告拉取成功与失败

插屏广告组件是自动拉取广告并进行更新的。在组件创建后会拉取一次广告,用户关闭广告后会去拉取下一条广告。

如果拉取成功,通过 InterstitialAd.onLoad() 注册的回调函数会执行,回调函数没有参数传递。

interstitialAd.onLoad(() => {
  console.log('插屏 广告加载成功')
})

如果拉取失败,通过 InterstitialAd.onError() 注册的回调函数会执行,回调函数的参数是一个包含错误信息的对象。常见异常错误参考文档

interstitialAd.onError(err => {
  console.log(err)
})

监听用户关闭广告

如果广告被关闭,通过 InterstitialAd.onClose() 注册的回调函数会执行,回调函数没有参数传递。

interstitialAd.onClose(res => {
    console.log('插屏 广告关闭')
})

注意事项

多次调用 InterstitialAd.onLoad()、InterstitialAd.onError()、InterstitialAd.onClose() 等方法监听广告事件会产生多次事件回调,建议在创建广告后监听一次即可,或者先取消原有的监听事件再重新监听。

在插屏广告展示过程中如果快速切换页面,可能会出现插屏广告展示在非调用页面的情况,如有需要请在页面切换完成后进行插屏广告展示。

激励视频广告

微信小程序广告流量主操作指引:文档地址
激励视频广告组件是由客户端原生的图片、文本、视频控件组成的,层级最高,会覆盖在普通组件上。

开发者可以调用 wx.createRewardedVideoAd 创建激励视频广告组件。该方法返回的是一个单例,该实例仅对当前页面有效,不允许跨页面使用。

广告创建

激励视频广告组件默认是隐藏的,因此可以提前创建,以提前初始化组件。开发者可以在微信小程序页面的 onLoad 事件回调中创建广告实例,并在该页面的生命周期内重复调用该广告实例。

let rewardedVideoAd = null
Page({
  onLoad() {
    if(wx.createRewardedVideoAd){
      rewardedVideoAd = wx.createRewardedVideoAd({ adUnitId: 'xxxx' })
      rewardedVideoAd.onLoad(() => {
        console.log('onLoad event emit')
      })
      rewardedVideoAd.onError((err) => {
        console.log('onError event emit', err)
      })
      rewardedVideoAd.onClose((res) => {
        console.log('onClose event emit', res)
      })
    }
  }
})

为避免滥用广告资源,目前每个用户每天可观看激励式视频广告的次数有限,建议展示广告按钮前先判断广告是否拉取成功。

显示/隐藏

激励视频广告组件默认是隐藏的,在用户主动触发广告后,开发者需要调用 RewardedVideoAd.show() 进行显示。

rewardedVideoAd.show() 

只有在用户点击激励视频广告组件上的 关闭广告 按钮时,广告才会关闭。开发者不可控制激励视频广告组件的隐藏。

广告拉取成功与失败

激励视频广告组件是自动拉取广告并进行更新的。在组件创建后会拉取一次广告,用户点击 关闭广告 后会去拉取下一条广告。

如果拉取成功,通过 RewardedVideoAd.onLoad() 注册的回调函数会执行,RewardedVideoAd.show() 返回的 Promise 也会是一个 resolved Promise。两者的回调函数中都没有参数传递。

rewardedVideoAd.onLoad(() => {
  console.log('激励视频 广告加载成功')
})

rewardedVideoAd.show()
.then(() => console.log('激励视频 广告显示'))

如果拉取失败,通过 RewardedVideoAd.onError() 注册的回调函数会执行,回调函数的参数是一个包含错误信息的对象。常见异常错误参考文档

rewardedVideoAd.onError(err => {
  console.log(err)
})

RewardedVideoAd.show() 返回的 Promise 也会是一个 rejected Promise。

rewardedVideoAd.show()
.catch(err => console.log(err))

拉取失败,重新拉取

如果组件的某次自动拉取失败,那么之后调用的 show() 将会被 reject。此时可以调用 RewardedVideoAd.load() 手动重新拉取广告。

rewardedVideoAd.show()
.catch(() => {
    rewardedVideoAd.load()
    .then(() => rewardedVideoAd.show())
    .catch(err => {
      console.log('激励视频 广告显示失败')
    })
})

如果组件的自动拉取是成功的,那么调用 load() 方法会直接返回一个 resolved Promise,而不会去拉取广告。

rewardedVideoAd.load()
.then(() => rewardedVideoAd.show())

监听用户关闭广告

只有在用户点击激励视频广告组件上的 关闭广告 按钮时,广告才会关闭。这个事件可以通过 RewardedVideoAd.onClose() 监听。

RewardedVideoAd.onClose() 的回调函数会传入一个参数 res,res.isEnded 描述广告被关闭时的状态。

属性 类型 说明
isEnded boolean 视频是否是在用户完整观看的情况下被关闭的,true 表示用户是在视频播放完以后关闭的视频,false 表示用户在视频播放过程中关闭了视频

开发者需要根据 res.isEnded 判断是否视频是否播放结束、可以向用户下发奖励。

rewardedVideoAd.onClose(res => {
    // 用户点击了【关闭广告】按钮
    if (res && res.isEnded) {
      // 正常播放结束,可以下发游戏奖励
    } else {
      // 播放中途退出,不下发游戏奖励
    }
})

注意事项

多次调用 RewardedVideoAd.onLoad()、RewardedVideoAd.onError()、RewardedVideoAd.onClose() 等方法监听广告事件会产生多次事件回调,建议在创建广告后监听一次即可,或者先取消原有的监听事件再重新监听。

Banner 广告

微信小程序广告流量主操作指引:文档地址
开发者可以使用 ad 组件创建 Banner 广告组件,Banner 广告组件在创建后会自动拉取广告数据并显示。

广告尺寸设置

Banner 广告不允许直接设置样式属性,默认宽度为100%(width: 100%),高度会自动等比例计算,因此开发者可以设置广告外层组件的宽度调整广告的尺寸。 广告外层组件的宽度不允许小于300px,当宽度小于300px时,Banner 广告的宽度会强制调整为300px。

/* 外层组件的宽度可设置成100%或具体数值 */
.adContainer {
  width: 100%;
}
<view class="adContainer">
  <ad unit-id="xxxx"></ad>
</view>

广告事件监听

Banner 广告在创建后会自动拉取广告。开发者可以通过 ad 组件的 onloadonerror 事件监听广告拉取成功或失败,可以通过 onclose 事件监听广告被关闭。

<view class="adContainer">
  <ad unit-id="xxxx" bindload="adLoad" binderror="adError" bindclose="adClose"></ad>
</view>
Page({
  adLoad() {
    console.log('Banner 广告加载成功')
  },
  adError(err) {
    console.log('Banner 广告加载失败', err)
  },
  adClose() {
    console.log('Banner 广告关闭')
  }
})

广告定时刷新

开发者可以在创建 Banner 广告时传入 ad-intervals 参数实现广告的定时刷新,ad-intervals 参数为数字类型,单位为秒。注意:自动刷新的间隔不能低于30秒,因此 ad-intervals 的参数值必须大于或等于30。

<view class="adContainer">
  <ad unit-id="xxxx" ad-intervals="30"></ad>
</view>