OptiView Ads SDK on React Native
On React Native, the OptiView Ads SDK bridges the native Android and iOS SDKs behind a typed JavaScript API. All timing-sensitive break scheduling runs natively, so playback stays smooth regardless of the JavaScript thread's load.
Prerequisites
- Retrieve the channel's Break Manifest URL. See Retrieving the required values.
- For Google Pod Serving, have your Google Ad Manager
networkCodeand the channel'scustomAssetKeyat hand. - Install the SDK and make its native dependencies resolvable for your platforms (see Installation).
Installation
Install the SDK alongside your host player (react-native-theoplayer or react-native-video):
npm install @dolby-optiview/ads-sdk-react-native
The package requires React Native 0.76 or later with the new architecture (TurboModules / Fabric). It links the native Android and iOS/tvOS SDKs automatically; the only setup left is to make the native artifacts resolvable.
Android
Add the THEOplayer Maven repository to the repositories in android/build.gradle, keeping Google and Maven Central:
// android/build.gradle
allprojects {
repositories {
maven { url "https://maven.theoplayer.com/releases" }
google()
mavenCentral()
}
}
iOS and tvOS
Add the THEOplayer CocoaPods source next to the default one in your Podfile, then run pod install:
source 'https://github.com/THEOplayer/cocoapods-specs.git'
source 'https://cdn.cocoapods.org/'
Integration
Attach the SDK to your host player once it is ready, then start a session with the channel's Break Manifest URL. The example below uses the OptiView Player (react-native-theoplayer):
import { THEOplayerView } from 'react-native-theoplayer';
import { createOptiViewAds } from '@dolby-optiview/ads-sdk-react-native';
const onPlayerReady = async (player) => {
player.source = { sources: [{ src: CONTENT_URL, type: 'application/x-mpegurl' }] };
const ads = createOptiViewAds(player, { gam: { networkCode: 'NETWORK-CODE' } });
await ads.startSession({
manifestUrl: 'https://us.markers.optiview.dolby.com/manifest/v1/ORG-ID/channels/CHANNEL-ID',
});
};
<THEOplayerView config={{ license: THEOPLAYER_LICENSE }} onPlayerReady={onPlayerReady} />;
From this point the SDK polls the Break Manifest, schedules the breaks against your player's timeline, plays the ads, and reports the impressions. To verify the integration, schedule a break through the API or dashboard and confirm that it plays out.
All configuration options, session settings, and ad events are documented in the React Native API reference, starting from the createOptiViewAds function.
Supported players
OptiView Player (react-native-theoplayer)
The SDK attaches to a THEOplayerView through the player it hands to onPlayerReady; pass that player to createOptiViewAds as shown above.
Limitations:
- Requires a valid THEOplayer license.
react-native-video
react-native-video does not expose its native player handle directly. Use the useReactVideoHandle hook: attach its onVideoEvent callback to the <Video> component's onLoad, and pass the player it returns to createOptiViewAds once it is defined:
import Video from 'react-native-video';
import { createOptiViewAds, useReactVideoHandle } from '@dolby-optiview/ads-sdk-react-native';
const { player, onVideoEvent } = useReactVideoHandle();
useEffect(() => {
if (!player) return;
const ads = createOptiViewAds(player, { gam: { networkCode: 'NETWORK-CODE' } });
void ads.startSession({ manifestUrl: MANIFEST_URL });
return () => void ads.destroy();
}, [player]);
<Video source={{ uri: CONTENT_URL }} disableFocus onLoad={onVideoEvent} />;
Limitations:
- Requires
react-native-videov6. - On Android, set
RNVideo_useExoplayerIMA=trueinandroid/gradle.propertiessoreact-native-videouses the real IMA integration instead of its stub classes, which conflict with the IMA SDK shipped by the OptiView runtime.