UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

142 lines (109 loc) 3.71 kB
import { PlayerAnalyticsTracker } from "./playerAnalyticsTracker"; import { Player } from "../appUtils/playerManager/player"; import { AD_EVENT, GENERAL_EVENT, PLAYBACK_EVENT, QOS_EVENT } from "./events"; type Props = { analyticsTracker: any; player: any; }; /* eslint brace-style: 0 */ // --> OFF export class AnalyticPlayerListener implements QuickBrickPlayer.SharedPlayerCallBacks { static analyticsListenerID = "analytics-listener"; private analyticsTracker: PlayerAnalyticsTracker; private player: Player; private onVideoLoadCalled; // android only constructor(props: Props) { this.analyticsTracker = props.analyticsTracker; this.player = props.player; } handleAnalyticEvent = (event, data = {}) => { if (this.analyticsTracker?.handleAnalyticEvent) { this.analyticsTracker?.handleAnalyticEvent?.(event, { ...data, player_type: this.player.playerPluginId, }); } }; onVideoEnd = () => { this.handleAnalyticEvent(PLAYBACK_EVENT.complete); }; onError = (err: Error) => { this.handleAnalyticEvent(PLAYBACK_EVENT.error, err); // TODO: Check error format }; onPlayerPause = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.pause, event); }; onPlayerResume = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.play, event); }; onPlayerSeekComplete = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.seek_complete, event); }; onPlayerSeekStart = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.seek_start, event); }; onBufferStart = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.buffer_start, event); }; onBufferComplete = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.buffer_complete, event); }; // Not implemented onPlayerStop = (event) => { this.handleAnalyticEvent(PLAYBACK_EVENT.stop, event); }; // TODO: Implement method on native onVideoBandwidthUpdate = (event) => { this.handleAnalyticEvent(QOS_EVENT.bitrate_changed, event); }; onAdBegin = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_start, event); }; onAdBreakBegin = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_break_start, event); }; onAdBreakEnd = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_break_completed, event); }; onAdEnd = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_complete, event); }; onAdError = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_error, event); }; onAdRequest = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_request, event); }; onAdClicked = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_clicked, event); }; onAdTapped = (event) => { this.handleAnalyticEvent(AD_EVENT.ad_tapped, event); }; onVideoLoad = () => { // if (!this.state.isAd && !this.onVideoLoadCalled) { if (!this.player.isAd() && !this.onVideoLoadCalled) { this.onVideoLoadCalled = true; this.handleAnalyticEvent(PLAYBACK_EVENT.load_video, { player_type: this.player.playerPluginId, }); } }; onPlayerSessionEnd = () => { // TODO: Implement method on native android, ios exists this.handleAnalyticEvent(GENERAL_EVENT.session_end); }; onPlayerSessionStart = () => { // TODO: Implement method on native android, ios exists this.handleAnalyticEvent(GENERAL_EVENT.session_start); }; onPlayerNext = ({ nativeEvent }) => { // TODO: Implement method on native this.handleAnalyticEvent(PLAYBACK_EVENT.next, nativeEvent); }; onPlayerPrevious = ({ nativeEvent }) => { // TODO: Implement method on native this.handleAnalyticEvent(PLAYBACK_EVENT.previous, nativeEvent); }; }