feat: 广告

This commit is contained in:
chashaobao
2025-07-07 01:15:50 +08:00
parent de7f0e14fe
commit e8cf28b6e9
18 changed files with 507 additions and 53 deletions

View File

@ -1,12 +1,13 @@
import { Map, MapProps, Text, Image, Button } from '@tarojs/components';
import Taro, { useLoad, useShareAppMessage } from '@tarojs/taro';
import React, { useCallback, useEffect, useState } from 'react';
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { CertificationStatusIcon } from '@/components/certification-status';
import CommonDialog from '@/components/common-dialog';
import DevDiv from '@/components/dev-div';
import JobRecommendList from '@/components/job-recommend-list';
import { JoinGroupHint } from '@/components/join-group-hint';
import LoginButton from '@/components/login-button';
import MaterialGuide from '@/components/material-guide';
import PageLoading from '@/components/page-loading';
@ -37,7 +38,6 @@ import Toast from '@/utils/toast';
import { isNeedCreateMaterial } from '@/utils/user';
import './index.less';
import { JoinGroupHint } from '@/components/join-group-hint';
const PREFIX = 'job-detail';
const log = logWithPrefix(PREFIX);
@ -183,6 +183,7 @@ export default function JobDetail() {
const roleType = useRoleType();
const userInfo = useUserInfo();
const [data, setData] = useState<JobDetails | null>(null);
const videoRef = useRef<Taro.RewardedVideoAd | null>(null);
const isOwner = roleType === RoleType.Company && userInfo.userId === data?.userId;
const inviteCode = useInviteCode();
@ -219,6 +220,56 @@ export default function JobDetail() {
};
}, []);
useEffect(() => {
const handleLoad = () => {
log('视频奖励加载成功');
};
const handleError = err => {
Taro.eventCenter.trigger(EventName.PRE_ACTION_VIDEO_ERROR);
log('视频奖励加载失败', err);
};
const handleClose = res => {
if (res.isEnded) {
Taro.eventCenter.trigger(EventName.PRE_ACTION_VIDEO_SUCCESS);
} else {
Toast.info('请完整观看广告以获得奖励');
}
};
const handleShowVideo = async () => {
if (videoRef.current) {
try {
await videoRef.current.show();
} catch (error) {
Taro.eventCenter.trigger(EventName.PRE_ACTION_VIDEO_ERROR);
Toast.info('广告奖励加载失败,请重试');
log('激励视频显示失败');
}
} else {
Taro.eventCenter.trigger(EventName.PRE_ACTION_VIDEO_ERROR);
Toast.info('广告奖励加载失败,请重试');
log('激励视频加载&显示失败');
}
};
videoRef.current = Taro.createRewardedVideoAd({
adUnitId: 'adunit-ca879f574edfeb33',
});
videoRef.current.onLoad(handleLoad);
videoRef.current.onClose(handleClose);
videoRef.current.onError(handleError);
videoRef.current.load();
Taro.eventCenter.on(EventName.SHOW_VIDEO_REWARD, handleShowVideo);
return () => {
if (videoRef.current) {
videoRef.current.offLoad(handleLoad);
videoRef.current.offError(handleError);
videoRef.current.offClose(handleClose);
}
Taro.eventCenter.off(EventName.SHOW_VIDEO_REWARD);
};
}, []);
useLoad(async () => {
switchRoleType(RoleType.Anchor);