Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/giant-melons-leave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@theoplayer/react-native-analytics-adobe': patch
---

Fixed an issue on Android where the properties from the passed metadata was not included with the `sessions` request.
5 changes: 5 additions & 0 deletions .changeset/huge-groups-appear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@theoplayer/react-native-analytics-adobe': patch
---

Fixed an issue where the required `visitor.marketingCloudUserId` property was not included with the `sessions` request.
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class AdobeConnector(

private var isPlayingAd = false

private var customMetadata: AdobeMetaData = AdobeMetaData()
private var currentMetadata: AdobeMetaData = AdobeMetaData()

private var currentChapter: TextTrackCue? = null

Expand Down Expand Up @@ -143,7 +143,7 @@ class AdobeConnector(
private val onAdSkip: EventListener<AdSkipEvent> = EventListener { event -> handleAdSkip() }

init {
this.customMetadata = metadata ?: AdobeMetaData()
this.currentMetadata = metadata ?: AdobeMetaData()
this.customUserAgent = userAgent ?: buildUserAgent()

addEventListeners()
Expand All @@ -156,7 +156,7 @@ class AdobeConnector(
}

fun updateMetadata(metadata: AdobeMetaData) {
customMetadata.add(metadata)
currentMetadata.add(metadata)
}

fun setError(metadata: AdobeMetaData) {
Expand Down Expand Up @@ -405,6 +405,9 @@ class AdobeConnector(
return
}
val initialBody = createBaseRequest(AdobeEventTypes.SESSION_START)
/**
* https://experienceleague.adobe.com/en/docs/media-analytics/using/implementation/analytics-only/streaming-media-apis/mc-api-req-params
*/
initialBody.params = mutableMapOf(
"analytics.reportSuite" to sid,
"analytics.trackingServer" to trackingUrl,
Expand All @@ -414,10 +417,12 @@ class AdobeConnector(
"media.length" to mediaLength,
"media.playerName" to "THEOplayer",
"visitor.marketingCloudOrgId" to this.ecid,
"visitor.marketingCloudUserId" to (currentMetadata.customMetadata?.get("visitorMID") ?: NA)
)
player.source?.metadata?.get<String>("title")?.let {
initialBody.params?.put("media.name", it)
}
currentMetadata.params?.forEach { initialBody.params?.set(it.key, it.value) }

val body = addCustomMetadata(AdobeEventTypes.SESSION_START, initialBody)

Expand Down Expand Up @@ -467,9 +472,9 @@ class AdobeConnector(
AdobeEventTypes.SESSION_START
)
) {
body.customMetadata = customMetadata.customMetadata ?: mutableMapOf()
body.customMetadata = currentMetadata.customMetadata ?: mutableMapOf()
}
body.qoeData = (body.qoeData.orEmpty() + customMetadata.qoeData.orEmpty()).toMutableMap()
body.qoeData = (body.qoeData.orEmpty() + currentMetadata.qoeData.orEmpty()).toMutableMap()
return body
}

Expand Down
6 changes: 4 additions & 2 deletions adobe/ios/Connector/AdobeConnector.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ enum ContentType: String {

let CONTENT_PING_INTERVAL = 10.0
let AD_PING_INTERVAL = 1.0
let NA = "N/A"

class AdobeConnector {
private weak var player: THEOplayer?
Expand Down Expand Up @@ -361,12 +362,13 @@ class AdobeConnector {
var params: [String:Any] = [:]
params["analytics.reportSuite"] = self.sid
params["analytics.trackingServer"] = self.trackingUrl
params["media.channel"] = "N/A"
params["media.channel"] = NA
params["media.contentType"] = self.getContentType().rawValue
params["media.id"] = "N/A"
params["media.id"] = NA
params["media.length"] = mediaLength
params["media.playerName"] = "THEOplayer"
params["visitor.marketingCloudOrgId"] = self.ecid
params["visitor.marketingCloudUserId"] = self.currentMetadata?.customMetadata?["visitorMID"] ?? NA
if let friendlyName = player.source?.metadata?.title {
params["media.name"] = friendlyName
}
Expand Down
21 changes: 13 additions & 8 deletions adobe/src/internal/DefaultAdobeConnectorAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { AdobeConnectorAdapter } from './AdobeConnectorAdapter';
const TAG = 'AdobeConnector';
const CONTENT_PING_INTERVAL = 10000;
const AD_PING_INTERVAL = 1000;
const NA = 'N/A';

/**
* An all-TypeScript implementation of the AdobeConnector.
Expand Down Expand Up @@ -47,7 +48,7 @@ export class DefaultAdobeConnectorAdapter implements AdobeConnectorAdapter {

private isPlayingAd = false;

private customMetadata: AdobeMetaData = {};
private currentMetadata: AdobeMetaData = {};

private currentChapter: TextTrackCue | undefined;

Expand All @@ -71,7 +72,7 @@ export class DefaultAdobeConnectorAdapter implements AdobeConnectorAdapter {
this.sid = sid;
this.debug = debug;
this.trackingUrl = trackingUrl;
this.customMetadata = { ...this.customMetadata, ...metadata };
this.currentMetadata = { ...this.currentMetadata, ...metadata };
this.customUserAgent = userAgent || buildUserAgent();

this.addEventListeners();
Expand All @@ -84,7 +85,7 @@ export class DefaultAdobeConnectorAdapter implements AdobeConnectorAdapter {
}

updateMetadata(metadata: AdobeMetaData): void {
this.customMetadata = { ...this.customMetadata, ...metadata };
this.currentMetadata = { ...this.currentMetadata, ...metadata };
}

setError(metadata: AdobeMetaData): void {
Expand Down Expand Up @@ -316,17 +317,21 @@ export class DefaultAdobeConnectorAdapter implements AdobeConnectorAdapter {
'media.name': this.player.source.metadata.title,
};
}
/**
* https://experienceleague.adobe.com/en/docs/media-analytics/using/implementation/analytics-only/streaming-media-apis/mc-api-req-params
*/
initialBody.params = {
'analytics.reportSuite': this.sid,
'analytics.trackingServer': this.trackingUrl,
'media.channel': 'N/A',
'media.channel': NA,
'media.contentType': this.getContentType(),
'media.id': 'N/A',
'media.id': NA,
'media.length': mediaLength,
'media.playerName': 'THEOplayer', // TODO make distinctions between platforms?
'visitor.marketingCloudOrgId': this.ecid,
'visitor.marketingCloudUserId': this.currentMetadata.customMetadata?.['visitorMID'] || NA,
...friendlyName,
...this.customMetadata.params,
...this.currentMetadata.params,
};
const body = this.addCustomMetadata(AdobeEventTypes.SESSION_START, initialBody);

Expand Down Expand Up @@ -370,11 +375,11 @@ export class DefaultAdobeConnectorAdapter implements AdobeConnectorAdapter {
eventType === AdobeEventTypes.AD_START ||
eventType === AdobeEventTypes.SESSION_START
) {
body.customMetadata = { ...this.customMetadata.customMetadata };
body.customMetadata = { ...this.currentMetadata.customMetadata };
}
// TODO check params which are fine and which need more limitations?
}
body.qoeData = { ...body.qoeData, ...this.customMetadata.qoeData };
body.qoeData = { ...body.qoeData, ...this.currentMetadata.qoeData };
return body;
}

Expand Down
Loading