react-native-theoplayer 9.9.1 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -1
- package/README.md +5 -1
- package/android/build.gradle +8 -8
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.0.0/ads-wrapper-10.0.0.aar +0 -0
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{9.0.0/ads-wrapper-9.0.0.pom → 10.0.0/ads-wrapper-10.0.0.pom} +3 -3
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
- package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +18 -1
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.kt +32 -14
- package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +18 -6
- package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +15 -5
- package/android/src/main/java/com/theoplayer/cache/CacheAdapter.kt +0 -12
- package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +20 -7
- package/android/src/main/java/com/theoplayer/cast/CastModule.kt +17 -3
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionAdapter.kt +1 -1
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +28 -11
- package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +16 -3
- package/android/src/main/java/com/theoplayer/presentation/FullscreenLayoutObserver.kt +41 -6
- package/android/src/main/java/com/theoplayer/presentation/PresentationManager.kt +25 -7
- package/android/src/main/java/com/theoplayer/source/SourceAdapter.kt +15 -36
- package/android/src/main/java/com/theoplayer/theoads/THEOadsAdapter.kt +83 -0
- package/android/src/main/java/com/theoplayer/theoads/THEOadsEventAdapter.kt +52 -0
- package/android/src/main/java/com/theoplayer/theoads/THEOadsModule.kt +63 -0
- package/android/src/main/java/com/theoplayer/theolive/THEOliveModule.kt +16 -3
- package/ios/THEOplayerRCTBridge.m +19 -0
- package/ios/THEOplayerRCTDebug.swift +4 -1
- package/ios/THEOplayerRCTMainEventHandler.swift +1 -1
- package/ios/THEOplayerRCTPlayerAPI.swift +3 -3
- package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +2 -1
- package/ios/THEOplayerRCTView.swift +12 -0
- package/ios/theoAds/THEOplayerRCTTHEOAdsAPI.swift +101 -0
- package/ios/theoAds/THEOplayerRCTTHEOAdsEventAdapter.swift +118 -0
- package/ios/theoAds/THEOplayerRCTTHEOAdsEventHandler.swift +174 -0
- package/ios/theolive/THEOplayerRCTSourceDescriptionBuilder+Theolive.swift +0 -1
- package/ios/theolive/THEOplayerRCTTHEOliveEventHandler.swift +1 -1
- package/ios/theolive/THEOplayerRCTView+THEOlive.swift +1 -5
- package/ios/theolive/THEOplayerRCTView+THEOliveConfig.swift +0 -2
- package/lib/commonjs/api/barrel.js +45 -56
- package/lib/commonjs/api/barrel.js.map +1 -1
- package/lib/commonjs/api/cache/CachingTaskParameters.js +0 -19
- package/lib/commonjs/api/cache/CachingTaskParameters.js.map +1 -1
- package/lib/commonjs/api/event/TheoAdsEvent.js +7 -0
- package/lib/commonjs/api/event/TheoAdsEvent.js.map +1 -1
- package/lib/commonjs/api/player/PlayerEventMap.js.map +1 -1
- package/lib/commonjs/api/source/SourceDescription.js +1 -13
- package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
- package/lib/commonjs/api/source/ads/{THEOplayerAdDescription.js → CsaiAdDescription.js} +1 -1
- package/lib/commonjs/api/source/ads/CsaiAdDescription.js.map +1 -0
- package/lib/commonjs/api/source/ads/barrel.js +4 -4
- package/lib/commonjs/api/source/ads/barrel.js.map +1 -1
- package/lib/commonjs/index.js +0 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.js +13 -3
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +4 -2
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/WebEventForwarder.js +8 -1
- package/lib/commonjs/internal/adapter/WebEventForwarder.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js +10 -1
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/native/NativeTheoAdsEvent.js +20 -0
- package/lib/commonjs/internal/adapter/event/native/NativeTheoAdsEvent.js.map +1 -0
- package/lib/commonjs/internal/adapter/theoads/THEOAdsNativeAdapter.js +6 -12
- package/lib/commonjs/internal/adapter/theoads/THEOAdsNativeAdapter.js.map +1 -1
- package/lib/commonjs/manifest.json +1 -1
- package/lib/module/api/barrel.js +0 -1
- package/lib/module/api/barrel.js.map +1 -1
- package/lib/module/api/cache/CachingTaskParameters.js +1 -19
- package/lib/module/api/cache/CachingTaskParameters.js.map +1 -1
- package/lib/module/api/event/TheoAdsEvent.js +8 -0
- package/lib/module/api/event/TheoAdsEvent.js.map +1 -1
- package/lib/module/api/player/PlayerEventMap.js.map +1 -1
- package/lib/module/api/source/SourceDescription.js +0 -13
- package/lib/module/api/source/SourceDescription.js.map +1 -1
- package/lib/module/api/source/ads/CsaiAdDescription.js +4 -0
- package/lib/module/api/source/ads/CsaiAdDescription.js.map +1 -0
- package/lib/module/api/source/ads/barrel.js +1 -1
- package/lib/module/api/source/ads/barrel.js.map +1 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal/THEOplayerView.js +13 -3
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +4 -2
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/WebEventForwarder.js +9 -2
- package/lib/module/internal/adapter/WebEventForwarder.js.map +1 -1
- package/lib/module/internal/adapter/event/PlayerEvents.js +8 -0
- package/lib/module/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/module/internal/adapter/event/native/NativeTheoAdsEvent.js +16 -0
- package/lib/module/internal/adapter/event/native/NativeTheoAdsEvent.js.map +1 -0
- package/lib/module/internal/adapter/theoads/THEOAdsNativeAdapter.js +6 -12
- package/lib/module/internal/adapter/theoads/THEOAdsNativeAdapter.js.map +1 -1
- package/lib/module/manifest.json +1 -1
- package/lib/typescript/api/barrel.d.ts +0 -1
- package/lib/typescript/api/barrel.d.ts.map +1 -1
- package/lib/typescript/api/cache/CachingTaskParameters.d.ts +0 -34
- package/lib/typescript/api/cache/CachingTaskParameters.d.ts.map +1 -1
- package/lib/typescript/api/event/TheoAdsEvent.d.ts +13 -0
- package/lib/typescript/api/event/TheoAdsEvent.d.ts.map +1 -1
- package/lib/typescript/api/player/PlayerEventMap.d.ts +3 -3
- package/lib/typescript/api/player/PlayerEventMap.d.ts.map +1 -1
- package/lib/typescript/api/source/SourceDescription.d.ts +0 -20
- package/lib/typescript/api/source/SourceDescription.d.ts.map +1 -1
- package/lib/typescript/api/source/ads/{THEOplayerAdDescription.d.ts → CsaiAdDescription.d.ts} +2 -2
- package/lib/typescript/api/source/ads/CsaiAdDescription.d.ts.map +1 -0
- package/lib/typescript/api/source/ads/barrel.d.ts +1 -1
- package/lib/typescript/api/source/ads/barrel.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +0 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/internal/THEOplayerView.d.ts +2 -0
- package/lib/typescript/internal/THEOplayerView.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/WebEventForwarder.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts +7 -1
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/native/NativeTheoAdsEvent.d.ts +18 -0
- package/lib/typescript/internal/adapter/event/native/NativeTheoAdsEvent.d.ts.map +1 -0
- package/lib/typescript/internal/adapter/theoads/THEOAdsNativeAdapter.d.ts +1 -1
- package/lib/typescript/internal/adapter/theoads/THEOAdsNativeAdapter.d.ts.map +1 -1
- package/package.json +6 -6
- package/react-native-theoplayer.podspec +7 -7
- package/src/api/barrel.ts +0 -1
- package/src/api/cache/CachingTaskParameters.ts +0 -37
- package/src/api/event/TheoAdsEvent.ts +14 -0
- package/src/api/player/PlayerEventMap.ts +4 -2
- package/src/api/source/SourceDescription.ts +0 -22
- package/src/api/source/ads/{THEOplayerAdDescription.ts → CsaiAdDescription.ts} +1 -1
- package/src/api/source/ads/barrel.ts +1 -1
- package/src/index.tsx +0 -1
- package/src/internal/THEOplayerView.tsx +17 -2
- package/src/internal/adapter/THEOplayerAdapter.ts +6 -2
- package/src/internal/adapter/WebEventForwarder.ts +7 -1
- package/src/internal/adapter/event/PlayerEvents.ts +11 -0
- package/src/internal/adapter/event/native/NativeTheoAdsEvent.ts +30 -0
- package/src/internal/adapter/theoads/THEOAdsNativeAdapter.ts +7 -12
- package/src/manifest.json +1 -1
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/9.0.0/ads-wrapper-9.0.0.aar +0 -0
- package/android/src/main/java/com/theoplayer/playback/PlaybackSettingsModule.kt +0 -28
- package/lib/commonjs/api/playback/PlaybackSettingsAPI.js +0 -2
- package/lib/commonjs/api/playback/PlaybackSettingsAPI.js.map +0 -1
- package/lib/commonjs/api/playback/barrel.js +0 -17
- package/lib/commonjs/api/playback/barrel.js.map +0 -1
- package/lib/commonjs/api/source/ads/THEOplayerAdDescription.js.map +0 -1
- package/lib/commonjs/internal/playback/PlaybackSettings.js +0 -28
- package/lib/commonjs/internal/playback/PlaybackSettings.js.map +0 -1
- package/lib/module/api/playback/PlaybackSettingsAPI.js +0 -2
- package/lib/module/api/playback/PlaybackSettingsAPI.js.map +0 -1
- package/lib/module/api/playback/barrel.js +0 -4
- package/lib/module/api/playback/barrel.js.map +0 -1
- package/lib/module/api/source/ads/THEOplayerAdDescription.js +0 -4
- package/lib/module/api/source/ads/THEOplayerAdDescription.js.map +0 -1
- package/lib/module/internal/playback/PlaybackSettings.js +0 -23
- package/lib/module/internal/playback/PlaybackSettings.js.map +0 -1
- package/lib/typescript/api/playback/PlaybackSettingsAPI.d.ts +0 -35
- package/lib/typescript/api/playback/PlaybackSettingsAPI.d.ts.map +0 -1
- package/lib/typescript/api/playback/barrel.d.ts +0 -2
- package/lib/typescript/api/playback/barrel.d.ts.map +0 -1
- package/lib/typescript/api/source/ads/THEOplayerAdDescription.d.ts.map +0 -1
- package/lib/typescript/internal/playback/PlaybackSettings.d.ts +0 -7
- package/lib/typescript/internal/playback/PlaybackSettings.d.ts.map +0 -1
- package/src/api/playback/PlaybackSettingsAPI.ts +0 -36
- package/src/api/playback/barrel.ts +0 -1
- package/src/internal/playback/PlaybackSettings.ts +0 -25
|
@@ -49,6 +49,7 @@ RCT_EXPORT_VIEW_PROPERTY(onNativePresentationModeChange, RCTDirectEventBlock);
|
|
|
49
49
|
RCT_EXPORT_VIEW_PROPERTY(onNativeResize, RCTDirectEventBlock);
|
|
50
50
|
RCT_EXPORT_VIEW_PROPERTY(onNativeAdEvent, RCTDirectEventBlock);
|
|
51
51
|
RCT_EXPORT_VIEW_PROPERTY(onNativeTHEOliveEvent, RCTDirectEventBlock);
|
|
52
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeTHEOadsEvent, RCTDirectEventBlock);
|
|
52
53
|
RCT_EXPORT_VIEW_PROPERTY(onNativeCastEvent, RCTDirectEventBlock);
|
|
53
54
|
|
|
54
55
|
@end
|
|
@@ -285,3 +286,21 @@ RCT_EXTERN_METHOD(setAuthToken:(nonnull NSNumber *)node
|
|
|
285
286
|
|
|
286
287
|
@end
|
|
287
288
|
|
|
289
|
+
// ----------------------------------------------------------------------------
|
|
290
|
+
// THEOAds Module
|
|
291
|
+
// ----------------------------------------------------------------------------
|
|
292
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTTHEOAdsModule, THEOplayerRCTTHEOAdsAPI, NSObject)
|
|
293
|
+
|
|
294
|
+
RCT_EXTERN_METHOD(currentInterstitials:(nonnull NSNumber *)node
|
|
295
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
296
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
297
|
+
|
|
298
|
+
RCT_EXTERN_METHOD(scheduledInterstitials:(nonnull NSNumber *)node
|
|
299
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
300
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
301
|
+
|
|
302
|
+
RCT_EXTERN_METHOD(replaceAdTagParameters:(nonnull NSNumber *)node
|
|
303
|
+
adTagParameters:(nullable NSDictionary *)adTagParameters)
|
|
304
|
+
|
|
305
|
+
@end
|
|
306
|
+
|
|
@@ -45,8 +45,11 @@ let DEBUG_CACHE_EVENTS = DEBUG && false
|
|
|
45
45
|
// Debug flag to monitor cache API usage
|
|
46
46
|
let DEBUG_CACHE_API = DEBUG && false
|
|
47
47
|
|
|
48
|
-
// Debug flag to monitor
|
|
48
|
+
// Debug flag to monitor THEOLive API usage
|
|
49
49
|
let DEBUG_THEOLIVE_API = DEBUG && false
|
|
50
50
|
|
|
51
|
+
// Debug flag to monitor THEOAds API usage
|
|
52
|
+
let DEBUG_THEOADS_API = DEBUG && false
|
|
53
|
+
|
|
51
54
|
// Debug flag to monitor AudioSession interruptions (e.g. phone cll)
|
|
52
55
|
let DEBUG_INTERRUPTIONS = DEBUG && false
|
|
@@ -224,7 +224,7 @@ public class THEOplayerRCTMainEventHandler {
|
|
|
224
224
|
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Seeking listener attached to THEOplayer") }
|
|
225
225
|
|
|
226
226
|
// SEEKED
|
|
227
|
-
self.
|
|
227
|
+
self.seekedListener = player.addEventListener(type: PlayerEventTypes.SEEKED) { [weak self] event in
|
|
228
228
|
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received SEEKED event from THEOplayer") }
|
|
229
229
|
if let forwardedSeekedEvent = self?.onNativeSeeked {
|
|
230
230
|
forwardedSeekedEvent(["currentTime": 1e3 * event.currentTime])
|
|
@@ -276,7 +276,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
276
276
|
}
|
|
277
277
|
if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Showing textTrack \(uidValue) on TheoPlayer") }
|
|
278
278
|
for i in 0...textTracks.count-1 {
|
|
279
|
-
|
|
279
|
+
let textTrack: TextTrack = textTracks.get(i)
|
|
280
280
|
if textTrack.uid == uidValue {
|
|
281
281
|
textTrack.mode = TextTrackMode.showing
|
|
282
282
|
} else if textTrack.mode == TextTrackMode.showing {
|
|
@@ -299,7 +299,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
299
299
|
}
|
|
300
300
|
if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Enabling audioTrack \(uidValue) on TheoPlayer") }
|
|
301
301
|
for i in 0...audioTracks.count-1 {
|
|
302
|
-
|
|
302
|
+
let audioTrack: MediaTrack = audioTracks.get(i)
|
|
303
303
|
audioTrack.enabled = (audioTrack.uid == uidValue)
|
|
304
304
|
}
|
|
305
305
|
}
|
|
@@ -318,7 +318,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
318
318
|
}
|
|
319
319
|
if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Enabling videoTrack \(uidValue) on TheoPlayer") }
|
|
320
320
|
for i in 0...videoTracks.count-1 {
|
|
321
|
-
|
|
321
|
+
let videoTrack: MediaTrack = videoTracks.get(i)
|
|
322
322
|
videoTrack.enabled = (videoTrack.uid == uidValue)
|
|
323
323
|
}
|
|
324
324
|
}
|
|
@@ -162,7 +162,8 @@ class THEOplayerRCTSourceDescriptionBuilder {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
// 6. configure CMCD
|
|
165
|
-
|
|
165
|
+
let cmcd = sourceData[SD_PROP_CMCD] as? [String:Any]
|
|
166
|
+
if cmcd != nil {
|
|
166
167
|
typedSources.forEach { typedSource in
|
|
167
168
|
typedSource.cmcd = true;
|
|
168
169
|
}
|
|
@@ -32,6 +32,7 @@ public class THEOplayerRCTView: UIView {
|
|
|
32
32
|
var metadataTrackEventHandler: THEOplayerRCTSideloadedMetadataTrackEventHandler
|
|
33
33
|
var adEventHandler: THEOplayerRCTAdsEventHandler
|
|
34
34
|
var theoliveEventHandler: THEOplayerRCTTHEOliveEventHandler
|
|
35
|
+
var theoadsEventHandler: THEOplayerRCTTHEOadsEventHandler
|
|
35
36
|
var castEventHandler: THEOplayerRCTCastEventHandler
|
|
36
37
|
var presentationModeManager: THEOplayerRCTPresentationModeManager
|
|
37
38
|
var backgroundAudioManager: THEOplayerRCTBackgroundAudioManager
|
|
@@ -99,6 +100,7 @@ public class THEOplayerRCTView: UIView {
|
|
|
99
100
|
self.metadataTrackEventHandler = THEOplayerRCTSideloadedMetadataTrackEventHandler()
|
|
100
101
|
self.adEventHandler = THEOplayerRCTAdsEventHandler()
|
|
101
102
|
self.theoliveEventHandler = THEOplayerRCTTHEOliveEventHandler()
|
|
103
|
+
self.theoadsEventHandler = THEOplayerRCTTHEOadsEventHandler()
|
|
102
104
|
self.castEventHandler = THEOplayerRCTCastEventHandler()
|
|
103
105
|
self.presentationModeManager = THEOplayerRCTPresentationModeManager()
|
|
104
106
|
self.backgroundAudioManager = THEOplayerRCTBackgroundAudioManager()
|
|
@@ -121,6 +123,7 @@ public class THEOplayerRCTView: UIView {
|
|
|
121
123
|
self.deviceEventHandler.destroy()
|
|
122
124
|
self.adEventHandler.destroy()
|
|
123
125
|
self.theoliveEventHandler.destroy()
|
|
126
|
+
self.theoadsEventHandler.destroy()
|
|
124
127
|
self.castEventHandler.destroy()
|
|
125
128
|
self.nowPlayingManager.destroy()
|
|
126
129
|
self.remoteCommandsManager.destroy()
|
|
@@ -156,6 +159,7 @@ public class THEOplayerRCTView: UIView {
|
|
|
156
159
|
self.mediaTrackEventHandler.setPlayer(player)
|
|
157
160
|
self.adEventHandler.setPlayer(player)
|
|
158
161
|
self.theoliveEventHandler.setPlayer(player)
|
|
162
|
+
self.theoadsEventHandler.setPlayer(player)
|
|
159
163
|
self.castEventHandler.setPlayer(player)
|
|
160
164
|
self.nowPlayingManager.setPlayer(player)
|
|
161
165
|
self.remoteCommandsManager.setPlayer(player)
|
|
@@ -427,4 +431,12 @@ public class THEOplayerRCTView: UIView {
|
|
|
427
431
|
self.theoliveEventHandler.onNativeTHEOliveEvent = nativeTHEOliveEvent
|
|
428
432
|
if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeTHEOliveEvent prop set.") }
|
|
429
433
|
}
|
|
434
|
+
|
|
435
|
+
// MARK: - Listener based THEOADS event bridging
|
|
436
|
+
|
|
437
|
+
@objc(setOnNativeTHEOadsEvent:)
|
|
438
|
+
func setOnNativeTHEOadsEvent(nativeTHEOadsEvent: @escaping RCTDirectEventBlock) {
|
|
439
|
+
self.theoadsEventHandler.onNativeTHEOadsEvent = nativeTHEOadsEvent
|
|
440
|
+
if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeTHEOadsEvent prop set.") }
|
|
441
|
+
}
|
|
430
442
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
//
|
|
2
|
+
// THEOplayerRCTTHEOAdsAPI.swift
|
|
3
|
+
// Theoplayer
|
|
4
|
+
//
|
|
5
|
+
import Foundation
|
|
6
|
+
|
|
7
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
8
|
+
import THEOplayerTHEOadsIntegration
|
|
9
|
+
#endif
|
|
10
|
+
|
|
11
|
+
let ERROR_MESSAGE_THEOADS_UNSUPPORTED_FEATURE = "This functionality is not supported by the provided iOS SDKs"
|
|
12
|
+
let ERROR_CODE_THEOADS_ACCESS_FAILURE = "theoads_access_failure"
|
|
13
|
+
let ERROR_MESSAGE_THEOADS_ACCESS_FAILURE = "Could not access THEOplayer THEOAds Module"
|
|
14
|
+
|
|
15
|
+
@objc(THEOplayerRCTTHEOAdsAPI)
|
|
16
|
+
class THEOplayerRCTTHEOAdsAPI: NSObject, RCTBridgeModule {
|
|
17
|
+
@objc var bridge: RCTBridge!
|
|
18
|
+
|
|
19
|
+
static func moduleName() -> String! {
|
|
20
|
+
return "THEORCTTHEOAdsModule"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
24
|
+
return false
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
28
|
+
@objc(currentInterstitials:resolver:rejecter:)
|
|
29
|
+
func currentInterstitials(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
30
|
+
DispatchQueue.main.async {
|
|
31
|
+
if let theView = self.bridge.uiManager.view(forReactTag: node) as? THEOplayerRCTView,
|
|
32
|
+
let player = theView.player,
|
|
33
|
+
let theoAds = player.ads.theoAds {
|
|
34
|
+
var currentInterstitials: [[String:Any]] = []
|
|
35
|
+
for interstitial in theoAds.currentInterstitials {
|
|
36
|
+
currentInterstitials.append(THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(interstitial))
|
|
37
|
+
}
|
|
38
|
+
resolve(currentInterstitials)
|
|
39
|
+
} else {
|
|
40
|
+
if DEBUG_THEOADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not get currentInterstitials (THEOAds module unavailable).") }
|
|
41
|
+
reject(ERROR_CODE_THEOADS_ACCESS_FAILURE, ERROR_MESSAGE_THEOADS_ACCESS_FAILURE, nil)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@objc(scheduledInterstitials:resolver:rejecter:)
|
|
47
|
+
func scheduledInterstitials(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
48
|
+
DispatchQueue.main.async {
|
|
49
|
+
if let theView = self.bridge.uiManager.view(forReactTag: node) as? THEOplayerRCTView,
|
|
50
|
+
let player = theView.player,
|
|
51
|
+
let theoAds = player.ads.theoAds {
|
|
52
|
+
var scheduledInterstitials: [[String:Any]] = []
|
|
53
|
+
for interstitial in theoAds.scheduledInterstitials {
|
|
54
|
+
scheduledInterstitials.append(THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(interstitial))
|
|
55
|
+
}
|
|
56
|
+
resolve(scheduledInterstitials)
|
|
57
|
+
} else {
|
|
58
|
+
if DEBUG_THEOADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not get scheduledInterstitials (THEOAds module unavailable).") }
|
|
59
|
+
reject(ERROR_CODE_THEOADS_ACCESS_FAILURE, ERROR_MESSAGE_THEOADS_ACCESS_FAILURE, nil)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@objc(replaceAdTagParameters:adTagParameters:)
|
|
65
|
+
func replaceAdTagParameters(_ node: NSNumber, adTagParameters: [String:Any]?) -> Void {
|
|
66
|
+
DispatchQueue.main.async {
|
|
67
|
+
if let theView = self.bridge.uiManager.view(forReactTag: node) as? THEOplayerRCTView,
|
|
68
|
+
let player = theView.player,
|
|
69
|
+
let theoAds = player.ads.theoAds {
|
|
70
|
+
if let newParams = adTagParameters as? [String: String] {
|
|
71
|
+
theoAds.replaceAdTagParams(params: newParams)
|
|
72
|
+
if DEBUG_THEOADS_API { PrintUtils.printLog(logText: "[NATIVE] THEOAds adTagParameters replaced.") }
|
|
73
|
+
} else {
|
|
74
|
+
if DEBUG_THEOADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not replace THEOAds adTagParameters.") }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
#else
|
|
81
|
+
|
|
82
|
+
@objc(currentInterstitials:resolver:rejecter:)
|
|
83
|
+
func currentInterstitials(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
84
|
+
if DEBUG_THEOADS_API { print(ERROR_MESSAGE_THEOADS_UNSUPPORTED_FEATURE) }
|
|
85
|
+
reject(ERROR_CODE_THEOADS_ACCESS_FAILURE, ERROR_MESSAGE_THEOADS_ACCESS_FAILURE, nil)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@objc(scheduledInterstitials:resolver:rejecter:)
|
|
89
|
+
func scheduledInterstitials(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
90
|
+
if DEBUG_THEOADS_API { print(ERROR_MESSAGE_THEOADS_UNSUPPORTED_FEATURE) }
|
|
91
|
+
reject(ERROR_CODE_THEOADS_ACCESS_FAILURE, ERROR_MESSAGE_THEOADS_ACCESS_FAILURE, nil)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@objc(replaceAdTagParameters:token:)
|
|
95
|
+
func replaceAdTagParameters(_ node: NSNumber, adTagParameters: [String:Any]?) -> Void {
|
|
96
|
+
if DEBUG_THEOADS_API { print(ERROR_MESSAGE_THEOADS_UNSUPPORTED_FEATURE) }
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
#endif
|
|
100
|
+
|
|
101
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// THEOplayerRCTTHEOadsEventAdapter.swift
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
import THEOplayerSDK
|
|
5
|
+
|
|
6
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
7
|
+
@_spi(Core) import THEOplayerTHEOadsIntegration
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
// general
|
|
11
|
+
let PROP_INTERSTITIAL_ID: String = "id"
|
|
12
|
+
let PROP_INTERSTITIAL_TYPE: String = "type"
|
|
13
|
+
let PROP_INTERSTITIAL_START_TIME: String = "startTime"
|
|
14
|
+
let PROP_INTERSTITIAL_DURATION: String = "duration"
|
|
15
|
+
|
|
16
|
+
// adbreak specific
|
|
17
|
+
let PROP_ADBREAK_INTERSTITIAL_LAYOUT: String = "layout"
|
|
18
|
+
let PROP_ADBREAK_INTERSTITIAL_BACKDROPURI: String = "backdropUri"
|
|
19
|
+
let PROP_ADBREAK_INTERSTITIAL_ADS: String = "ads"
|
|
20
|
+
|
|
21
|
+
// overlay specific
|
|
22
|
+
let PROP_OVERLAY_INTERSTITIAL_IMAGE_URL: String = "imageUrl"
|
|
23
|
+
let PROP_OVERLAY_INTERSTITIAL_CLICKTHROUGH: String = "clickThrough"
|
|
24
|
+
let PROP_OVERLAY_INTERSTITIAL_POSITION: String = "position"
|
|
25
|
+
let PROP_OVERLAY_INTERSTITIAL_SIZE: String = "size"
|
|
26
|
+
|
|
27
|
+
class THEOplayerRCTTHEOadsEventAdapter {
|
|
28
|
+
|
|
29
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
30
|
+
class func fromInterstitial(_ interstitial: THEOplayerTHEOadsIntegration.Interstitial?) -> [String:Any] {
|
|
31
|
+
guard let interstitial = interstitial else {
|
|
32
|
+
return [:]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var interstitialData: [String:Any] = [:]
|
|
36
|
+
interstitialData[PROP_INTERSTITIAL_ID] = interstitial.id
|
|
37
|
+
interstitialData[PROP_INTERSTITIAL_TYPE] = THEOplayerRCTTHEOadsEventAdapter.fromInterstitialType(interstitial.type)
|
|
38
|
+
interstitialData[PROP_INTERSTITIAL_START_TIME] = interstitial.startTime
|
|
39
|
+
if let duration = interstitial.duration {
|
|
40
|
+
interstitialData[PROP_INTERSTITIAL_DURATION] = duration
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ADBREAK-INTERSTITIAL SPECIFIC:
|
|
44
|
+
if let adBreakInterstitial = interstitial as? THEOplayerTHEOadsIntegration.AdBreakInterstitial {
|
|
45
|
+
interstitialData[PROP_ADBREAK_INTERSTITIAL_LAYOUT] = THEOplayerRCTTHEOadsEventAdapter.fromInterstitialLayout(adBreakInterstitial.layout)
|
|
46
|
+
if let backdropUri = adBreakInterstitial.backdropUri {
|
|
47
|
+
interstitialData[PROP_ADBREAK_INTERSTITIAL_BACKDROPURI] = backdropUri
|
|
48
|
+
}
|
|
49
|
+
let interstitialAds = adBreakInterstitial.ads
|
|
50
|
+
var ads: [[String:Any]] = []
|
|
51
|
+
for ad in interstitialAds {
|
|
52
|
+
ads.append(THEOplayerRCTAdAdapter.fromAd(ad: ad))
|
|
53
|
+
}
|
|
54
|
+
interstitialData[PROP_ADBREAK_INTERSTITIAL_ADS] = ads
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// OVERLAY-INTERSTITIAL SPECIFIC
|
|
58
|
+
if let overlayInterstitial = interstitial as? THEOplayerTHEOadsIntegration.OverlayInterstitial {
|
|
59
|
+
if let imageUrl = overlayInterstitial.imageUrl {
|
|
60
|
+
interstitialData[PROP_OVERLAY_INTERSTITIAL_IMAGE_URL] = imageUrl
|
|
61
|
+
}
|
|
62
|
+
if let clickThrough = overlayInterstitial.clickThrough {
|
|
63
|
+
interstitialData[PROP_OVERLAY_INTERSTITIAL_CLICKTHROUGH] = clickThrough
|
|
64
|
+
}
|
|
65
|
+
interstitialData[PROP_OVERLAY_INTERSTITIAL_POSITION] = THEOplayerRCTTHEOadsEventAdapter.fromOverlayPosition(overlayInterstitial.position)
|
|
66
|
+
interstitialData[PROP_OVERLAY_INTERSTITIAL_SIZE] = THEOplayerRCTTHEOadsEventAdapter.fromOverlaySize(overlayInterstitial.size)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return interstitialData
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
class func fromInterstitialType(_ interstitialType: THEOplayerTHEOadsIntegration.InterstitialType) -> String {
|
|
73
|
+
switch interstitialType {
|
|
74
|
+
case InterstitialType.adbreak:
|
|
75
|
+
return "adbreak"
|
|
76
|
+
default:
|
|
77
|
+
return "overlay"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
class func fromInterstitialLayout(_ interstitialLayout: THEOplayerTHEOadsIntegration.THEOadsLayout) -> String {
|
|
82
|
+
switch interstitialLayout {
|
|
83
|
+
case THEOadsLayout.single:
|
|
84
|
+
return "single"
|
|
85
|
+
case THEOadsLayout.double:
|
|
86
|
+
return "double"
|
|
87
|
+
default:
|
|
88
|
+
return "l-shape"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
class func fromOverlayPosition(_ overlayPosition: THEOplayerTHEOadsIntegration.OverlayPosition) -> [String:Any] {
|
|
93
|
+
var overlayPositionData: [String:Any] = [:]
|
|
94
|
+
if let left = overlayPosition.left {
|
|
95
|
+
overlayPositionData["left"] = left
|
|
96
|
+
}
|
|
97
|
+
if let right = overlayPosition.right {
|
|
98
|
+
overlayPositionData["right"] = right
|
|
99
|
+
}
|
|
100
|
+
if let top = overlayPosition.top {
|
|
101
|
+
overlayPositionData["top"] = top
|
|
102
|
+
}
|
|
103
|
+
if let bottom = overlayPosition.bottom {
|
|
104
|
+
overlayPositionData["bottom"] = bottom
|
|
105
|
+
}
|
|
106
|
+
return overlayPositionData
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
class func fromOverlaySize(_ overlaySize: THEOplayerTHEOadsIntegration.OverlaySize) -> [String:Any] {
|
|
110
|
+
var overlaySizeData: [String:Any] = [:]
|
|
111
|
+
overlaySizeData["width"] = overlaySize.width
|
|
112
|
+
overlaySizeData["height"] = overlaySize.height
|
|
113
|
+
return overlaySizeData
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
#endif
|
|
117
|
+
|
|
118
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// THEOplayerRCTTHEOadsEventHandler.swift
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
import THEOplayerSDK
|
|
5
|
+
|
|
6
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
7
|
+
import THEOplayerTHEOadsIntegration
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
let EVENT_TYPE_ADD_INTERSTITIAL: String = "addinterstitial"
|
|
11
|
+
let EVENT_TYPE_INTERSTITIAL_BEGIN: String = "interstitialbegin"
|
|
12
|
+
let EVENT_TYPE_INTERSTITIAL_END: String = "interstitialend"
|
|
13
|
+
let EVENT_TYPE_INTERSTITIAL_UPDATE: String = "interstitialupdate"
|
|
14
|
+
let EVENT_TYPE_INTERSTITIAL_ERROR: String = "interstitialerror"
|
|
15
|
+
|
|
16
|
+
let THEOADS_EVENT_PROP_TYPE: String = "type"
|
|
17
|
+
let THEOADS_EVENT_PROP_INTERSTITIAL: String = "interstitial"
|
|
18
|
+
let THEOADS_EVENT_PROP_MESSAGE: String = "message"
|
|
19
|
+
|
|
20
|
+
class THEOplayerRCTTHEOadsEventHandler {
|
|
21
|
+
// MARK: Members
|
|
22
|
+
private weak var player: THEOplayer?
|
|
23
|
+
|
|
24
|
+
// MARK: Events
|
|
25
|
+
var onNativeTHEOadsEvent: RCTDirectEventBlock?
|
|
26
|
+
|
|
27
|
+
// MARK: THEOAds Listeners
|
|
28
|
+
private var addInterstitialListener: EventListener?
|
|
29
|
+
private var interstitialBeginListener: EventListener?
|
|
30
|
+
private var interstitialEndListener: EventListener?
|
|
31
|
+
private var interstitialUpdateListener: EventListener?
|
|
32
|
+
private var interstitialErrorListener: EventListener?
|
|
33
|
+
|
|
34
|
+
// MARK: - destruction
|
|
35
|
+
func destroy() {
|
|
36
|
+
// dettach listeners
|
|
37
|
+
self.dettachListeners()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// MARK: - player setup / breakdown
|
|
41
|
+
func setPlayer(_ player: THEOplayer) {
|
|
42
|
+
self.player = player;
|
|
43
|
+
|
|
44
|
+
// attach listeners
|
|
45
|
+
self.attachListeners()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// MARK: - attach/dettach Listeners
|
|
49
|
+
private func attachListeners() {
|
|
50
|
+
guard let player = self.player else {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
55
|
+
// ADD_INTERSTITIAL
|
|
56
|
+
self.addInterstitialListener = player.ads.theoAds?.addEventListener(type: THEOadsEventTypes.ADD_INTERSTITIAL) { [weak self] event in
|
|
57
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AddInterstitial event from THEOplayer.ads.theoAds") }
|
|
58
|
+
if let forwardedTHEOadsEvent = self?.onNativeTHEOadsEvent {
|
|
59
|
+
forwardedTHEOadsEvent([
|
|
60
|
+
THEOADS_EVENT_PROP_TYPE: EVENT_TYPE_ADD_INTERSTITIAL,
|
|
61
|
+
THEOADS_EVENT_PROP_INTERSTITIAL: THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(event.interstitial)
|
|
62
|
+
])
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AddInterstitial listener attached to THEOplayer.ads.theoAds") }
|
|
66
|
+
|
|
67
|
+
// INTERSTITIAL_BEGIN
|
|
68
|
+
self.interstitialBeginListener = player.ads.theoAds?.addEventListener(type: THEOadsEventTypes.INTERSTITIAL_BEGIN) { [weak self] event in
|
|
69
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received InterstitialBegin event from THEOplayer.ads.theoAds") }
|
|
70
|
+
if let forwardedTHEOadsEvent = self?.onNativeTHEOadsEvent {
|
|
71
|
+
forwardedTHEOadsEvent([
|
|
72
|
+
THEOADS_EVENT_PROP_TYPE: EVENT_TYPE_INTERSTITIAL_BEGIN,
|
|
73
|
+
THEOADS_EVENT_PROP_INTERSTITIAL: THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(event.interstitial)
|
|
74
|
+
])
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialBegin listener attached to THEOplayer.ads.theoAds") }
|
|
78
|
+
|
|
79
|
+
// INTERSTITIAL_END
|
|
80
|
+
self.interstitialEndListener = player.ads.theoAds?.addEventListener(type: THEOadsEventTypes.INTERSTITIAL_END) { [weak self] event in
|
|
81
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received InterstitialEnd event from THEOplayer.ads.theoAds") }
|
|
82
|
+
if let forwardedTHEOadsEvent = self?.onNativeTHEOadsEvent {
|
|
83
|
+
forwardedTHEOadsEvent([
|
|
84
|
+
THEOADS_EVENT_PROP_TYPE: EVENT_TYPE_INTERSTITIAL_END,
|
|
85
|
+
THEOADS_EVENT_PROP_INTERSTITIAL: THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(event.interstitial)
|
|
86
|
+
])
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialEnd listener attached to THEOplayer.ads.theoAds") }
|
|
90
|
+
|
|
91
|
+
// INTERSTITIAL_UPDATE
|
|
92
|
+
self.interstitialUpdateListener = player.ads.theoAds?.addEventListener(type: THEOadsEventTypes.INTERSTITIAL_UPDATE) { [weak self] event in
|
|
93
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received InterstitialUpdate event from THEOplayer.ads.theoAds") }
|
|
94
|
+
if let forwardedTHEOadsEvent = self?.onNativeTHEOadsEvent {
|
|
95
|
+
forwardedTHEOadsEvent([
|
|
96
|
+
THEOADS_EVENT_PROP_TYPE: EVENT_TYPE_INTERSTITIAL_UPDATE,
|
|
97
|
+
THEOADS_EVENT_PROP_INTERSTITIAL: THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(event.interstitial)
|
|
98
|
+
])
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialUpdate listener attached to THEOplayer.ads.theoAds") }
|
|
102
|
+
|
|
103
|
+
// INTERSTITIAL_ERROR
|
|
104
|
+
self.interstitialErrorListener = player.ads.theoAds?.addEventListener(type: THEOadsEventTypes.INTERSTITIAL_ERROR) { [weak self] event in
|
|
105
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received InterstitialError event from THEOplayer.ads.theoAds") }
|
|
106
|
+
if let forwardedTHEOadsEvent = self?.onNativeTHEOadsEvent {
|
|
107
|
+
var interstitialData: [String: Any] = [:]
|
|
108
|
+
interstitialData[THEOADS_EVENT_PROP_TYPE] = EVENT_TYPE_INTERSTITIAL_ERROR
|
|
109
|
+
interstitialData[THEOADS_EVENT_PROP_INTERSTITIAL] = THEOplayerRCTTHEOadsEventAdapter.fromInterstitial(event.interstitial)
|
|
110
|
+
if let errorMessage = event.message {
|
|
111
|
+
interstitialData[THEOADS_EVENT_PROP_MESSAGE] = errorMessage
|
|
112
|
+
}
|
|
113
|
+
forwardedTHEOadsEvent(interstitialData)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialError listener attached to THEOplayer.ads.theoAds") }
|
|
117
|
+
|
|
118
|
+
#endif
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private func dettachListeners() {
|
|
122
|
+
guard let player = self.player else {
|
|
123
|
+
return
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
#if canImport(THEOplayerTHEOadsIntegration)
|
|
127
|
+
// ADD_INTERSTITIAL
|
|
128
|
+
if let addInterstitialListener = self.addInterstitialListener {
|
|
129
|
+
player.ads.theoAds?.removeEventListener(
|
|
130
|
+
type: THEOadsEventTypes.ADD_INTERSTITIAL,
|
|
131
|
+
listener: addInterstitialListener
|
|
132
|
+
)
|
|
133
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AddInterstitial listener detached from THEOplayer.ads.theoAds") }
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// INTERSTITIAL_BEGIN
|
|
137
|
+
if let interstitialBeginListener = self.interstitialBeginListener {
|
|
138
|
+
player.ads.theoAds?.removeEventListener(
|
|
139
|
+
type: THEOadsEventTypes.INTERSTITIAL_BEGIN,
|
|
140
|
+
listener: interstitialBeginListener
|
|
141
|
+
)
|
|
142
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialBegin listener detached from THEOplayer.ads.theoAds") }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// INTERSTITIAL_END
|
|
146
|
+
if let interstitialEndListener = self.interstitialEndListener {
|
|
147
|
+
player.ads.theoAds?.removeEventListener(
|
|
148
|
+
type: THEOadsEventTypes.INTERSTITIAL_END,
|
|
149
|
+
listener: interstitialEndListener
|
|
150
|
+
)
|
|
151
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialEnd listener detached from THEOplayer.ads.theoAds") }
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// INTERSTITIAL_UPDATE
|
|
155
|
+
if let interstitialUpdateListener = self.interstitialUpdateListener {
|
|
156
|
+
player.ads.theoAds?.removeEventListener(
|
|
157
|
+
type: THEOadsEventTypes.INTERSTITIAL_UPDATE,
|
|
158
|
+
listener: interstitialUpdateListener
|
|
159
|
+
)
|
|
160
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialUpdate listener detached from THEOplayer.ads.theoAds") }
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// INTERSTITIAL_ERROR
|
|
164
|
+
if let interstitialErrorListener = self.interstitialErrorListener {
|
|
165
|
+
player.ads.theoAds?.removeEventListener(
|
|
166
|
+
type: THEOadsEventTypes.INTERSTITIAL_ERROR,
|
|
167
|
+
listener: interstitialErrorListener
|
|
168
|
+
)
|
|
169
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] InterstitialError listener detached from THEOplayer.ads.theoAds") }
|
|
170
|
+
}
|
|
171
|
+
#endif
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -17,7 +17,6 @@ extension THEOplayerRCTSourceDescriptionBuilder {
|
|
|
17
17
|
static func buildTHEOliveDescription(_ theoliveData: [String:Any]) -> TypedSource? {
|
|
18
18
|
#if canImport(THEOplayerTHEOliveIntegration)
|
|
19
19
|
if let src = theoliveData[SD_PROP_SRC] as? String {
|
|
20
|
-
//let headers = typedSourceData[SD_PROP_HEADERS] as? [String:String]
|
|
21
20
|
return TheoLiveSource(channelId: src)
|
|
22
21
|
}
|
|
23
22
|
#endif
|
|
@@ -24,7 +24,7 @@ class THEOplayerRCTTHEOliveEventHandler {
|
|
|
24
24
|
// MARK: Events
|
|
25
25
|
var onNativeTHEOliveEvent: RCTDirectEventBlock?
|
|
26
26
|
|
|
27
|
-
// MARK:
|
|
27
|
+
// MARK: THEOlive Listeners
|
|
28
28
|
private var distributionLoadStartListener: EventListener?
|
|
29
29
|
private var distributionOfflineListener: EventListener?
|
|
30
30
|
private var endPointLoadedListener: EventListener?
|
|
@@ -4,7 +4,7 @@ import Foundation
|
|
|
4
4
|
import THEOplayerSDK
|
|
5
5
|
|
|
6
6
|
#if canImport(THEOplayerTHEOliveIntegration)
|
|
7
|
-
|
|
7
|
+
import THEOplayerTHEOliveIntegration
|
|
8
8
|
#endif
|
|
9
9
|
|
|
10
10
|
extension THEOplayerRCTView {
|
|
@@ -15,11 +15,7 @@ extension THEOplayerRCTView {
|
|
|
15
15
|
|
|
16
16
|
#if canImport(THEOplayerTHEOliveIntegration)
|
|
17
17
|
let THEOliveConfig = THEOliveConfiguration(externalSessionId: self.theoliveConfig.externalSessionId,
|
|
18
|
-
experimentalHespContentPlayer: !self.theoliveConfig.useLegacyTHEOlive,
|
|
19
18
|
discoveryUrl: self.theoliveConfig.discoveryUrl)
|
|
20
|
-
if DEBUG_THEOLIVE_API {
|
|
21
|
-
PrintUtils.printLog(logText: "[NATIVE] Using \(self.theoliveConfig.useLegacyTHEOlive ? "legacy" : "new") theolive pipeline.")
|
|
22
|
-
}
|
|
23
19
|
|
|
24
20
|
self.THEOliveIntegration = THEOliveIntegrationFactory.createIntegration(with: THEOliveConfig)
|
|
25
21
|
player.addIntegration(self.THEOliveIntegration!)
|
|
@@ -6,7 +6,6 @@ import THEOplayerSDK
|
|
|
6
6
|
struct THEOliveConfig {
|
|
7
7
|
var externalSessionId: String?
|
|
8
8
|
var discoveryUrl: String?
|
|
9
|
-
var useLegacyTHEOlive: Bool = false
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
extension THEOplayerRCTView {
|
|
@@ -15,7 +14,6 @@ extension THEOplayerRCTView {
|
|
|
15
14
|
if let theoLiveConfig = configDict["theoLive"] as? NSDictionary {
|
|
16
15
|
self.theoliveConfig.externalSessionId = theoLiveConfig["externalSessionId"] as? String
|
|
17
16
|
self.theoliveConfig.discoveryUrl = theoLiveConfig["discoveryUrl"] as? String
|
|
18
|
-
self.theoliveConfig.useLegacyTHEOlive = theoLiveConfig["useLegacyTHEOlive"] as? Bool ?? false
|
|
19
17
|
}
|
|
20
18
|
}
|
|
21
19
|
}
|