import { AdPlayTask, PLAY_AD_STATUS, globalAdEvent } from '@lofter-common-features/ad/play-ad'; import { showLoading, } from '@lofter-common-shared/react-components/loading'; import { callHandler, } from 'nejsbridge/dist/bridge.lofter.es'; import { getLofterVersion, } from 'nw-detect'; import log from './lofter-log'; import axios from 'axios'; import { toast } from '../components/toast'; export const bindAdPlayTaskCommonEventHandlers = ( adPlayTask: ExAdPlayTask ) => { adPlayTask.addListener('play', () => { showLoading(); }); adPlayTask.addListener('playing', () => { showLoading(false) // showAdGlobalLoading(false) }); adPlayTask.addListener('completed', () => { showLoading(false) }); adPlayTask.addListener('orderSuccess', () => { showLoading(false) }); adPlayTask.addListener('orderFailure', () => { showLoading(false) toast('奖励发放失败,请联系客服'); callHandler('njb_playAdEnd', { status: PLAY_AD_STATUS.ORDER_FAILURE }); }); adPlayTask.addListener('timeout', () => { showLoading(false) toast('网络不佳,请重试'); callHandler('njb_playAdEnd', { status: PLAY_AD_STATUS.ORDER_FAILURE }); }) adPlayTask.addListener('cancel', () => { showLoading(false) }) adPlayTask.addListener('error', () => { showLoading(false) let message = '当前广告还未准备好,请过一会儿再试'; if (!adPlayTask.preventDefaultErrorMessage) { toast(message); } }); } /** * 广告订单轮询接口 */ export async function fetchGiftTaskOrderStatus(params: any) { return axios.get( '/trade/gift/userTasks/getAdOrderStatus.json', { params: { product: getLofterVersion() || '', ...params } } ) } type AdPlayTaskParams = ConstructorParameters[0] export type Params = Omit< AdPlayTaskParams, 'tracking' | 'request' | 'pollingConfig' > & { pollingConfig?: null | Omit }; export { AdPlayTask, PLAY_AD_STATUS }; export type ExAdPlayTask = AdPlayTask & { preventDefaultErrorMessage?: boolean; disableGlobalLoading?: boolean; }; export function playAd( params: Params, otherCustomParams?: { disableGlobalLoading?: boolean; trackingConfig?: { ext?: any; }; popupAdBtnInfo?: { text: string, url: string }; } ): ExAdPlayTask { const adPlayTask: ExAdPlayTask = new AdPlayTask({ ...params, popupAdBtnInfo: otherCustomParams?.popupAdBtnInfo, pollingConfig: params.pollingConfig !== null ? { pollingFunction: async () => { const { data } = await fetchGiftTaskOrderStatus({ orderId: adPlayTask.orderId, category: adPlayTask.adVideoInfo.category, location: adPlayTask.adVideoInfo.location, }); const orders = data && data.orders; if (orders.some(({ status }: any) => (status === 1))) { return { success: true, ordersResult: orders }; } return undefined; }, ...params.pollingConfig } : undefined, tracking: (eventId: string, attributes: any) => { log.capture( eventId, { ...attributes, ext: { ...attributes.ext, ...otherCustomParams?.trackingConfig?.ext } } ); }, }); adPlayTask.disableGlobalLoading = otherCustomParams?.disableGlobalLoading; bindAdPlayTaskCommonEventHandlers(adPlayTask); adPlayTask.play(); return adPlayTask; }