Skip to content

Commit 279e9d7

Browse files
committed
fix(rokt): align session support and URL validation
1 parent 817c526 commit 279e9d7

9 files changed

Lines changed: 46 additions & 24 deletions

File tree

.trunk/trunk.yaml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,12 @@ lint:
4343
- dotenv-linter@3.3.0
4444
# ESLint 9+ defaults to flat config only; this repo uses .eslintrc.js (ESLint 8 style).
4545
# Trunk runs ESLint in an isolated env without the repo's node_modules; bundle the same
46-
# plugins/parser as package.json plus the sample app config/plugins so ESLint resolves in CI.
47-
- eslint@8.57.0:
46+
# plugins/parser as package.json so @typescript-eslint/* resolves (CI + local).
47+
- eslint@8.57.1:
4848
packages:
49-
- '@react-native/eslint-config@0.84.0'
50-
- '@typescript-eslint/eslint-plugin@8.56.1'
51-
- '@typescript-eslint/parser@8.56.1'
49+
- '@typescript-eslint/eslint-plugin@5.62.0'
50+
- '@typescript-eslint/parser@5.62.0'
5251
- 'eslint-config-prettier@8.10.0'
53-
- 'eslint-plugin-jest@29.15.0'
5452
- 'eslint-plugin-prettier@4.2.1'
5553
- git-diff-check
5654
- ktlint@0.43.2

ExpoTestApp/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ The Rokt section also demonstrates:
9999
- Rokt event listeners for callbacks and placement events
100100
- Using `RoktLayoutView` as an embedded placeholder component
101101

102+
On Android, the Rokt session APIs require `android-core` and
103+
`android-rokt-kit` `5.77.0` or newer.
104+
102105
### Implementation guide: Shoppable Ads (`selectShoppableAds`)
103106

104107
Use `MParticle.Rokt.selectShoppableAds(identifier, attributes, roktConfig?)` when you need the Shoppable Ads experience instead of `selectPlacements`.

MIGRATING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ MParticle.Rokt.getSessionId(): Promise<string | null>
3131
```
3232

3333
`close()` is supported on iOS and Android. Session APIs are backed by the iOS
34-
mParticle Rokt kit; Android currently resolves safely without changing the
35-
session until the Android mParticle Rokt kit exposes equivalent public APIs.
34+
mParticle Rokt kit. On Android, apps that use these session APIs must use
35+
`android-core` and `android-rokt-kit` `5.77.0` or newer.
3636

3737
### Expo Config Plugin
3838

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,10 @@ In Expo apps, use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements. Th
292292
293293
See [MIGRATING.md](./MIGRATING.md) for release-specific migration guidance.
294294
295+
For Android integrations that use `MParticle.Rokt.setSessionId()` or
296+
`MParticle.Rokt.getSessionId()`, `android-core` and `android-rokt-kit`
297+
`5.77.0` or newer are required.
298+
295299
See [Identity](http://docs.mparticle.com/developers/sdk/ios/identity/) for more information on supplying an `MPIdentityApiRequest` object during SDK initialization.
296300
297301
4. Remember to start Metro with:

android/src/main/java/com/mparticle/react/rokt/MPRoktModuleImpl.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,12 @@ class MPRoktModuleImpl(
6666
sessionId: String,
6767
promise: Promise,
6868
) {
69-
Logger.warning("setSessionId is not supported on Android")
69+
MParticle.getInstance()?.Rokt()?.setSessionId(sessionId)
7070
promise.resolve(null)
7171
}
7272

7373
fun getSessionId(promise: Promise) {
74-
Logger.warning("getSessionId is not supported on Android")
75-
promise.resolve(null)
74+
promise.resolve(MParticle.getInstance()?.Rokt()?.getSessionId())
7675
}
7776

7877
fun setRoktEventHandler(roktEventHandler: MpRoktEventCallback) {

ios/RNMParticle/RNMPRokt.mm

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -213,52 +213,55 @@ - (void)selectShoppableAds:(NSString *)identifier
213213
#ifdef RCT_NEW_ARCH_ENABLED
214214
- (void)close:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
215215
{
216-
[self closeWithResolve:resolve reject:reject];
216+
(void)reject;
217+
[self closeWithResolve:resolve];
217218
}
218219

219220
- (void)setSessionId:(NSString *)sessionId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
220221
{
221-
[self setSessionIdWithString:sessionId resolve:resolve reject:reject];
222+
(void)reject;
223+
[self setSessionIdWithString:sessionId resolve:resolve];
222224
}
223225

224226
- (void)getSessionId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
225227
{
226-
[self getSessionIdWithResolve:resolve reject:reject];
228+
(void)reject;
229+
[self getSessionIdWithResolve:resolve];
227230
}
228231
#else
229232
RCT_EXPORT_METHOD(close:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
230233
{
231-
[self closeWithResolve:resolve reject:reject];
234+
(void)reject;
235+
[self closeWithResolve:resolve];
232236
}
233237

234238
RCT_EXPORT_METHOD(setSessionId:(NSString *)sessionId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
235239
{
236-
[self setSessionIdWithString:sessionId resolve:resolve reject:reject];
240+
(void)reject;
241+
[self setSessionIdWithString:sessionId resolve:resolve];
237242
}
238243

239244
RCT_EXPORT_METHOD(getSessionId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
240245
{
241-
[self getSessionIdWithResolve:resolve reject:reject];
246+
(void)reject;
247+
[self getSessionIdWithResolve:resolve];
242248
}
243249
#endif
244250

245251
- (void)closeWithResolve:(RCTPromiseResolveBlock)resolve
246-
reject:(RCTPromiseRejectBlock)reject
247252
{
248253
[[[MParticle sharedInstance] rokt] close];
249254
resolve(nil);
250255
}
251256

252257
- (void)setSessionIdWithString:(NSString *)sessionId
253258
resolve:(RCTPromiseResolveBlock)resolve
254-
reject:(RCTPromiseRejectBlock)reject
255259
{
256260
[[[MParticle sharedInstance] rokt] setSessionId:sessionId ?: @""];
257261
resolve(nil);
258262
}
259263

260264
- (void)getSessionIdWithResolve:(RCTPromiseResolveBlock)resolve
261-
reject:(RCTPromiseRejectBlock)reject
262265
{
263266
NSString *sessionId = [[[MParticle sharedInstance] rokt] getSessionId];
264267
resolve(sessionId ?: [NSNull null]);

plugin/src/withMParticleIOS.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,19 @@ function getIOSCustomBaseURL(props: MParticlePluginProps): string | null {
9797
return null;
9898
}
9999

100-
if (!/^https:\/\/[^\s]+$/.test(customBaseURL)) {
100+
let parsedCustomBaseURL: URL;
101+
try {
102+
parsedCustomBaseURL = new URL(customBaseURL);
103+
} catch {
104+
throw new Error(
105+
'react-native-mparticle iosCustomBaseURL must be a valid https URL'
106+
);
107+
}
108+
109+
if (
110+
parsedCustomBaseURL.protocol !== 'https:' ||
111+
!parsedCustomBaseURL.hostname
112+
) {
101113
throw new Error(
102114
'react-native-mparticle iosCustomBaseURL must be a valid https URL'
103115
);

sample/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ The sample Podfile pins the standard Rokt kit with:
7070
pod 'mParticle-Rokt', '~> 9.2'
7171
```
7272

73-
The sample app includes buttons for Rokt close/session APIs. Payment-extension installation and native URL callback forwarding are not configured in this release.
73+
The sample Android app pins `com.mparticle:android-core` and
74+
`com.mparticle:android-rokt-kit` to `5.78.5` so the Rokt session APIs work on
75+
Android. Payment-extension installation and native URL callback forwarding are
76+
not configured in this release.
7477

7578
## Running the Sample App
7679

sample/android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ android {
110110
dependencies {
111111
// The version of react-native is set by the React Native Gradle Plugin
112112
implementation("com.facebook.react:react-android")
113-
implementation("com.mparticle:android-core:5.76.1")
114-
implementation("com.mparticle:android-rokt-kit:5.76.1")
113+
implementation("com.mparticle:android-core:5.78.5")
114+
implementation("com.mparticle:android-rokt-kit:5.78.5")
115115

116116
if (hermesEnabled.toBoolean()) {
117117
implementation("com.facebook.react:hermes-android")

0 commit comments

Comments
 (0)