@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
142 lines (109 loc) • 3.71 kB
text/typescript
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);
};
}