Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
080bc83
Add alloy dependency
tvanlaerhoven Dec 5, 2025
58fab13
Use alloy sdk for Web
tvanlaerhoven Dec 5, 2025
78264dc
Update hook
tvanlaerhoven Dec 5, 2025
599aaf8
Reuse alloy clients
tvanlaerhoven Dec 5, 2025
9810cb8
Use adobe edge mobile sdk for android
tvanlaerhoven Dec 8, 2025
bef53a9
Use Mobile core
tvanlaerhoven Dec 10, 2025
2df9a5c
Fix hook properties
tvanlaerhoven Dec 11, 2025
88dcbd4
Fix optional properties
tvanlaerhoven Dec 11, 2025
36927c1
Fix session start
tvanlaerhoven Dec 11, 2025
9722da1
Update docs
tvanlaerhoven Dec 11, 2025
125e243
Extract ID & channel from metadata
tvanlaerhoven Dec 11, 2025
771bddb
Update readme
tvanlaerhoven Dec 11, 2025
dd5dd0b
Update properties
tvanlaerhoven Dec 11, 2025
04357ea
Fix test
tvanlaerhoven Dec 11, 2025
8a8d4e4
Simplify connector
tvanlaerhoven Dec 12, 2025
4a979ae
Fix empty chapter name
tvanlaerhoven Dec 12, 2025
776b3f6
Create tracker based AdobeEdgeConnector for iOS
wvanhaevre Dec 12, 2025
669b7b1
Update AdobeEdgeConnector for iOS to use new handler
wvanhaevre Dec 12, 2025
2bf7526
Add Adobe pod dependencies
wvanhaevre Dec 12, 2025
b2423df
Rework connector API to match with new connector.
wvanhaevre Dec 12, 2025
d2caf4c
Fix empty chapter name
tvanlaerhoven Dec 12, 2025
93ebd11
Drop unused types
wvanhaevre Dec 12, 2025
bbbcb0a
Add event queue
tvanlaerhoven Dec 15, 2025
f86e2db
iOS code improvements
wvanhaevre Dec 15, 2025
56249b4
unset sessionInProgress on session end
wvanhaevre Dec 15, 2025
7708d91
Don't log timeUpdate events
wvanhaevre Dec 15, 2025
9e7cc7d
Move Utils closer to react native bridge code
wvanhaevre Dec 15, 2025
2be7429
Align web connector
tvanlaerhoven Dec 15, 2025
a125ff9
Update types
tvanlaerhoven Dec 15, 2025
1c72c07
Create Adobe edge events for iOS
wvanhaevre Dec 15, 2025
0c9a72f
Add event queueing for iOS
wvanhaevre Dec 15, 2025
b4eaca2
Move MobileCore setup to native part.
wvanhaevre Dec 16, 2025
bbc8ba8
Add test setup for consents
wvanhaevre Dec 16, 2025
1c8dcdf
Allow passing a custom identityMap
tvanlaerhoven Dec 17, 2025
57829c1
Set custom identityMap
tvanlaerhoven Dec 17, 2025
434b2df
Drop ping command
tvanlaerhoven Dec 17, 2025
dd6d961
Remove unused code
tvanlaerhoven Jan 14, 2026
2bfadf9
Use tracker & align with mobile
tvanlaerhoven Jan 15, 2026
3e93319
Update hook
tvanlaerhoven Jan 15, 2026
b0df936
Allow override by customMetadata
tvanlaerhoven Jan 15, 2026
be87ad9
Simplify api
tvanlaerhoven Jan 16, 2026
14aa6d7
Pass NA instead of N/A
tvanlaerhoven Jan 16, 2026
8039112
Access player on main thread
tvanlaerhoven Jan 16, 2026
2cd05ff
Avoid concurrent modification exception
tvanlaerhoven Jan 16, 2026
069f0b7
Clear custom metadata on reset
tvanlaerhoven Jan 16, 2026
3f2a32f
Move and rename AdobeEdgeUtils
wvanhaevre Jan 16, 2026
95b49cb
Bridge customIdentityMap on iOS
wvanhaevre Jan 16, 2026
b1cbdbc
Forward identityMap to handler
wvanhaevre Jan 16, 2026
ffc29bd
Process identityMap on iOS
wvanhaevre Jan 16, 2026
2800659
Update e2e test
tvanlaerhoven Jan 16, 2026
426569f
Add error
tvanlaerhoven Jan 16, 2026
a8cdfa7
Fix props
tvanlaerhoven Jan 16, 2026
6d095f9
Fix exports
tvanlaerhoven Jan 16, 2026
84629d3
Add changeset
tvanlaerhoven Jan 16, 2026
7f9eee9
Fix playhead for live content
tvanlaerhoven Jan 16, 2026
78c8a4b
Adjust iOS bridge to updated API
wvanhaevre Jan 16, 2026
83f8290
Drop unused method
wvanhaevre Jan 16, 2026
f199e11
Use merged metadata for name and id lookup on iOS
wvanhaevre Jan 16, 2026
771f3a0
Clear metadata on reset
wvanhaevre Jan 16, 2026
bddb418
Use mediaLength to sanitise playhead
wvanhaevre Jan 16, 2026
226e881
Fix adBreak position reporting.
wvanhaevre Jan 16, 2026
0101bff
adBreakObject position should be 1-based
tvanlaerhoven Jan 16, 2026
8b0e847
Update docs
tvanlaerhoven Jan 16, 2026
df8a850
Use local time zone
tvanlaerhoven Jan 16, 2026
1755bcf
Use local time for live playhead calculation
wvanhaevre Jan 16, 2026
ff83624
Remove alle references to Consent module
wvanhaevre Jan 16, 2026
049454f
Fix metadata conversion
tvanlaerhoven Jan 16, 2026
f75e9c0
Fix qoe object
tvanlaerhoven Jan 16, 2026
a7d0399
Fix e2e gradle deps
tvanlaerhoven Jan 16, 2026
5dd747e
Disable e2e test on iOS
tvanlaerhoven Jan 16, 2026
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/gold-fans-visit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@theoplayer/react-native-analytics-adobe-edge': major
---

Updated the connector to use the latest Adobe Experience Platform Mobile and Web SDKs.
84 changes: 68 additions & 16 deletions adobe-edge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,8 @@ To set up terminology, in chronological order, media tracking solutions were:

## Installation

The `@theoplayer/react-native` package has a peer dependency on `react-native-device-info`, which has to be installed as
well:

```sh
npm install \
react-native-device-info \
@theoplayer/react-native-analytics-adobe-edge
npm install @theoplayer/react-native-analytics-adobe-edge
```

[//]: # (npm install @theoplayer/react-native-analytics-adobe)
Expand All @@ -30,20 +25,41 @@ npm install \

### Configuring the connector

Create the connector by providing the `THEOplayer` instance, the Media Collection API's end point,
Visitor Experience Cloud Org ID, Analytics Report Suite ID and the Analytics Tracking Server URL.
Create the connector by providing the `THEOplayer` instance and a configuration object with separate parts for
Web and mobile platforms.

```tsx
import { useAdobe } from '@theoplayer/react-native-analytics-adobe-edge';
import {useAdobe} from '@theoplayer/react-native-analytics-adobe-edge';

const config = {
web: {
datastreamId: 'abcde123-abcd-1234-abcd-abcde1234567',
orgId: 'ADB3LETTERSANDNUMBERS@AdobeOrg',
edgeBasePath: 'ee',
edgeDomain: 'my.domain.com',
debugEnabled: true,
},
mobile: {
environmentId: 'abcdef123456/abcdef123456/launch-1234567890abcdef1234567890abcdef12',
debugEnabled: true,
},
}

const baseUrl = "https://edge.adobedc.net/ee-pre-prd/va/v1";
const dataStreamId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
const userAgent = "<Custom User-Agent>"; // Optionally provide a custom user-agent header value.
const debugSessionID = "<debugSessionID>"; // Optionally provide a query parameter to be added to outgoing requests.
const useNative = true; // Use a native connector on iOS & Android; `false` by default.
/**
* An optional custom identity map to associate the media session with user identities.
*/
const customIdentityMap = {
EMAIL: [
{
id: 'user@example.com',
authenticatedState: 'authenticated',
primary: false,
},
],
}

const App = () => {
const [adobe, initAdobe] = useAdobe(baseUrl, dataStreamId, userAgent, true, debugSessionID, useNative);
const [adobe, initAdobe] = useAdobe(config, /* optional */ customIdentityMap);

const onPlayerReady = (player: THEOplayer) => {
// Initialize Adobe connector
Expand All @@ -62,7 +78,7 @@ such as duration or whether it is a live or vod.
The connector allows passing or updating the current asset's metadata at any time:

```typescript
import { AdobeCustomMetadataDetails } from "@theoplayer/react-native-analytics-adobe-edge";
import {AdobeCustomMetadataDetails} from "@theoplayer/react-native-analytics-adobe-edge";

const onUpdateMetadata = () => {
const metadata: AdobeCustomMetadataDetails[] = [
Expand All @@ -72,3 +88,39 @@ const onUpdateMetadata = () => {
adobe.current?.updateMetadata(metadata);
};
```

### Setting an custom identity map

Besides passing a custom identity map during initialization, you can also set or update the identity map at any time:

```typescript
import {AdobeIdentityMap} from "@theoplayer/react-native-analytics-adobe-edge";

const onUpdateIdentityMap = () => {
const identityMap: AdobeIdentityMap = {
CUSTOMER_ID: [
{
id: 'customer-12345',
authenticatedState: 'authenticated',
primary: true,
},
],
};
adobe.current?.setIdentityMap(identityMap);
};
```

### Starting a new session during a live stream

By default, the connector will start a new session when a new asset is loaded. However, during live streams, you might
want to start a new session
periodically when a new program starts. You can do this by calling `stopAndStartNewSession` with the new program's
metadata:

```typescript
const onNewProgram = () => {
adobe.current?.stopAndStartNewSession({
'friendlyName': 'Evening News',
});
};
```
12 changes: 12 additions & 0 deletions adobe-edge/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,18 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-process:2.5.1'
implementation("com.google.code.gson:gson:$gsonVersion")

implementation(platform("com.adobe.marketing.mobile:sdk-bom:3.+"))
implementation("com.adobe.marketing.mobile:core")
implementation("com.adobe.marketing.mobile:edge")

/**
* The Identity framework lets your app use Experience Cloud ID (ECID). Using ECIDs improves
* synchronization with Adobe and other customer identifiers.
* https://developer.adobe.com/client-sdks/home/base/mobile-core/identity/
*/
implementation("com.adobe.marketing.mobile:edgeidentity")
implementation("com.adobe.marketing.mobile:edgemedia")

// THEOplayer dependencies
compileOnly "com.theoplayer.theoplayer-sdk-android:core:$theoplayer_sdk_version"
compileOnly "com.theoplayer.theoplayer-sdk-android:integration-ads-ima:$theoplayer_sdk_version"
Expand Down
5 changes: 4 additions & 1 deletion adobe-edge/android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
<manifest />
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

This file was deleted.

Loading
Loading