Skip to content

Commit 4b1978d

Browse files
authored
Merge pull request #105 from THEOplayer/bugfix/conviva/persistent-metadata
Bugfix/conviva/persistent metadata
2 parents 306ca4a + 0f854be commit 4b1978d

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
1011
## [10.8.0] - 2026-01-15
1112

1213
### Added
@@ -15,6 +16,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1516
- Added support for simultaneous multi-source caching with sideloaded subtitles. Previously there was a limitation of caching only a single task at a time.
1617
- Added support to make a sideloaded subtitle selected for caching by default. Use the `isDefault` property in `SSTextTrackDescription` or `TextTrackDescription`. Only one default track can be added.
1718

19+
### Fixed
20+
21+
- Conviva
22+
- Fixed an issue where the initial metadata passed to the convivaConnector was not persistent across Conviva sessions.
23+
- Fixed an issue where the session's assetName was not configurable by setContentInfo, which has higher precedence than source.metadata.title.
24+
1825
## [10.7.0] - 2025-12-18
1926

2027
### Changed

Code/Conviva/Source/Base/ConvivaConnector.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,22 @@ public class ConvivaConnector {
2424
public convenience init?(
2525
configuration: ConvivaConfiguration,
2626
player: THEOplayer,
27+
convivaMetadata: [String: Any] = [:],
2728
externalEventDispatcher: THEOplayerSDK.EventDispatcherProtocol? = nil
2829
) {
2930
guard let endPoints = ConvivaEndpoints(configuration: configuration) else { return nil }
30-
self.init(conviva: endPoints, player: player, externalEventDispatcher: externalEventDispatcher)
31+
self.init(conviva: endPoints, player: player, convivaMetadata: convivaMetadata, externalEventDispatcher: externalEventDispatcher)
3132
}
3233

33-
init(conviva: ConvivaEndpoints, player: THEOplayer, externalEventDispatcher: THEOplayerSDK.EventDispatcherProtocol? = nil) {
34+
init(conviva: ConvivaEndpoints, player: THEOplayer, convivaMetadata: [String: Any], externalEventDispatcher: THEOplayerSDK.EventDispatcherProtocol? = nil) {
3435
self.endPoints = conviva
3536

3637
// App level handling
3738
self.appHandler = AppHandler(endpoints: self.endPoints, storage: self.storage)
3839
self.appEventForwarder = AppEventForwarder(handler: self.appHandler)
3940

4041
// Player level handling
41-
self.playerHandler = PlayerHandler(endpoints: self.endPoints, storage: self.storage)
42+
self.playerHandler = PlayerHandler(endpoints: self.endPoints, storage: self.storage, convivaMetadata: convivaMetadata)
4243
self.playerEventForwarder = PlayerEventForwarder(player: player, handler: self.playerHandler)
4344

4445
// Ad level handling

Code/Conviva/Source/Base/ConvivaStorage.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
class ConvivaStorage {
66
private(set) var metrics: [String:Any] = [:]
77
private(set) var metadata: [String:Any] = [:]
8+
private(set) var persistentMetadata: [String:Any] = [:]
9+
10+
// MARK: PERSISTENT METADATA
11+
func storePersistentMetadata(_ map: [String:Any]) {
12+
persistentMetadata = map
13+
}
814

915
// MARK: METADATA
1016
func storeMetadataEntry(key: String, value: Any) {
@@ -18,7 +24,7 @@ class ConvivaStorage {
1824
}
1925

2026
func metadataEntryForKey(_ key: String) -> Any? {
21-
return self.metadata[key]
27+
return self.metadata[key] ?? self.persistentMetadata[key]
2228
}
2329

2430
func hasMetadataEntryForKey(_ key: String) -> Bool {

Code/Conviva/Source/Base/Events/ConvivaHandlers/PlayerHandler.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,12 @@ class PlayerHandler {
3636
private weak var storage: ConvivaStorage?
3737
private var playerState: PlayerState = .CONVIVA_UNKNOWN
3838

39-
init(endpoints: ConvivaEndpoints, storage: ConvivaStorage) {
39+
init(endpoints: ConvivaEndpoints, storage: ConvivaStorage, convivaMetadata: [String:Any]) {
4040
self.endpoints = endpoints
4141
self.storage = storage
42+
43+
// store initial metadata as persistent metadata
44+
self.storage?.storePersistentMetadata(convivaMetadata)
4245
}
4346

4447
func setContentInfo(_ contentInfo: [String: Any]) {
@@ -71,12 +74,12 @@ class PlayerHandler {
7174
log("handling maybeReportPlaybackRequested")
7275
guard !self.currentConvivaSession.started else { return }
7376

74-
// collect standard metadata like playerName, assetName, stramUrl, isLive, ...
77+
// collect and send standard metadata like playerName, assetName, streamUrl, isLive, ...
7578
self.updateMetadata()
7679

77-
// start session on conviva
80+
// start session on conviva and send persistent metadata
7881
if let storage = self.storage {
79-
self.endpoints?.videoAnalytics.reportPlaybackRequested(storage.metadata)
82+
self.endpoints?.videoAnalytics.reportPlaybackRequested(storage.persistentMetadata)
8083
}
8184

8285
// mark conviva session as started
@@ -243,7 +246,7 @@ class PlayerHandler {
243246
var metadata: [String: Any] = [
244247
CIS_SSDK_METADATA_PLAYER_NAME: self.storage?.metadataEntryForKey(CIS_SSDK_METADATA_PLAYER_NAME) ?? Utilities.playerName,
245248
CIS_SSDK_METADATA_STREAM_URL: url,
246-
CIS_SSDK_METADATA_ASSET_NAME: convivaSessionSource.description.metadata?.title ?? Utilities.defaultStringValue,
249+
CIS_SSDK_METADATA_ASSET_NAME: self.storage?.metadataEntryForKey(CIS_SSDK_METADATA_ASSET_NAME) ?? convivaSessionSource.description.metadata?.title ?? Utilities.defaultStringValue,
247250
]
248251

249252
let adDescriptionMetadata: [String: Any] = collectAdDescriptionMetadata(from: convivaSessionSource.description)

0 commit comments

Comments
 (0)