Skip to content

Commit 6448589

Browse files
committed
fix(sample): generate Rokt session IDs as GUIDs
1 parent 0084264 commit 6448589

3 files changed

Lines changed: 87 additions & 60 deletions

File tree

ExpoTestApp/App.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ const { RoktLayoutView, RoktEventManager } = MParticle;
2626
// Create event emitter for Rokt events
2727
const eventManagerEmitter = new NativeEventEmitter(RoktEventManager);
2828

29+
const generateGuid = () =>
30+
'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, character => {
31+
const random = Math.floor(Math.random() * 16);
32+
const value = character === 'x' ? random : (random & 0x3) | 0x8;
33+
return value.toString(16);
34+
});
35+
2936
export default function App() {
3037
const [eventName, setEventName] = useState('Test Event');
3138
const [status, setStatus] = useState('SDK initialized via native code');
@@ -269,7 +276,7 @@ export default function App() {
269276
};
270277

271278
const handleRoktSession = () => {
272-
const sessionId = `rn-expo-${Date.now()}`;
279+
const sessionId = generateGuid();
273280

274281
MParticle.Rokt.setSessionId(sessionId)
275282
.then(() => MParticle.Rokt.getSessionId())

sample/__mocks__/react-native-mparticle.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/* eslint-disable */
21
/**
32
* Mock for react-native-mparticle
43
* This mock provides a simple API that mimics the essential functionality

sample/index.js

Lines changed: 79 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ const {RoktLayoutView} = MParticle;
2626

2727
const eventManagerEmitter = new NativeEventEmitter(MParticle.RoktEventManager);
2828

29+
const generateGuid = () =>
30+
'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, character => {
31+
const random = Math.floor(Math.random() * 16);
32+
const value = character === 'x' ? random : (random & 0x3) | 0x8;
33+
return value.toString(16);
34+
});
35+
2936
export default class MParticleSample extends Component {
3037
constructor(props) {
3138
super(props);
@@ -47,64 +54,73 @@ export default class MParticleSample extends Component {
4754
this.render = this.render.bind(this);
4855

4956
// Example Login
50-
var request = new MParticle.IdentityRequest();
51-
request.email = 'testing1@gmail.com';
52-
request.customerId = '123';
53-
MParticle.Identity.login(request, (error, userId, previousUserId) => {
54-
if (error) {
55-
console.debug(error);
56-
}
57-
58-
// Only create alias request if there's a previous user
59-
if (previousUserId) {
60-
var previousUser = new MParticle.User(previousUserId);
61-
previousUser.getFirstSeen(firstSeen => {
62-
previousUser.getLastSeen(lastSeen => {
63-
var aliasRequest = new MParticle.AliasRequest()
64-
.sourceMpid(previousUser.getMpid())
65-
.destinationMpid(userId)
66-
.startTime(firstSeen - 1000)
67-
.endTime(lastSeen - 1000);
68-
console.log('AliasRequest = ' + JSON.stringify(aliasRequest));
69-
MParticle.Identity.aliasUsers(aliasRequest, (success, error) => {
70-
if (error) {
71-
console.log('Alias error = ' + error);
72-
}
73-
console.log('Alias result: ' + success);
74-
});
57+
var loginRequest = new MParticle.IdentityRequest();
58+
loginRequest.email = 'testing1@gmail.com';
59+
loginRequest.customerId = '123';
60+
MParticle.Identity.login(
61+
loginRequest,
62+
(loginError, loginUserId, previousUserId) => {
63+
if (loginError) {
64+
console.debug(loginError);
65+
}
7566

76-
var aliasRequest2 = new MParticle.AliasRequest()
77-
.sourceMpid(previousUser.getMpid())
78-
.destinationMpid(userId);
79-
console.log('AliasRequest2 = ' + JSON.stringify(aliasRequest2));
80-
MParticle.Identity.aliasUsers(aliasRequest2, (success, error) => {
81-
if (error) {
82-
console.log('Alias 2 error = ' + error);
83-
}
84-
console.log('Alias 2 result: ' + success);
67+
// Only create alias request if there's a previous user
68+
if (previousUserId) {
69+
var previousUser = new MParticle.User(previousUserId);
70+
previousUser.getFirstSeen(firstSeen => {
71+
previousUser.getLastSeen(lastSeen => {
72+
var aliasRequest = new MParticle.AliasRequest()
73+
.sourceMpid(previousUser.getMpid())
74+
.destinationMpid(loginUserId)
75+
.startTime(firstSeen - 1000)
76+
.endTime(lastSeen - 1000);
77+
console.log('AliasRequest = ' + JSON.stringify(aliasRequest));
78+
MParticle.Identity.aliasUsers(
79+
aliasRequest,
80+
(success, aliasError) => {
81+
if (aliasError) {
82+
console.log('Alias error = ' + aliasError);
83+
}
84+
console.log('Alias result: ' + success);
85+
},
86+
);
87+
88+
var aliasRequest2 = new MParticle.AliasRequest()
89+
.sourceMpid(previousUser.getMpid())
90+
.destinationMpid(loginUserId);
91+
console.log('AliasRequest2 = ' + JSON.stringify(aliasRequest2));
92+
MParticle.Identity.aliasUsers(
93+
aliasRequest2,
94+
(success, alias2Error) => {
95+
if (alias2Error) {
96+
console.log('Alias 2 error = ' + alias2Error);
97+
}
98+
console.log('Alias 2 result: ' + success);
99+
},
100+
);
85101
});
86102
});
87-
});
88-
} else {
89-
console.log('No previous user found, skipping alias request');
90-
}
91-
92-
var user = new MParticle.User(userId);
93-
console.debug('User Attributes = ' + user.userAttributes);
94-
MParticle.Identity.logout({}, (error, userId) => {
95-
if (error) {
96-
console.debug('Logout error' + error);
103+
} else {
104+
console.log('No previous user found, skipping alias request');
97105
}
98-
var request = new MParticle.IdentityRequest();
99-
request.email = 'testing2@gmail.com';
100-
request.customerId = '456';
101-
MParticle.Identity.modify(request, error => {
102-
if (error) {
103-
console.debug('Modify error = ' + error);
106+
107+
var user = new MParticle.User(loginUserId);
108+
console.debug('User Attributes = ' + user.userAttributes);
109+
MParticle.Identity.logout({}, logoutError => {
110+
if (logoutError) {
111+
console.debug('Logout error' + logoutError);
104112
}
113+
var modifyRequest = new MParticle.IdentityRequest();
114+
modifyRequest.email = 'testing2@gmail.com';
115+
modifyRequest.customerId = '456';
116+
MParticle.Identity.modify(modifyRequest, modifyError => {
117+
if (modifyError) {
118+
console.debug('Modify error = ' + modifyError);
119+
}
120+
});
105121
});
106-
});
107-
});
122+
},
123+
);
108124

109125
var i = 0;
110126
// Toggle the state every few seconds, 10 times
@@ -121,10 +137,13 @@ export default class MParticleSample extends Component {
121137
MParticle.Identity.getCurrentUser(currentUser => {
122138
//currentUser.setUserTag('regular');
123139
});
124-
var request = new MParticle.IdentityRequest();
125-
request.email = 'testing1@gmail.com';
126-
request.customerId = 'vlknasdlknv';
127-
request.setUserIdentity('12345', MParticle.UserIdentityType.Alias);
140+
var intervalRequest = new MParticle.IdentityRequest();
141+
intervalRequest.email = 'testing1@gmail.com';
142+
intervalRequest.customerId = 'vlknasdlknv';
143+
intervalRequest.setUserIdentity(
144+
'12345',
145+
MParticle.UserIdentityType.Alias,
146+
);
128147

129148
const product = new MParticle.Product(
130149
'Test product for cart',
@@ -239,7 +258,7 @@ export default class MParticleSample extends Component {
239258
}
240259

241260
_roktSession() {
242-
const sessionId = `rn-sample-${Date.now()}`;
261+
const sessionId = generateGuid();
243262
MParticle.Rokt.setSessionId(sessionId)
244263
.then(() => {
245264
return MParticle.Rokt.getSessionId();
@@ -272,7 +291,9 @@ export default class MParticleSample extends Component {
272291
const attributes =
273292
Platform.OS === 'ios' ? iosAttributes : androidAttributes;
274293
console.log(
275-
`Platform detected: ${Platform.OS}, using ${Platform.OS === 'ios' ? 'iOS' : 'Android'} attributes:`,
294+
`Platform detected: ${Platform.OS}, using ${
295+
Platform.OS === 'ios' ? 'iOS' : 'Android'
296+
} attributes:`,
276297
attributes,
277298
);
278299
const cacheConfig = MParticle.Rokt.createCacheConfig(30, attributes);

0 commit comments

Comments
 (0)