打通微信小程序与 Web 页:广告内容跨端展示的工程实践

86 阅读2分钟

一、业务背景:广告展示要覆盖所有平台

在广告投放平台中,我们需支持广告内容在以下端完整、统一呈现:

  • 广告主后台(PC Web)
  • 投放页(H5)
  • 微信小程序预览页
  • App 内嵌 Webview 页

挑战在于:

  • 同一套广告素材需支持跨端解析和渲染
  • 数据追踪、曝光上报需统一格式
  • 用户行为交互需兼容不同平台能力(如小程序跳转、Web 落地页、App 内弹窗)

二、跨端设计核心原则

  1. 数据标准统一(使用 JSON Schema 定义广告配置)
  2. 渲染逻辑可插拔(模板渲染分离样式 + 数据)
  3. 上报系统一套(通用打点 SDK)
  4. 支持能力降级(如 H5 无法唤起小程序时降级跳转)

三、广告数据结构统一

我们约定一套广告素材结构:

{
  "title": "限时优惠",
  "image": "https://cdn.com/ad.png",
  "jump": {
    "type": "mini-program",
    "appId": "wx123",
    "path": "/pages/detail?id=123"
  },
  "track": {
    "impression": "https://track.com/imp",
    "click": "https://track.com/click"
  }
}

不同端只需解析该 JSON 即可展示。


四、Web 渲染模板封装

抽象一个通用广告展示组件:

<template>
  <div class="ad-card" @click="handleClick">
    <img :src="ad.image" />
    <h3>{{ ad.title }}</h3>
  </div>
</template>

<script setup>
const props = defineProps({ ad: Object })
const handleClick = () => {
  sendTrack(ad.track.click)
  if (ad.jump.type === 'mini-program') {
    // 小程序降级
    location.href = `https://wx.tenpay.com/f2f?appid=${ad.jump.appId}`
  } else if (ad.jump.type === 'url') {
    window.open(ad.jump.url)
  }
}
</script>

五、小程序内展示

通过 uniapp 实现小程序广告页:

<template>
  <view class="ad-container" @tap="handleClick">
    <image :src="ad.image" mode="aspectFill" />
    <text>{{ ad.title }}</text>
  </view>
</template>

<script setup>
const ad = ref(uni.getStorageSync('adPreview'))

const handleClick = () => {
  sendTrack(ad.value.track.click)
  if (ad.value.jump.type === 'url') {
    uni.navigateTo({ url: ad.value.jump.url })
  }
}
</script>

六、打点系统统一封装

打点抽象为 SDK:

export const sendTrack = (url: string) => {
  const img = new Image()
  img.src = url + `?ts=${Date.now()}`
}

支持 Web、App、小程序(分别使用 image, uni.request, nativeBridge 实现)


七、能力检测与降级策略

const isMiniProgram = /miniProgram/i.test(navigator.userAgent)

if (!isMiniProgram && ad.jump.type === 'mini-program') {
  // H5 页面点击跳转失败,fallback 到公众号落地页
  location.href = `https://mp.weixin.qq.com/some-fallback`
}

八、测试与灰度

  1. H5 页面使用 query 参数加载指定广告素材
  2. 小程序通过 storage 注入调试数据
  3. CDN + gray rules 控制不同广告主投放样式版本

九、总结:统一数据协议是跨端核心

本质不是“多个前端实现”,而是:

  • 统一的数据结构(决定了渲染结构)
  • 可插拔的模板系统(决定了展示方式)
  • 统一的行为接口(决定了埋点与跳转)

这是我在广告平台中负责落地的重要一环,也让我有信心在网易这类多端场景丰富的平台,承担复杂系统的跨端架构设计任务。