useAdTrack()
useAdTrack 是廣告埋點封裝。各 SwAd* 元件用它自動上報曝光 / 點擊,業務零代碼。需要自己做廣告位渲染時也可直接用 —— 它把「位級欄位(slotKey / page,來自元件 prop)+ 創意級欄位(id / creativeId / adType,來自 item 資料)」兩層自動組裝成上報 payload,不用手拼。
上報底層走
useTracker,SDK 未設定時自動 no-op。
參數
useAdTrack(options) —— options 是位級埋點欄位:
| 名稱 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
slotKey | string | ✓ | — | 廣告位鍵 → 埋點 ad_slot_key |
slotName | string | '' | 廣告位名 → ad_slot_name | |
pageKey | string | '' | 頁面鍵 → page_key | |
pageName | string | '' | 頁面名 → page_name | |
adType | AdType | '' | 預設廣告類型(item.adType 優先)→ ad_type |
回傳值
| 名稱 | 類型 | 說明 |
|---|---|---|
reportImpression | (items: SwAdItem[]) => void | 上報一次曝光(items 為空陣列時不發) |
reportClick | (item: SwAdItem) => void | 上報一次點擊 |
reportClose | (items: SwAdItem[], reason: 'close' | 'skip') => void | 上報關閉 / 跳過(adClose,payload 帶 close_reason;空陣列不發)。關閉鈕元件已內建接線(SwAdSplash / SwAdPopup / SwAdPause),貼片「跳過」按鈕歸業務 slot 渲染——在 skip handler 裡自調 reportClose(items, 'skip');倒數自然結束不報(正常完成) |
observeImpression | (el, getItems, onVisible?) => () => void | 綁定曝光偵測,回傳 cleanup 函式 |
observeImpression(el, getItems, onVisible?)
用 IntersectionObserver(threshold: 0.5)監聽 el 進入視口,首次進入即 reportImpression(getItems()) 並觸發可選 onVisible 回呼,隨後 disconnect(去重,只報一次)。
el: HTMLElement—— 要觀察的根元素getItems: () => SwAdItem[]—— 取當前展示的廣告 item(延遲求值,拿到曝光瞬間的資料)onVisible?: (items) => void—— 曝光後的額外回呼- 回傳
() => void—— cleanup(元件卸載時呼叫)。SSR / 無IntersectionObserver環境回傳 no-op
使用範例
// 範例 1:自訂廣告位接曝光 + 點擊埋點
const rootRef = ref<HTMLElement>()
const { reportClick, observeImpression } = useAdTrack({
slotKey: 'home_banner',
pageKey: 'home',
})
onMounted(() => {
const stop = observeImpression(rootRef.value!, () => props.items)
onUnmounted(stop)
})
function onClick(item: SwAdItem) {
reportClick(item)
}
// 範例 2:手動上報曝光(非 IntersectionObserver 場景)
const { reportImpression } = useAdTrack({ slotKey: 'splash', adType: 'splash' })
reportImpression(visibleAds.value)
注意事項
- 優先用
SwAd*元件 —— 它們內建useAdTrack+IntersectionObserver,無需自己接埋點。僅自訂廣告位才直接用本 composable。 - 不在業務側手拼 payload —— 位級 / 創意級欄位映射由本 composable 統一組裝,手拼易漏欄位 / 欄位名錯。
- 曝光去重:同一
el進視口只報一次(reported標記 +disconnect)。
相關
useTracker—— 底層統一上報入口- 廣告底座與打點 ——
SwAd*元件族 + 完整埋點欄位