更新记录

1.2.8(2026-07-15) 下载此版本

新增 sdk.loadAd 统一加载 API,非开屏广告推荐 loadAd + :ad-data 传参

1.2.6(2026-07-07) 下载此版本

开屏广告新增 adLayerClose 事件,支持在广告层真正关闭前处理业务逻辑

1.2.5(2026-07-03) 下载此版本

优化开屏

查看更多

平台兼容性

uni-app(4.85)

Vue2 Vue3 Vue3插件版本 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- 1.0.0 - - - - - - -
微信小程序 微信小程序插件版本 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
3.15.0 1.0.0 - - - - - - - - - - -

WL-Track 广告组件使用文档

一个简单易用的 uniapp 广告组件库,按广告类型提供独立组件标签,自动拉取数据、渲染与埋点。

组件列表

标签 广告类型 说明
wl-splash-ad 开屏 图片开屏;视频素材自动走插屏样式
wl-banner-ad Banner 单图横幅或视频横幅
wl-carousel-ad 轮播 多图轮播

🚀 快速对接

一、初始化埋点 SDK(必需)

App.vue 中初始化平台对应的埋点 SDK,并挂载到全局:

<!-- App.vue -->
<script setup lang="ts">

// #ifdef MP-WEIXIN
import { wlydTrack } from '@wlydfe/track-js'

// 初始化微信小程序埋点
wlydTrack.init({
  isProd: false,                         // 是否生产环境
  debug: true,                           // 是否开启调试
  autoTrack: true,                       // 是否自动埋点
  trackerType: 'quick_tracking_wx',      // 埋点类型
  config: {
    project: 'your_project_id',          // qt应用key
    serverUrl: 'https://your-server-url.com',  // 收数服务器地址
  },
})
// #endif

// #ifdef APP-PLUS
import * as QtAnalytics from '@/uni_modules/QT-Analytics'

const platform = uni.getSystemInfoSync().platform

// 根据不同平台初始化
if (platform === 'android') {
  QtAnalytics.init()
} else if (platform === 'ios') {
  QtAnalytics.setCustomDomain('https://your-server-url.com')
  QtAnalytics.initWithAppkey('your_app_key')
  QtAnalytics.setLogEnabled(true)
} else if (platform === 'harmony') {
  QtAnalytics.init()
}
// #endif

</script>

二、初始化广告 SDK(必需)

在完成埋点 SDK 初始化后,初始化广告 SDK:

<!-- App.vue(续) -->
<script setup lang="ts">
import { initGlobalAdSDK } from '@/uni_modules/wl-track/utils/ad-sdk'

onLaunch(() => {
  // 初始化广告 SDK
  initGlobalAdSDK({
    app_key: 'your_app_key',             // 替换为实际的应用Key(必填)
    // webviewPath: '/subs/common/web-view/index?url=${jumpAdUrl}',
    // #ifdef MP-WEIXIN
    wlydTrack: wlydTrack,            // 微信小程序埋点实例(必填)
    // #endif
    // #ifdef APP-PLUS
    QtAnalytics: QtAnalytics,        // APP 埋点实例(必填)
    // #endif
  })
})
</script>

⚠️ 重要提示

  • 必须先初始化埋点 SDK,再初始化广告 SDK
  • 微信小程序需要安装 @wlydfe/track-js 依赖
  • APP 需要集成 QT-Analytics 插件
  • 微信小程序必须传入 wlydTrack 参数,否则会报错
  • APP 必须传入 QtAnalytics 参数,否则会报错

webview 承接页(可选)

广告点击后默认打开插件内置承接页。业务方使用自己的 webview 页时,在初始化传入 webviewPath

// 业务自定义模板(含占位符)
initGlobalAdSDK({
  appKey: 'your_app_key',
  webviewPath: '/subs/common/web-view/index?url=${jumpAdUrl}',
})

// 不传 webviewPath:使用插件默认页,自动拼接 ?url=
initGlobalAdSDK({ appKey: 'your_app_key' })

业务模板中的 ${jumpAdUrl} / ${url} 会替换为编码后的落地链接;未配置时使用插件默认承接页并拼接 ?url=

微信小程序:承接页建议注册为分包(见 pages_init.jsonsubPackages),避免主包 uni_modules 页面被「代码依赖分析」忽略。跳转路径仍为 /uni_modules/wl-track/pages/landing/index

三、使用组件

方式一:Easycom 自动导入(推荐,已配置)

项目已在 pages.config.ts 中配置 easycom,所有页面可直接使用各广告组件,无需 import:

// pages.config.ts
easycom: {
  custom: {
    '^wl-(splash|banner|carousel)-ad$':
      '@/uni_modules/wl-track/components/wl-$1-ad.vue',
  },
}

直接在页面中使用(按广告位类型选择对应标签):

<template>
  <view class="page">
    <!-- 开屏广告 -->
    <wl-splash-ad ad-slot-key="549" />

    <!-- Banner 广告 -->
    <wl-banner-ad ad-slot-key="550" />

    <!-- 轮播广告 -->
    <wl-carousel-ad ad-slot-key="551" />
  </view>
</template>

💡 注意:每种标签对应一种广告类型,请根据广告位类型选择正确组件;类型不匹配时会报错提示。

组件会自动:

  • ✅ 获取广告数据
  • ✅ 渲染对应类型的广告
  • ✅ 处理加载/错误状态
  • ✅ 上报埋点数据(请求、响应、曝光、点击、播放等)

💡 埋点会根据平台自动使用对应的 SDK(微信小程序用 wlydTrack,APP 用 QtAnalytics)


📱 使用示例

基础用法

开屏广告

<template>
  <wl-splash-ad
    ad-slot-key="549"
    :countdown-seconds="5"
  />
</template>

🎯 常用配置

事件监听

<template>
  <wl-splash-ad
    ad-slot-key="549"
    @ad-layer-close="onAdLayerClose"
    @close="onClose"
    @click="onClick"
    @error="onError"
  />
</template>

<script setup lang="ts">
const onAdLayerClose = (type: 'skip' | 'click' | 'auto') => console.log('广告层即将关闭', type)
const onClose = (type: 'skip' | 'click' | 'auto') => console.log('广告关闭', type)
const onClick = (adData) => console.log('广告点击', adData)
const onError = (error) => console.error('加载失败', error)
</script>

🔧 组件参数

参数 类型 必填 默认值 说明
ad-slot-key string - 广告位标识
name string - 预取缓存唯一标识;同一广告位多次预取时用于区分
auto-fetch boolean true 是否组件内自动请求;页面/业务侧先请求时传 false
ad-data AdData - 业务侧已通过 loadAd 等方式获取的广告数据(配合 auto-fetch=falsev-if 使用)
ad-data-json string - 广告数据 JSON 字符串(小程序端 :ad-data 对象传参异常时的备选)
image-url string - Banner图片直传地址(针对图片横幅必填)
countdown-seconds number 5 倒计时秒数(开屏广告)
auto-show boolean true 是否自动展示(开屏广告)
height number \| string - 轮播高度(rpx,仅轮播组件)

开屏广告(wl-splash-ad)overlay 样式

参数 类型 默认值 说明
skip-button-style CSSProperties {} 跳过按钮样式
ad-tag-style CSSProperties {} 广告标样式

默认布局:左上角一行 [广告] [跳过 5s](两个独立元素)。如需改位置,分别给两个 style 传入 topleftrightbottom 即可,组件会自动清理冲突边(无需手写 auto)。

<!-- 默认 -->
<wl-splash-ad ad-slot-key="549" />

<!-- 自定义:跳过放右上,广告标放左下 -->
<wl-splash-ad
  ad-slot-key="549"
  :skip-button-style="{ top: '80px', right: '40rpx' }"
  :ad-tag-style="{ bottom: '40rpx', left: '40rpx' }"
/>

📡 组件事件

各广告组件均支持以下事件,可用于监听广告生命周期并在业务侧做相应处理:

事件 回调参数 说明
@close type: 'skip' \| 'click' \| 'auto' 广告关闭时触发(跳过、倒计时结束、点击跳转后关闭等)
@click adData 用户点击广告素材时触发
@load adData 广告素材加载/渲染成功时触发
@error error 请求失败、数据解析失败或素材加载失败时触发
@request params 发起广告请求前触发,params 为请求参数(含 adSlotKey
@response adData \| null 广告请求返回时触发;失败时为 null
@play adData 视频开始播放时触发(视频类素材)
@ended adData 视频播放结束时触发(视频类素材)

开屏特有:

事件 回调参数 说明
@adLayerClose type: 'skip' \| 'click' \| 'auto' 广告层即将收起时触发,早于 @close,便于业务在真正关闭前处理逻辑

预取模式(所有广告组件均支持):

事件 回调参数 说明
@prefetchConsumed { adSlotKey, name? } 广告展示后消费预取缓存时触发

开屏关闭事件顺序:

场景 事件顺序
跳过 adLayerClose(skip)close(skip)
倒计时结束 adLayerClose(auto)close(auto)
点击广告(有 WebView) clickadLayerClose(click)close(click)

轮播特有:

事件 回调参数 说明
@change current 轮播切换时触发,current 为当前页索引(从 0 开始)
<wl-splash-ad
  ad-slot-key="549"
  @ad-layer-close="onAdLayerClose"
  @close="onClose"
  @click="onClick"
  @load="onLoad"
  @error="onError"
  @request="onRequest"
  @response="onResponse"
/>

组件内部已自动上报埋点(请求、曝光、点击、关闭等),业务侧监听事件主要用于 UI 联动或自定义逻辑,无需重复上报。


支持哪些广告类型?

每种广告类型对应独立组件标签,请在页面中显式选用:

  • 开屏广告wl-splash-ad
  • Banner 广告wl-banner-ad
  • 轮播广告wl-carousel-ad
  • 信息流广告wl-feed-ad
  • 插屏广告wl-interstitial-ad

先请求后加载(预取模式)

推荐分工

广告类型 推荐方式 原因
开屏 sdk.prefetch + loadFromPrefetch 启动时机早,需本地缓存、延迟展示
Banner / 轮播 / 信息流 / 插屏 sdk.loadAd + :ad-data + :auto-fetch="false" 业务先拿结果,再决定是否插入列表/轮播节点

非开屏推荐:sdk.loadAd

import { getGlobalAdSDK } from '@/uni_modules/wl-track/utils/ad-sdk'

const result = await getGlobalAdSDK()?.loadAd({
  adSlotKey: 'banner_home_top'
})

if (result.hasAd) {
  swiperItems.push({
    type: 'ad',
    adData: result.data,
  })
}
<wl-banner-ad
  v-if="item.type === 'ad'"
  :ad-slot-key="item.adSlotKey"
  :ad-data="item.adData"
  :auto-fetch="false"
/>

要点:loadAd 返回 hasAd=true 后再挂载组件(v-if),通过 :ad-data 传入数据即可,无需 ref 调用。

LoadAdResult 结构:

interface LoadAdResult {
  hasAd: boolean
  data: AdData | null
  reason?: 'no_fill' | 'not_renderable' | 'network_error' | 'sdk_not_ready' | 'invalid_params' | 'unknown'
  error?: unknown
  requestId?: string
}

开屏:sdk.prefetch + loadFromPrefetch

import {
  getGlobalAdSDK,
  hasPrefetchedAd,
  clearPrefetchedAd,
} from '@/uni_modules/wl-track/utils/ad-sdk'

const SLOT_KEY = 'your_ad_slot_key'

// 1. 预取(可传 name 区分同一广告位的多份缓存)
await getGlobalAdSDK()?.prefetch({ adSlotKey: SLOT_KEY, name: 'home_banner' })

// 2. 需要展示时再加载
const loaded = adRef.value?.loadFromPrefetch?.()
if (!loaded) {
  // 无缓存,可降级为实时请求
  await adRef.value?.fetchAd?.()
}
<template>
  <wl-splash-ad
    ref="splashRef"
    :ad-slot-key="SLOT_KEY"
    name="splash_launch"
    :auto-fetch="false"
    :auto-show="true"
    @prefetch-consumed="onPrefetchConsumed"
  />
</template>
组件 ref 方法 说明
loadFromPrefetch() 从本地预取缓存加载并渲染,成功返回 true
hasPrefetch() 检查当前 ad-slot-key + name 是否有预取缓存
fetchAd() 组件内重新发起实时请求(无预取缓存时的降级方案)

工具函数:hasPrefetchedAd(adSlotKey, name?)clearPrefetchedAd(adSlotKey, name?)

注意:同一 adSlotKey 多条预取必须传不同 name,否则缓存会互相覆盖。预取请用 await 串行或独立 name,不要用 void forEach 并发无 name 预取。

非开屏广告请使用上文 sdk.loadAd + v-if + :ad-data 传参,不要在文档流程中使用 ref 灌数据。

🔧 其他功能

设置用户 ID

import { getGlobalAdSDK } from '@/uni_modules/wl-track/utils/ad-sdk'

const sdk = getGlobalAdSDK()
if (sdk?.global) {
  sdk.global.setGlobalProperty({
    user: {
      userId: 'user_123',
    },
  })
}

错误码

错误码 说明
1000 服务器内部错误
1001 参数错误
1002 广告位不存在或在运行中
1003 未匹配到广告

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。