跳到主要内容

google激励广告

实现步骤​

  • 1、在 Google Ad Manager 中创建广告单元

    • 新建广告单元 → 选择类型为 Out-of-page(页面外广告);
    • 格式选择 Rewarded;
    • 获得广告单元路径,如 /1234567/web_rewarded_ad;
  • 2、在网页中加载 Google GPT 脚本

  • 3、定义 Rewarded Slot 广告单元 并加载广告

useRewardAd​

ts
import { ref } from 'vue'

/**
* useRewardAd - Google Rewarded Ad Hook
* 统一管理激励广告加载、展示、回调
*/
export function useRewardAd(adUnitPath: string) {
const isLoaded = ref(false)
const isLoading = ref(false)
const rewardEarned = ref(false)
const error = ref<string | null>(null)

let rewardedSlot: any = null

/**
* 初始化广告系统(GPT.js)
*/
const initialize = () => {
if (typeof window === 'undefined') return
if (window.googletag?.apiReady) return // 避免重复初始化

window.googletag = window.googletag || { cmd: [] }
const script = document.createElement('script')
script.src = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js'
document.head.appendChild(script)
}

/**
* 加载激励广告
*/
const loadAd = () => {
isLoading.value = true
isLoaded.value = false
error.value = null

window.googletag = window.googletag || { cmd: [] }
window.googletag.cmd.push(() => {
rewardedSlot = window.googletag.defineOutOfPageSlot(adUnitPath, window.googletag.enums.OutOfPageFormat.REWARDED)
if (rewardedSlot) {
rewardedSlot.addService(window.googletag.pubads())

// 注册激励事件
window.googletag.pubads().addEventListener('rewardedSlotReady', (event: any) => {
if (event.slot === rewardedSlot) {
isLoaded.value = true
isLoading.value = false
}
})

window.googletag.pubads().addEventListener('rewardedSlotClosed', (event: any) => {
if (event.slot === rewardedSlot) {
if (rewardEarned.value) {
console.log('✅ 用户观看完成,发放奖励')
} else {
console.log('❌ 用户中途退出广告')
}
}
})

window.googletag.pubads().addEventListener('rewardedSlotGranted', (event: any) => {
if (event.slot === rewardedSlot) {
rewardEarned.value = true
}
})

window.googletag.enableServices()
window.googletag.display(rewardedSlot)
} else {
isLoading.value = false
error.value = 'Rewarded slot creation failed'
}
})
}

/**
* 展示激励广告(用户触发)
*/
const showAd = () => {
if (!isLoaded.value || !rewardedSlot) {
console.warn('广告未加载完成')
return
}
rewardedSlot.show()
}

return {
initialize,
loadAd,
showAd,
isLoaded,
isLoading,
rewardEarned,
error
}
}