UNPKG

bitmovin-player-react-native-analytics-conviva

Version:
214 lines 9.26 kB
import BitmovinPlayerReactNativeAnalyticsConvivaModule from './modules/BitmovinPlayerReactNativeAnalyticsConvivaModule'; import { Platform, findNodeHandle } from 'react-native'; import NativeInstance from './nativeInstance'; import { SsaiApi } from './ssaiApi'; /** * The ConvivaAnalytics class is used to interact with the Conviva Analytics SDK. * @platform Android, iOS, tvOS */ export class ConvivaAnalytics extends NativeInstance { isInitialized = false; isDestroyed = false; /** * Namespace for reporting server-side ad breaks and ads. * See {@link SsaiApi} for more information. */ ssai = new SsaiApi(this.nativeId); /** * Initializes the conviva analytics. * @returns promise which resolves when the conviva analytics is sucessfully initialized. * * @platform Android, iOS, tvOS */ initialize = async () => { if (this.isInitialized) { return; } this.isInitialized = true; await this.config?.player?.initialize(); return BitmovinPlayerReactNativeAnalyticsConvivaModule.initWithConfig(this.nativeId, this.config?.player?.nativeId ?? null, this.config?.customerKey ?? '', this.config?.gatewayUrl ?? null, this.config?.debugLoggingEnabled ?? false); }; /** * Initializes a new conviva tracking session. * * @warning The integration can only be validated without external session managing. So when using this method we can * no longer ensure that the session is managed at the correct time. Additional: Since some metadata attributes * rely on the player's source we can't ensure that all metadata attributes are present at session creation. * Therefore it is possible that we receive a 'ContentMetadata created late' issue after conviva validation. * * If no source was loaded (or the itemTitle is missing) and no assetName was set via updateContentMetadata * this method will throw an error. * * @returns promise which resolves when the conviva tracking session is sucessfully initialized. * * @platform Android, iOS, tvOS */ initializeSession = async () => { return BitmovinPlayerReactNativeAnalyticsConvivaModule.initializeSession(this.nativeId); }; /** * Attaches the given player to the conviva analytics. * This method should be called as soon as the `Player` instance is initialized to not miss any tracking. * * @warning Has no effect if there is already a {@link Player} instance set. Use the {@link ConvivaAnalyticsConfig} without `player` if you plan to attach a `Player` instance later in the life-cycle. * * @param player The player which should be attached to the conviva analytics. * @returns promise which resolves when the player is sucessfully attached to the conviva analytics. * * @platform Android, iOS, tvOS */ attachPlayer = async (player) => { return BitmovinPlayerReactNativeAnalyticsConvivaModule.attachPlayer(this.nativeId, player.nativeId); }; /** * Destroys the native `ConvivaAnalytics` and releases all of its allocated resources. */ destroy = () => { if (!this.isDestroyed) { BitmovinPlayerReactNativeAnalyticsConvivaModule.destroy(this.nativeId); this.isDestroyed = true; } }; /** * Releases the conviva analytics. * * @platform Android, iOS, tvOS */ release = () => { BitmovinPlayerReactNativeAnalyticsConvivaModule.release(this.nativeId); }; /** * Ends the current conviva tracking session. * If there is no active session, the only thing that will happen is resetting the content metadata. * * @warning The integration can only be validated without external session managing. * So when using this method we can no longer ensure that the session is managed at the correct time. * * @platform Android, iOS, tvOS */ endSession = () => { BitmovinPlayerReactNativeAnalyticsConvivaModule.endSession(this.nativeId); }; /** * Set the `PlayerView.viewRef` to enable view triggered events like fullscreen state changes * @param viewRef reference to the `PlayerView` passed via `<PlayerView viewRef={viewRef}>` * * @platform iOS, tvOS */ setPlayerViewRef = (viewRef) => { if (Platform.OS !== 'ios') { console.warn(`[ConvivaAnalytics ${this.nativeId}] Method setPlayerViewRef is not available for Android. Only iOS and tvOS devices.`); return; } if (viewRef !== undefined && viewRef.current !== null) { const node = findNodeHandle(viewRef.current); if (node != null) { BitmovinPlayerReactNativeAnalyticsConvivaModule.setPlayerViewRef(this.nativeId, node); } } else { BitmovinPlayerReactNativeAnalyticsConvivaModule.resetPlayerViewRef(this.nativeId); } }; /** * Will update the contentMetadata which are tracked with conviva. * * If there is an active session only permitted values will be updated and propagated immediately. * * If there is no active session the values will be set on session creation. * * Attributes set via this method will override automatic tracked ones. * * @param metadataOverrides MetadataOverrides attributes which will be used to track to conviva. * @see {@link ContentMetadataBuilder} for more information about permitted attributes * * @platform Android, iOS, tvOS */ updateContentMetadata = (metadata) => { BitmovinPlayerReactNativeAnalyticsConvivaModule.updateContentMetadata(this.nativeId, metadata); }; /** * Sends a custom application-level event to Conviva's Player Insight. An application-level event can always * be sent and is not tied to a specific video. * * @param name The name of the event * @param attributes A dictionary with custom event attributes * * @platform Android, iOS, tvOS */ sendCustomApplicationEvent = (name, attributes) => { BitmovinPlayerReactNativeAnalyticsConvivaModule.sendCustomApplicationEvent(this.nativeId, name, attributes); }; /** * Sends a custom playback-level event to Conviva's Player Insight. * A playback-level event can only be sent during an active video session. * * @param name The name of the event * @param attributes A dictionary with custom event attributes * * @platform Android, iOS, tvOS */ sendCustomPlaybackEvent = (name, attributes) => { BitmovinPlayerReactNativeAnalyticsConvivaModule.sendCustomPlaybackEvent(this.nativeId, name, attributes); }; /** * Sends a custom deficiency event during playback to Conviva's Player Insight. If no session is active it will NOT * create one. * * @param message Message which will be send to conviva * @param severity One of FATAL or WARNING * @param endSession Boolean flag if session should be closed after reporting the deficiency * * @platform Android, iOS, tvOS */ reportPlaybackDeficiency = (message, severity, endSession = true) => { BitmovinPlayerReactNativeAnalyticsConvivaModule.reportPlaybackDeficiency(this.nativeId, message, severity, endSession); }; /** * Puts the session state in a notMonitored state. * * @param isBumper If tracking is paused in order to display a bumper video (or similar), set this to true. * Otherwise the event is regarded as a "user wait"-event. * * @platform Android, iOS, tvOS */ pauseTracking = (isBumper) => { BitmovinPlayerReactNativeAnalyticsConvivaModule.pauseTracking(this.nativeId, isBumper); }; /** * Puts the session state from a notMonitored state into the last one tracked. * @platform Android, iOS, tvOS */ resumeTracking = () => { BitmovinPlayerReactNativeAnalyticsConvivaModule.resumeTracking(this.nativeId); }; /** * This should be called when the app is resumed. * * This is only available on Android and will have no effect on iOS and tvOS. * * @platform Android */ reportAppForegrounded = () => { if (Platform.OS !== 'android') { console.warn(`[ConvivaAnalytics ${this.nativeId}] Method reportAppForegrounded is not available for iOS and tvOS. Only Android devices.`); return; } BitmovinPlayerReactNativeAnalyticsConvivaModule.reportAppForegrounded(this.nativeId); }; /** * This should be called when the app is paused. * * This is only available on Android and will have no effect on iOS and tvOS. * * @platform Android */ reportAppBackgrounded = () => { if (Platform.OS !== 'android') { console.warn(`[ConvivaAnalytics ${this.nativeId}] Method reportAppBackgrounded is not available for iOS and tvOS. Only Android devices.`); return; } BitmovinPlayerReactNativeAnalyticsConvivaModule.reportAppBackgrounded(this.nativeId); }; } //# sourceMappingURL=convivaAnalytics.js.map