@adobe/react-native-aepmessaging 7.2.1 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingConstants.java +3 -0
- package/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java +21 -1
- package/dist/Messaging.js +1 -0
- package/dist/Messaging.js.map +1 -1
- package/dist/models/Message.d.ts +13 -0
- package/dist/models/Message.js +42 -0
- package/dist/models/Message.js.map +1 -1
- package/dist/models/MessagingProposition.js.map +1 -1
- package/dist/models/PersonalizationSchema.js +1 -1
- package/dist/models/PersonalizationSchema.js.map +1 -1
- package/dist/models/PropositionItem.js.map +1 -1
- package/ios/src/RCTAEPMessaging.mm +4 -0
- package/ios/src/RCTAEPMessaging.swift +31 -0
- package/ios/src/RCTAEPMessagingConstants.swift +4 -1
- package/package.json +2 -2
- package/src/Messaging.ts +1 -0
- package/src/models/Message.ts +50 -0
- package/tutorials/In-App Messaging.md +31 -0
|
@@ -14,6 +14,9 @@ package com.adobe.marketing.mobile.reactnative.messaging;
|
|
|
14
14
|
class RCTAEPMessagingConstants {
|
|
15
15
|
static final String MESSAGE_ID_KEY = "messageId";
|
|
16
16
|
static final String HANDLER_NAME_KEY = "handlerName";
|
|
17
|
+
static final String JAVASCRIPT_STRING_KEY = "javascriptString";
|
|
17
18
|
static final String CONTENT_KEY = "content";
|
|
19
|
+
static final String RESULT_KEY = "result";
|
|
18
20
|
static final String ON_JAVASCRIPT_MESSAGE_EVENT = "onJavascriptMessage";
|
|
21
|
+
static final String ON_JAVASCRIPT_RESULT_EVENT = "onJavascriptResult";
|
|
19
22
|
}
|
|
@@ -258,6 +258,25 @@ public final class RCTAEPMessagingModule
|
|
|
258
258
|
});
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
+
@ReactMethod
|
|
262
|
+
public void evaluateJavascript(final String messageId, final String javascriptString) {
|
|
263
|
+
Presentable<?> presentable = presentableCache.get(messageId);
|
|
264
|
+
if (presentable == null || !(presentable.getPresentation() instanceof InAppMessage)) {
|
|
265
|
+
Log.w(TAG, "evaluateJavascript: No presentable found for messageId: " + messageId);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
Presentable<InAppMessage> inAppMessagePresentable = (Presentable<InAppMessage>) presentable;
|
|
270
|
+
InAppMessageEventHandler eventHandler = inAppMessagePresentable.getPresentation().getEventHandler();
|
|
271
|
+
eventHandler.evaluateJavascript(javascriptString, result -> {
|
|
272
|
+
Map<String, String> params = new HashMap<>();
|
|
273
|
+
params.put(RCTAEPMessagingConstants.MESSAGE_ID_KEY, messageId);
|
|
274
|
+
params.put(RCTAEPMessagingConstants.JAVASCRIPT_STRING_KEY, javascriptString);
|
|
275
|
+
params.put(RCTAEPMessagingConstants.RESULT_KEY, result);
|
|
276
|
+
emitEvent(RCTAEPMessagingConstants.ON_JAVASCRIPT_RESULT_EVENT, params);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
261
280
|
// Messaging Delegate functions
|
|
262
281
|
@Override
|
|
263
282
|
public void onShow(final Presentable<?> presentable) {
|
|
@@ -335,11 +354,12 @@ public final class RCTAEPMessagingModule
|
|
|
335
354
|
|
|
336
355
|
// Messaging Delegate Callback
|
|
337
356
|
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
338
|
-
public
|
|
357
|
+
public boolean setMessageSettings(final boolean shouldShowMessage,
|
|
339
358
|
final boolean shouldSaveMessage) {
|
|
340
359
|
this.shouldShowMessage = shouldShowMessage;
|
|
341
360
|
this.shouldSaveMessage = shouldSaveMessage;
|
|
342
361
|
latch.countDown();
|
|
362
|
+
return true;
|
|
343
363
|
}
|
|
344
364
|
|
|
345
365
|
/**
|
package/dist/Messaging.js
CHANGED
|
@@ -105,6 +105,7 @@ class Messaging {
|
|
|
105
105
|
var _a;
|
|
106
106
|
const messageInstance = new Message_1.default(message);
|
|
107
107
|
messageInstance._clearJavascriptMessageHandlers();
|
|
108
|
+
messageInstance._clearJavascriptResultHandlers();
|
|
108
109
|
(_a = messagingDelegate === null || messagingDelegate === void 0 ? void 0 : messagingDelegate.onDismiss) === null || _a === void 0 ? void 0 : _a.call(messagingDelegate, messageInstance);
|
|
109
110
|
});
|
|
110
111
|
eventEmitter.addListener('shouldShowMessage', (message) => {
|
package/dist/Messaging.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Messaging.js","sourceRoot":"","sources":["../src/Messaging.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAEF,+CAKsB;AACtB,uEAAuC;AAEvC,wEAAqE;AAsBrE,MAAM,eAAe,GACnB,4BAAa,CAAC,YAAY,CAAC;AAG7B,IAAI,iBAAoC,CAAC;AAEzC,MAAM,SAAS;IACb;;;OAGG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB;QACzB,eAAe,CAAC,oBAAoB,EAAE,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAO,iBAAiB;;YAC5B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,CAAC;YAC3D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,iBAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;KAAA;IAED;;;OAGG;IACH,MAAM,CAAO,gBAAgB;;YAC3B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAC;YACzD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,iBAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,CAAC;KAAA;IAED;;;;;OAKG;IACH,MAAM,CAAO,0BAA0B,CACrC,QAAkB;;YAGlB,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACpF,IAAI,gCAAgC,GAA2C,EAAE,CAAC;YAElF,KAAK,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"Messaging.js","sourceRoot":"","sources":["../src/Messaging.ts"],"names":[],"mappings":"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"}
|
package/dist/models/Message.d.ts
CHANGED
|
@@ -42,6 +42,12 @@ declare class Message {
|
|
|
42
42
|
* @param {function} handler: The method or closure to be called with the body of the message created in the Message's JavaScript
|
|
43
43
|
*/
|
|
44
44
|
handleJavascriptMessage(handlerName: string, handler: (content: string) => void): void;
|
|
45
|
+
/**
|
|
46
|
+
* Asynchronously evaluates the specified JavaScript string in the context of the message's WebView.
|
|
47
|
+
* @param {string} javascriptString: The JavaScript string to evaluate.
|
|
48
|
+
* @param {function} callback: A callback to be invoked when the script execution completes with the result of the execution.
|
|
49
|
+
*/
|
|
50
|
+
evaluateJavascript(javascriptString: string, callback: (result: string) => void): void;
|
|
45
51
|
/**
|
|
46
52
|
* @internal - For internal use only.
|
|
47
53
|
* Clears all the javascript message handlers for the message.
|
|
@@ -49,5 +55,12 @@ declare class Message {
|
|
|
49
55
|
* Failure to call this function may lead to memory leaks.
|
|
50
56
|
*/
|
|
51
57
|
_clearJavascriptMessageHandlers(): void;
|
|
58
|
+
/**
|
|
59
|
+
* @internal - For internal use only.
|
|
60
|
+
* Clears all the javascript result handlers for the message.
|
|
61
|
+
* This function must be called if the callbacks registered in evaluateJavascript are no longer needed.
|
|
62
|
+
* Failure to call this function may lead to memory leaks.
|
|
63
|
+
*/
|
|
64
|
+
_clearJavascriptResultHandlers(): void;
|
|
52
65
|
}
|
|
53
66
|
export default Message;
|
package/dist/models/Message.js
CHANGED
|
@@ -16,6 +16,9 @@ const RCTAEPMessaging = react_native_1.NativeModules.AEPMessaging;
|
|
|
16
16
|
// Registery to store inAppMessage callbacks for each message in Message.handleJavascriptMessage
|
|
17
17
|
// Record - {messageId : {handlerName : callback}}
|
|
18
18
|
const jsMessageHandlers = {};
|
|
19
|
+
// Registery to store inAppMessage result callbacks for each message in Message.evaluateJavascript
|
|
20
|
+
// Record - {messageId : {javascriptString : callback}}
|
|
21
|
+
const jsResultHandlers = {};
|
|
19
22
|
const handleJSMessageEventEmitter = new react_native_1.NativeEventEmitter(RCTAEPMessaging);
|
|
20
23
|
// invokes the callback registered in Message.handleJavascriptMessage with the content received from the inAppMessage webview
|
|
21
24
|
handleJSMessageEventEmitter.addListener('onJavascriptMessage', (event) => {
|
|
@@ -24,6 +27,14 @@ handleJSMessageEventEmitter.addListener('onJavascriptMessage', (event) => {
|
|
|
24
27
|
jsMessageHandlers[messageId][handlerName](content);
|
|
25
28
|
}
|
|
26
29
|
});
|
|
30
|
+
handleJSMessageEventEmitter.addListener('onJavascriptResult', (event) => {
|
|
31
|
+
const { messageId, javascriptString, result } = event;
|
|
32
|
+
if (jsResultHandlers[messageId] && jsResultHandlers[messageId][javascriptString]) {
|
|
33
|
+
// Convert result to string to maintain API parity
|
|
34
|
+
const resultString = result == null ? '' : String(result);
|
|
35
|
+
jsResultHandlers[messageId][javascriptString](resultString);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
27
38
|
class Message {
|
|
28
39
|
constructor({ id, autoTrack = false }) {
|
|
29
40
|
this.id = id;
|
|
@@ -100,6 +111,28 @@ class Message {
|
|
|
100
111
|
jsMessageHandlers[this.id][handlerName] = handler;
|
|
101
112
|
RCTAEPMessaging.handleJavascriptMessage(this.id, handlerName);
|
|
102
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Asynchronously evaluates the specified JavaScript string in the context of the message's WebView.
|
|
116
|
+
* @param {string} javascriptString: The JavaScript string to evaluate.
|
|
117
|
+
* @param {function} callback: A callback to be invoked when the script execution completes with the result of the execution.
|
|
118
|
+
*/
|
|
119
|
+
evaluateJavascript(javascriptString, callback) {
|
|
120
|
+
// validate parameters
|
|
121
|
+
if (!javascriptString) {
|
|
122
|
+
console.warn('[AEP Messaging] evaluateJavascript: javascriptString is required');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (typeof callback !== 'function') {
|
|
126
|
+
console.warn('[AEP Messaging] evaluateJavascript: callback must be a function');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// cache the callback
|
|
130
|
+
if (!jsResultHandlers[this.id]) {
|
|
131
|
+
jsResultHandlers[this.id] = {};
|
|
132
|
+
}
|
|
133
|
+
jsResultHandlers[this.id][javascriptString] = callback;
|
|
134
|
+
RCTAEPMessaging.evaluateJavascript(this.id, javascriptString);
|
|
135
|
+
}
|
|
103
136
|
/**
|
|
104
137
|
* @internal - For internal use only.
|
|
105
138
|
* Clears all the javascript message handlers for the message.
|
|
@@ -109,6 +142,15 @@ class Message {
|
|
|
109
142
|
_clearJavascriptMessageHandlers() {
|
|
110
143
|
delete jsMessageHandlers[this.id];
|
|
111
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* @internal - For internal use only.
|
|
147
|
+
* Clears all the javascript result handlers for the message.
|
|
148
|
+
* This function must be called if the callbacks registered in evaluateJavascript are no longer needed.
|
|
149
|
+
* Failure to call this function may lead to memory leaks.
|
|
150
|
+
*/
|
|
151
|
+
_clearJavascriptResultHandlers() {
|
|
152
|
+
delete jsResultHandlers[this.id];
|
|
153
|
+
}
|
|
112
154
|
}
|
|
113
155
|
exports.default = Message;
|
|
114
156
|
//# sourceMappingURL=Message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/models/Message.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;AAEF,+CAA2E;AAE3E,MAAM,eAAe,GAAG,4BAAa,CAAC,YAAY,CAAC;AAEnD,gGAAgG;AAChG,kDAAkD;AAClD,MAAM,iBAAiB,GAA8D,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/models/Message.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessagingProposition.js","sourceRoot":"","sources":["../../src/models/MessagingProposition.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAGF,mEAAgE;AAChE,+CAA4C;AAC5C,uDAAoD;AACpD,uDAAwD;AACxD,uDAAoD;AAEpD,MAAa,kBAAkB;IAM7B,YAAY,GAA6E;;QACvF,IAAI,CAAC,EAAE,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,EAAE,mCAAI,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,mCAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAA6B,mCAAK,EAAmB,CAAC;QAEhF,8DAA8D;QAC9D,MAAM,mBAAmB,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,0CAAE,EAAE,mCAAI,EAAE,CAAC;QAClE,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"MessagingProposition.js","sourceRoot":"","sources":["../../src/models/MessagingProposition.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAGF,mEAAgE;AAChE,+CAA4C;AAC5C,uDAAoD;AACpD,uDAAwD;AACxD,uDAAoD;AAEpD,MAAa,kBAAkB;IAM7B,YAAY,GAA6E;;QACvF,IAAI,CAAC,EAAE,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,EAAE,mCAAI,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,mCAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAA6B,mCAAK,EAAmB,CAAC;QAEhF,8DAA8D;QAC9D,MAAM,mBAAmB,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,0CAAE,EAAE,mCAAI,EAAE,CAAC;QAClE,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,UAAU,GAAG,mBAAmB,CAAC;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAa,EAAE,EAAE;;YAC1C,MAAM,UAAU,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,0CAAE,EAAE,mCAAI,EAAE,CAAC;YACzD,IAAI,QAAa,CAAC;YAClB,QAAQ,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE,CAAC;gBACzB,KAAK,6CAAqB,CAAC,YAAY;oBACrC,QAAQ,GAAG,IAAI,yBAAW,CAAC,QAAe,CAAC,CAAC;oBAC3C,QAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC1C,OAAO,QAAQ,CAAC;gBAClB,KAAK,6CAAqB,CAAC,YAAY;oBACrC,QAAQ,GAAG,IAAI,iCAAe,CAAC,QAAe,CAAC,CAAC;oBAC/C,QAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC1C,OAAO,QAAQ,CAAC;gBAClB,KAAK,6CAAqB,CAAC,YAAY;oBACrC,QAAQ,GAAG,IAAI,qCAAmB,CAAC,QAAe,CAAC,CAAC;oBACnD,QAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC1C,OAAO,QAAQ,CAAC;gBAClB;oBACE,QAAQ,GAAG,IAAI,iCAAe,CAAC,QAAe,CAAC,CAAC;oBAC/C,QAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC1C,OAAO,QAAQ,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAzCD,gDAyCC;AAE8B,kDAAoB"}
|
|
@@ -21,5 +21,5 @@ var PersonalizationSchema;
|
|
|
21
21
|
PersonalizationSchema["JSON_CONTENT"] = "https://ns.adobe.com/personalization/json-content-item";
|
|
22
22
|
PersonalizationSchema["NATIVE_ALERT"] = "https://ns.adobe.com/personalization/message/native-alert";
|
|
23
23
|
PersonalizationSchema["RULESET_ITEM"] = "https://ns.adobe.com/personalization/ruleset-item";
|
|
24
|
-
})(PersonalizationSchema
|
|
24
|
+
})(PersonalizationSchema || (exports.PersonalizationSchema = PersonalizationSchema = {}));
|
|
25
25
|
//# sourceMappingURL=PersonalizationSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonalizationSchema.js","sourceRoot":"","sources":["../../src/models/PersonalizationSchema.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAEF,IAAY,qBAQX;AARD,WAAY,qBAAqB;IAC/B,mGAA0E,CAAA;IAC1E,sGAA6E,CAAA;IAC7E,gGAAuE,CAAA;IACvE,uFAA8D,CAAA;IAC9D,gGAAuE,CAAA;IACvE,mGAA0E,CAAA;IAC1E,2FAAkE,CAAA;AACpE,CAAC,EARW,qBAAqB,
|
|
1
|
+
{"version":3,"file":"PersonalizationSchema.js","sourceRoot":"","sources":["../../src/models/PersonalizationSchema.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAEF,IAAY,qBAQX;AARD,WAAY,qBAAqB;IAC/B,mGAA0E,CAAA;IAC1E,sGAA6E,CAAA;IAC7E,gGAAuE,CAAA;IACvE,uFAA8D,CAAA;IAC9D,gGAAuE,CAAA;IACvE,mGAA0E,CAAA;IAC1E,2FAAkE,CAAA;AACpE,CAAC,EARW,qBAAqB,qCAArB,qBAAqB,QAQhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropositionItem.js","sourceRoot":"","sources":["../../src/models/PropositionItem.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAEF,+CAA6C;AAI7C,MAAM,eAAe,GAAG,4BAAa,CAAC,YAAY,CAAC;AAenD;;;;;;GAMG;AACH,MAAa,eAAe;IAO1B,YAAY,mBAAwC;QAClD,IAAI,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAgCD,iBAAiB;IACjB,KAAK,CACH,sBAA8D,EAC9D,SAAkC,EAClC,MAAwB;QAExB,sCAAsC;QACtC,IAAI,OAAO,sBAAsB,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"PropositionItem.js","sourceRoot":"","sources":["../../src/models/PropositionItem.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;;;AAEF,+CAA6C;AAI7C,MAAM,eAAe,GAAG,4BAAa,CAAC,YAAY,CAAC;AAenD;;;;;;GAMG;AACH,MAAa,eAAe;IAO1B,YAAY,mBAAwC;QAClD,IAAI,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAgCD,iBAAiB;IACjB,KAAK,CACH,sBAA8D,EAC9D,SAAkC,EAClC,MAAwB;QAExB,sCAAsC;QACtC,IAAI,OAAO,sBAAsB,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1E,mCAAmC;YACnC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,OAAO,sBAAsB,KAAK,QAAQ,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;YACzF,yDAAyD;YACzD,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,SAAU,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,WAA0B,EAAE,SAAiC,EAAE,MAAuB;;QAC7G,MAAM,gBAAgB,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,CAAC;QACjD,eAAe,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;CAEF;AAhGD,0CAgGC"}
|
|
@@ -60,6 +60,10 @@ RCT_EXTERN_METHOD(handleJavascriptMessage
|
|
|
60
60
|
: (NSString *)messageId handlerName
|
|
61
61
|
: (NSString *)handlerName)
|
|
62
62
|
|
|
63
|
+
RCT_EXTERN_METHOD(evaluateJavascript
|
|
64
|
+
: (NSString *)messageId javascriptString
|
|
65
|
+
: (NSString *)javascriptString)
|
|
66
|
+
|
|
63
67
|
RCT_EXTERN_METHOD(trackPropositionItem
|
|
64
68
|
: (NSString *)uuid interaction
|
|
65
69
|
: (NSString * _Nullable)interaction eventType
|
|
@@ -274,6 +274,37 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate {
|
|
|
274
274
|
}
|
|
275
275
|
}
|
|
276
276
|
|
|
277
|
+
@objc
|
|
278
|
+
func evaluateJavascript(
|
|
279
|
+
_ messageId: String,
|
|
280
|
+
javascriptString: String
|
|
281
|
+
) {
|
|
282
|
+
guard let message = jsHandlerMessageCache[messageId] else {
|
|
283
|
+
print("[RCTAEPMessaging] evaluateJavascript: No message found in cache for messageId: \(messageId)")
|
|
284
|
+
return
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
guard let messageWebView = message.view as? WKWebView else {
|
|
288
|
+
print("[RCTAEPMessaging] evaluateJavascript: Could not get WKWebView from message")
|
|
289
|
+
return
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
messageWebView.evaluateJavaScript(javascriptString) { [weak self] result, error in
|
|
293
|
+
if let error = error {
|
|
294
|
+
print("[RCTAEPMessaging] evaluateJavascript error: \(error)")
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
self?.emitNativeEvent(
|
|
298
|
+
name: Constants.ON_JAVASCRIPT_RESULT_EVENT,
|
|
299
|
+
body: [
|
|
300
|
+
Constants.MESSAGE_ID_KEY: messageId,
|
|
301
|
+
Constants.JAVASCRIPT_STRING_KEY: javascriptString,
|
|
302
|
+
Constants.RESULT_KEY: result ?? NSNull()
|
|
303
|
+
]
|
|
304
|
+
)
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
277
308
|
/// MARK: - Unified PropositionItem Tracking Methods
|
|
278
309
|
|
|
279
310
|
/**
|
|
@@ -17,10 +17,13 @@ class Constants {
|
|
|
17
17
|
static let SHOULD_SHOW_MESSAGE_EVENT = "shouldShowMessage"
|
|
18
18
|
static let URL_LOADED_EVENT = "urlLoaded"
|
|
19
19
|
static let ON_JAVASCRIPT_MESSAGE_EVENT = "onJavascriptMessage"
|
|
20
|
+
static let ON_JAVASCRIPT_RESULT_EVENT = "onJavascriptResult"
|
|
20
21
|
static let SUPPORTED_EVENTS = [
|
|
21
|
-
ON_DISMISS_EVENT, ON_SHOW_EVENT, SHOULD_SHOW_MESSAGE_EVENT, URL_LOADED_EVENT, ON_JAVASCRIPT_MESSAGE_EVENT
|
|
22
|
+
ON_DISMISS_EVENT, ON_SHOW_EVENT, SHOULD_SHOW_MESSAGE_EVENT, URL_LOADED_EVENT, ON_JAVASCRIPT_MESSAGE_EVENT, ON_JAVASCRIPT_RESULT_EVENT
|
|
22
23
|
]
|
|
23
24
|
static let MESSAGE_ID_KEY = "messageId"
|
|
24
25
|
static let HANDLER_NAME_KEY = "handlerName"
|
|
26
|
+
static let JAVASCRIPT_STRING_KEY = "javascriptString"
|
|
25
27
|
static let CONTENT_KEY = "content"
|
|
28
|
+
static let RESULT_KEY = "result"
|
|
26
29
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adobe/react-native-aepmessaging",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.3.0",
|
|
4
4
|
"description": "Adobe Experience Platform support for React Native apps.",
|
|
5
5
|
"homepage": "https://developer.adobe.com/client-sdks/documentation/",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"installConfig": {
|
|
40
40
|
"hoistingLimits": "dependencies"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "a55b63342c700922500ee85897a4f8ab5d9ca78c"
|
|
43
43
|
}
|
package/src/Messaging.ts
CHANGED
|
@@ -147,6 +147,7 @@ class Messaging {
|
|
|
147
147
|
eventEmitter.addListener('onDismiss', (message: Message) => {
|
|
148
148
|
const messageInstance = new Message(message);
|
|
149
149
|
messageInstance._clearJavascriptMessageHandlers();
|
|
150
|
+
messageInstance._clearJavascriptResultHandlers();
|
|
150
151
|
messagingDelegate?.onDismiss?.(messageInstance);
|
|
151
152
|
});
|
|
152
153
|
|
package/src/models/Message.ts
CHANGED
|
@@ -17,6 +17,11 @@ const RCTAEPMessaging = NativeModules.AEPMessaging;
|
|
|
17
17
|
// Registery to store inAppMessage callbacks for each message in Message.handleJavascriptMessage
|
|
18
18
|
// Record - {messageId : {handlerName : callback}}
|
|
19
19
|
const jsMessageHandlers: Record<string, Record<string, (content: string) => void>> = {};
|
|
20
|
+
|
|
21
|
+
// Registery to store inAppMessage result callbacks for each message in Message.evaluateJavascript
|
|
22
|
+
// Record - {messageId : {javascriptString : callback}}
|
|
23
|
+
const jsResultHandlers: Record<string, Record<string, (result: string) => void>> = {};
|
|
24
|
+
|
|
20
25
|
const handleJSMessageEventEmitter = new NativeEventEmitter(RCTAEPMessaging);
|
|
21
26
|
|
|
22
27
|
// invokes the callback registered in Message.handleJavascriptMessage with the content received from the inAppMessage webview
|
|
@@ -27,6 +32,15 @@ handleJSMessageEventEmitter.addListener('onJavascriptMessage', (event) => {
|
|
|
27
32
|
}
|
|
28
33
|
});
|
|
29
34
|
|
|
35
|
+
handleJSMessageEventEmitter.addListener('onJavascriptResult', (event) => {
|
|
36
|
+
const {messageId, javascriptString, result} = event;
|
|
37
|
+
if (jsResultHandlers[messageId] && jsResultHandlers[messageId][javascriptString]) {
|
|
38
|
+
// Convert result to string to maintain API parity
|
|
39
|
+
const resultString = result == null ? '' : String(result);
|
|
40
|
+
jsResultHandlers[messageId][javascriptString](resultString);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
30
44
|
class Message {
|
|
31
45
|
id: string;
|
|
32
46
|
autoTrack: boolean;
|
|
@@ -117,6 +131,32 @@ class Message {
|
|
|
117
131
|
RCTAEPMessaging.handleJavascriptMessage(this.id, handlerName);
|
|
118
132
|
}
|
|
119
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Asynchronously evaluates the specified JavaScript string in the context of the message's WebView.
|
|
136
|
+
* @param {string} javascriptString: The JavaScript string to evaluate.
|
|
137
|
+
* @param {function} callback: A callback to be invoked when the script execution completes with the result of the execution.
|
|
138
|
+
*/
|
|
139
|
+
evaluateJavascript(javascriptString: string, callback: (result: string) => void) {
|
|
140
|
+
// validate parameters
|
|
141
|
+
if (!javascriptString) {
|
|
142
|
+
console.warn('[AEP Messaging] evaluateJavascript: javascriptString is required');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (typeof callback !== 'function') {
|
|
147
|
+
console.warn('[AEP Messaging] evaluateJavascript: callback must be a function');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// cache the callback
|
|
152
|
+
if (!jsResultHandlers[this.id]) {
|
|
153
|
+
jsResultHandlers[this.id] = {};
|
|
154
|
+
}
|
|
155
|
+
jsResultHandlers[this.id][javascriptString] = callback;
|
|
156
|
+
|
|
157
|
+
RCTAEPMessaging.evaluateJavascript(this.id, javascriptString);
|
|
158
|
+
}
|
|
159
|
+
|
|
120
160
|
/**
|
|
121
161
|
* @internal - For internal use only.
|
|
122
162
|
* Clears all the javascript message handlers for the message.
|
|
@@ -126,6 +166,16 @@ class Message {
|
|
|
126
166
|
_clearJavascriptMessageHandlers() {
|
|
127
167
|
delete jsMessageHandlers[this.id];
|
|
128
168
|
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @internal - For internal use only.
|
|
172
|
+
* Clears all the javascript result handlers for the message.
|
|
173
|
+
* This function must be called if the callbacks registered in evaluateJavascript are no longer needed.
|
|
174
|
+
* Failure to call this function may lead to memory leaks.
|
|
175
|
+
*/
|
|
176
|
+
_clearJavascriptResultHandlers() {
|
|
177
|
+
delete jsResultHandlers[this.id];
|
|
178
|
+
}
|
|
129
179
|
}
|
|
130
180
|
|
|
131
181
|
export default Message;
|
|
@@ -65,3 +65,34 @@ When the user clicks the button inside of this in-app message, the handler confi
|
|
|
65
65
|
```bash
|
|
66
66
|
JavaScript body passed to react native callback: callbacks are cool!
|
|
67
67
|
```
|
|
68
|
+
|
|
69
|
+
# Execute JavaScript methods from native code
|
|
70
|
+
|
|
71
|
+
You can execute JavaScript in an in-app message from native code by completing the following steps:
|
|
72
|
+
- [Implement and assign a `Messaging Delegate`](#implement-and-assign-a-messaging-delegate-1)
|
|
73
|
+
- [Call the Javascript method](#call-the-javascript-method)
|
|
74
|
+
|
|
75
|
+
## Implement and assign a `Messaging Delegate`
|
|
76
|
+
|
|
77
|
+
To register a JavaScript event handler with a Message object, you will first need to implement and set a MessagingDelegate.
|
|
78
|
+
Please read the [documentation](../README.md/#programmatically-control-the-display-of-in-app-messages) for more detailed instructions on implementing and using a MessagingDelegate.
|
|
79
|
+
|
|
80
|
+
## Call the JavaScript method
|
|
81
|
+
|
|
82
|
+
In the `onShow` function of `MessagingDelegate`, call `evaluateJavascript(javascriptString: string, callback: (result: string) => void)`.
|
|
83
|
+
|
|
84
|
+
### Example
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
Messaging.setMessagingDelegate({
|
|
88
|
+
onShow: msg => {
|
|
89
|
+
console.log('show', msg);
|
|
90
|
+
msg.evaluateJavascript(
|
|
91
|
+
"(function() {console.log('my test'); return 'some result';})();",
|
|
92
|
+
(result: string) => {
|
|
93
|
+
console.log('Result:', result);
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
```
|