├── php-api/ # 改造后的PHP接口层 ├── java-ad-service/ # 若依框架微服务(广告+VIP+分账) ├── uniapp-reader/ # UniApp前端项目 │ ├── pages/ # 各端页面 │ └──
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

adManager.js 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { ref } from 'vue'
  2. import { useUserStore } from '@/stores/user'
  3. // 广告平台配置
  4. const AD_PLATFORMS = {
  5. WECHAT: {
  6. reward: adUnitId => wx.createRewardedVideoAd({ adUnitId }),
  7. feed: adUnitId => wx.createBannerAd({ adUnitId })
  8. },
  9. DOUYIN: {
  10. reward: adUnitId => tt.createRewardedVideoAd({ adUnitId }),
  11. feed: adUnitId => tt.createBannerAd({ adUnitId })
  12. },
  13. H5: {
  14. reward: adUnitId => {
  15. console.log('H5激励广告:', adUnitId)
  16. return { show: () => Promise.resolve() }
  17. },
  18. feed: adUnitId => {
  19. return { show: () => console.log('H5信息流广告展示') }
  20. }
  21. }
  22. }
  23. // 广告触发控制器
  24. export function useAdManager() {
  25. const userStore = useUserStore()
  26. const chapterCount = ref(0)
  27. // 获取当前平台适配器
  28. const getPlatformAdapter = () => {
  29. // #ifdef MP-WEIXIN
  30. return AD_PLATFORMS.WECHAT
  31. // #endif
  32. // #ifdef MP-DOUYIN
  33. return AD_PLATFORMS.DOUYIN
  34. // #endif
  35. return AD_PLATFORMS.H5
  36. }
  37. // 展示激励广告(每5章触发)
  38. const showRewardAd = async (chapterId) => {
  39. if (userStore.isVIP) return
  40. chapterCount.value++
  41. if (chapterCount.value % 5 !== 0) return
  42. const adapter = getPlatformAdapter()
  43. const ad = adapter.reward('your_ad_unit_id')
  44. try {
  45. await ad.show()
  46. logAdView(chapterId, 'reward')
  47. } catch (err) {
  48. console.error('广告展示失败:', err)
  49. }
  50. }
  51. // 展示底部信息流广告
  52. const showFeedAd = () => {
  53. if (userStore.isVIP) return null
  54. const adapter = getPlatformAdapter()
  55. return adapter.feed('your_feed_ad_id')
  56. }
  57. // 广告日志记录(对接Java接口)
  58. const logAdView = (chapterId, adType) => {
  59. uni.request({
  60. url: 'https://api.aiyadianzi.ltd/ad/log',
  61. method: 'POST',
  62. data: {
  63. userId: userStore.userId,
  64. chapterId,
  65. adType,
  66. platform: process.env.VUE_APP_PLATFORM
  67. }
  68. })
  69. }
  70. return { showRewardAd, showFeedAd }
  71. }