@adobe/react-native-aepmessaging 5.0.0 → 5.1.0-beta.1
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/.babelrc +1 -1
- package/RCTAEPMessaging.podspec +25 -7
- package/README.md +109 -9
- package/android/build.gradle +87 -22
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +0 -2
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java +267 -200
- package/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingPackage.java +27 -25
- package/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingUtil.java +131 -0
- package/dist/Messaging.d.ts +62 -0
- package/dist/Messaging.js +112 -0
- package/dist/Messaging.js.map +1 -0
- package/{js → dist}/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/models/Message.d.ts +46 -0
- package/dist/models/Message.js +73 -0
- package/dist/models/Message.js.map +1 -0
- package/dist/models/MessagingDelegate.d.ts +30 -0
- package/{js → dist}/models/MessagingDelegate.js +1 -1
- package/dist/models/MessagingDelegate.js.map +1 -0
- package/{js → dist}/models/MessagingEdgeEventType.js +1 -1
- package/dist/models/MessagingEdgeEventType.js.map +1 -0
- package/dist/models/MessagingProposition.d.ts +8 -0
- package/dist/models/MessagingProposition.js +24 -0
- package/dist/models/MessagingProposition.js.map +1 -0
- package/dist/models/MessagingPropositionItem.d.ts +6 -0
- package/dist/models/MessagingPropositionItem.js +23 -0
- package/dist/models/MessagingPropositionItem.js.map +1 -0
- package/ios/src/RCTAEPMessaging-Bridging-Header.h +15 -0
- package/ios/src/RCTAEPMessaging.mm +50 -0
- package/ios/src/RCTAEPMessaging.swift +283 -0
- package/ios/src/RCTAEPMessagingConstants.swift +22 -0
- package/ios/src/RCTAEPMessagingDataBridge.swift +41 -0
- package/package.json +3 -3
- package/src/Messaging.ts +147 -0
- package/{ts → src}/index.ts +1 -1
- package/src/models/Message.ts +84 -0
- package/src/models/MessagingDelegate.ts +47 -0
- package/{ts → src}/models/MessagingEdgeEventType.ts +1 -1
- package/src/models/MessagingProposition.ts +32 -0
- package/src/models/MessagingPropositionItem.ts +23 -0
- package/tsconfig.json +2 -2
- package/ios/RCTAEPMessaging.xcodeproj/project.pbxproj +0 -304
- package/ios/src/RCTAEPMessaging.h +0 -20
- package/ios/src/RCTAEPMessaging.m +0 -196
- package/js/Messaging.d.ts +0 -32
- package/js/Messaging.js +0 -80
- package/js/Messaging.js.map +0 -1
- package/js/index.js.map +0 -1
- package/js/models/Message.d.ts +0 -43
- package/js/models/Message.js +0 -80
- package/js/models/Message.js.map +0 -1
- package/js/models/MessagingDelegate.d.ts +0 -25
- package/js/models/MessagingDelegate.js.map +0 -1
- package/js/models/MessagingEdgeEventType.js.map +0 -1
- package/ts/Messaging.ts +0 -99
- package/ts/models/Message.ts +0 -82
- package/ts/models/MessagingDelegate.ts +0 -41
- /package/{js → dist}/index.d.ts +0 -0
- /package/{js → dist}/models/MessagingEdgeEventType.d.ts +0 -0
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
/*
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
you may not use this file except in compliance with the License.
|
|
5
|
-
of the License at
|
|
6
|
-
Unless required by applicable law
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
Copyright 2023 Adobe. All rights reserved.
|
|
3
|
+
This file is licensed to you under the Apache License, Version 2.0 (the
|
|
4
|
+
"License"); you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
|
|
7
|
+
or agreed to in writing, software distributed under the License is
|
|
8
|
+
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF
|
|
9
|
+
ANY KIND, either express or implied. See the License for the specific
|
|
10
|
+
language governing permissions and limitations under the License.
|
|
10
11
|
*/
|
|
11
12
|
package com.adobe.marketing.mobile.reactnative.messaging;
|
|
12
13
|
|
|
14
|
+
import android.app.Activity;
|
|
13
15
|
import com.adobe.marketing.mobile.AdobeCallback;
|
|
16
|
+
import com.adobe.marketing.mobile.AdobeCallbackWithError;
|
|
17
|
+
import com.adobe.marketing.mobile.AdobeError;
|
|
14
18
|
import com.adobe.marketing.mobile.LoggingMode;
|
|
15
|
-
|
|
16
|
-
import static com.adobe.marketing.mobile.LoggingMode.DEBUG;
|
|
17
|
-
import static com.adobe.marketing.mobile.LoggingMode.VERBOSE;
|
|
18
|
-
|
|
19
|
-
import android.util.Log;
|
|
20
|
-
|
|
21
19
|
import com.adobe.marketing.mobile.Message;
|
|
22
20
|
import com.adobe.marketing.mobile.Messaging;
|
|
23
21
|
import com.adobe.marketing.mobile.MessagingEdgeEventType;
|
|
24
22
|
import com.adobe.marketing.mobile.MobileCore;
|
|
23
|
+
import com.adobe.marketing.mobile.messaging.MessagingProposition;
|
|
24
|
+
import com.adobe.marketing.mobile.messaging.Surface;
|
|
25
25
|
import com.adobe.marketing.mobile.services.MessagingDelegate;
|
|
26
26
|
import com.adobe.marketing.mobile.services.ui.FullscreenMessage;
|
|
27
27
|
import com.facebook.react.bridge.Arguments;
|
|
@@ -29,225 +29,292 @@ import com.facebook.react.bridge.Promise;
|
|
|
29
29
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
30
30
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
31
31
|
import com.facebook.react.bridge.ReactMethod;
|
|
32
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
32
33
|
import com.facebook.react.bridge.WritableMap;
|
|
33
34
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
34
|
-
|
|
35
35
|
import java.util.HashMap;
|
|
36
|
+
import java.util.List;
|
|
36
37
|
import java.util.Map;
|
|
37
38
|
import java.util.concurrent.CountDownLatch;
|
|
38
39
|
|
|
39
|
-
public final class RCTAEPMessagingModule
|
|
40
|
-
|
|
41
|
-
private static final String TAG = "RCTAEPMessagingModule";
|
|
42
|
-
private final Map<String, Message> messageCache;
|
|
43
|
-
private final ReactApplicationContext reactContext;
|
|
44
|
-
private boolean shouldSaveMessage;
|
|
45
|
-
private boolean shouldShowMessage;
|
|
46
|
-
private CountDownLatch latch = new CountDownLatch(1);
|
|
47
|
-
|
|
48
|
-
public RCTAEPMessagingModule(ReactApplicationContext reactContext) {
|
|
49
|
-
super(reactContext);
|
|
50
|
-
this.reactContext = reactContext;
|
|
51
|
-
this.messageCache = new HashMap<>();
|
|
52
|
-
this.shouldShowMessage = false;
|
|
53
|
-
this.shouldSaveMessage = false;
|
|
54
|
-
}
|
|
40
|
+
public final class RCTAEPMessagingModule
|
|
41
|
+
extends ReactContextBaseJavaModule implements MessagingDelegate {
|
|
55
42
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
43
|
+
private static final String TAG = "RCTAEPMessagingModule";
|
|
44
|
+
private final Map<String, Message> messageCache = new HashMap<>();
|
|
45
|
+
private final ReactApplicationContext reactContext;
|
|
46
|
+
private boolean shouldSaveMessage = false;
|
|
47
|
+
private boolean shouldShowMessage = false;
|
|
48
|
+
private CountDownLatch latch = new CountDownLatch(1);
|
|
49
|
+
private Message latestMessage = null;
|
|
50
|
+
|
|
51
|
+
public RCTAEPMessagingModule(ReactApplicationContext reactContext) {
|
|
52
|
+
super(reactContext);
|
|
53
|
+
this.reactContext = reactContext;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Override
|
|
57
|
+
public String getName() {
|
|
58
|
+
return "AEPMessaging";
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Required for rn built in EventEmitter Calls.
|
|
62
|
+
@ReactMethod
|
|
63
|
+
public void addListener(String eventName) {}
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
public void removeListeners(Integer count) {}
|
|
67
|
+
|
|
68
|
+
@ReactMethod
|
|
69
|
+
public void extensionVersion(final Promise promise) {
|
|
70
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG, "extensionVersion is called");
|
|
71
|
+
promise.resolve(Messaging.extensionVersion());
|
|
72
|
+
}
|
|
60
73
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
74
|
+
@ReactMethod
|
|
75
|
+
public void getCachedMessages(final Promise promise) {
|
|
76
|
+
promise.resolve(
|
|
77
|
+
RCTAEPMessagingUtil.convertMessagesToJS(this.messageCache.values()));
|
|
78
|
+
}
|
|
64
79
|
|
|
65
|
-
|
|
66
|
-
|
|
80
|
+
@ReactMethod
|
|
81
|
+
public void getLatestMessage(final Promise promise) {
|
|
82
|
+
promise.resolve(this.latestMessage);
|
|
83
|
+
}
|
|
67
84
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
@ReactMethod
|
|
86
|
+
public void getPropositionsForSurfaces(ReadableArray surfaces,
|
|
87
|
+
final Promise promise) {
|
|
88
|
+
String bundleId = this.reactContext.getPackageName();
|
|
89
|
+
Messaging.getPropositionsForSurfaces(
|
|
90
|
+
RCTAEPMessagingUtil.convertSurfaces(surfaces),
|
|
91
|
+
new AdobeCallbackWithError<Map<Surface, List<MessagingProposition>>>() {
|
|
92
|
+
@Override
|
|
93
|
+
public void fail(final AdobeError adobeError) {
|
|
94
|
+
promise.reject(adobeError.getErrorName(),
|
|
95
|
+
"Unable to get Propositions");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@Override
|
|
99
|
+
public void call(
|
|
100
|
+
Map<Surface, List<MessagingProposition>> propositionsMap) {
|
|
101
|
+
promise.resolve(RCTAEPMessagingUtil.convertSurfacePropositions(
|
|
102
|
+
propositionsMap, bundleId));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@ReactMethod
|
|
108
|
+
public void refreshInAppMessages() {
|
|
109
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG, "refreshInAppMessages is called");
|
|
110
|
+
Messaging.refreshInAppMessages();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@ReactMethod
|
|
114
|
+
public void setMessagingDelegate() {
|
|
115
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG, "setMessagingDelegate is called");
|
|
116
|
+
MobileCore.setMessagingDelegate(this);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@ReactMethod
|
|
120
|
+
public void updatePropositionsForSurfaces(ReadableArray surfaces) {
|
|
121
|
+
Messaging.updatePropositionsForSurfaces(
|
|
122
|
+
RCTAEPMessagingUtil.convertSurfaces(surfaces));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Message Methods
|
|
126
|
+
|
|
127
|
+
@ReactMethod
|
|
128
|
+
public void clear(final String messageId) {
|
|
129
|
+
if (messageId != null) {
|
|
130
|
+
MobileCore.log(
|
|
131
|
+
LoggingMode.VERBOSE, TAG,
|
|
132
|
+
String.format("clear is called with message id: %s", messageId));
|
|
133
|
+
messageCache.remove(messageId);
|
|
72
134
|
}
|
|
135
|
+
}
|
|
73
136
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
137
|
+
@ReactMethod
|
|
138
|
+
public void dismiss(final String messageId, final boolean suppressAutoTrack) {
|
|
139
|
+
if (messageId != null && messageCache.get(messageId) != null) {
|
|
140
|
+
MobileCore.log(
|
|
141
|
+
LoggingMode.VERBOSE, TAG,
|
|
142
|
+
String.format(
|
|
143
|
+
"dismiss is called with message id: %s and suppressAutoTrack: %b",
|
|
144
|
+
messageId, suppressAutoTrack));
|
|
145
|
+
messageCache.get(messageId).dismiss(suppressAutoTrack);
|
|
78
146
|
}
|
|
147
|
+
}
|
|
79
148
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
149
|
+
@ReactMethod
|
|
150
|
+
public void handleJavascriptMessage(final String messageId,
|
|
151
|
+
final String messageName,
|
|
152
|
+
final Promise promise) {
|
|
153
|
+
if (messageId != null && messageCache.get(messageId) != null) {
|
|
154
|
+
MobileCore.log(
|
|
155
|
+
LoggingMode.VERBOSE, TAG,
|
|
156
|
+
String.format(
|
|
157
|
+
"handleJavascriptMessage is called with message id: %s and messageName: %s",
|
|
158
|
+
messageId, messageName));
|
|
159
|
+
messageCache.get(messageId).handleJavascriptMessage(
|
|
160
|
+
messageName, new AdobeCallback<String>() {
|
|
161
|
+
@Override
|
|
162
|
+
public void call(final String s) {
|
|
163
|
+
if (s != null) {
|
|
164
|
+
promise.resolve(s);
|
|
165
|
+
} else {
|
|
166
|
+
promise.reject("error", "error in handling javascriptMessage " +
|
|
167
|
+
messageName);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
84
171
|
}
|
|
172
|
+
}
|
|
85
173
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
174
|
+
@ReactMethod
|
|
175
|
+
public void setAutoTrack(final String messageId, final boolean autoTrack) {
|
|
176
|
+
if (messageId != null && messageCache.get(messageId) != null) {
|
|
177
|
+
MobileCore.log(
|
|
178
|
+
LoggingMode.VERBOSE, TAG,
|
|
179
|
+
String.format(
|
|
180
|
+
"setAutoTrack is called with message id: %s and autoTrack: %b",
|
|
181
|
+
messageId, autoTrack));
|
|
182
|
+
messageCache.get(messageId).setAutoTrack(autoTrack);
|
|
92
183
|
}
|
|
184
|
+
}
|
|
93
185
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
186
|
+
@ReactMethod
|
|
187
|
+
public void show(final String messageId) {
|
|
188
|
+
if (messageId != null && messageCache.get(messageId) != null) {
|
|
189
|
+
MobileCore.log(
|
|
190
|
+
LoggingMode.VERBOSE, TAG,
|
|
191
|
+
String.format("show is called with message id: %s", messageId));
|
|
192
|
+
messageCache.get(messageId).show();
|
|
100
193
|
}
|
|
194
|
+
}
|
|
101
195
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
break;
|
|
123
|
-
case 5:
|
|
124
|
-
edgeEventType = MessagingEdgeEventType.PUSH_CUSTOM_ACTION;
|
|
125
|
-
break;
|
|
126
|
-
default:
|
|
127
|
-
break;
|
|
128
|
-
}
|
|
129
|
-
if (edgeEventType != null) {
|
|
130
|
-
messageCache.get(messageId).track(interaction, edgeEventType);
|
|
131
|
-
} else {
|
|
132
|
-
MobileCore.log(DEBUG, TAG, String.format("Unable to track interaction (%s) because edgeEventType (%d) is invalid ", interaction, eventType));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
196
|
+
@ReactMethod
|
|
197
|
+
public void track(final String messageId, final String interaction,
|
|
198
|
+
final int eventType) {
|
|
199
|
+
if (messageId != null && messageCache.get(messageId) != null) {
|
|
200
|
+
MobileCore.log(
|
|
201
|
+
LoggingMode.VERBOSE, TAG,
|
|
202
|
+
String.format(
|
|
203
|
+
"track is called with message id: %s, interaction: %s and eventType: %d",
|
|
204
|
+
messageId, interaction, eventType));
|
|
205
|
+
MessagingEdgeEventType edgeEventType =
|
|
206
|
+
RCTAEPMessagingUtil.getEventType(eventType);
|
|
207
|
+
if (edgeEventType != null) {
|
|
208
|
+
messageCache.get(messageId).track(interaction, edgeEventType);
|
|
209
|
+
} else {
|
|
210
|
+
MobileCore.log(
|
|
211
|
+
LoggingMode.DEBUG, TAG,
|
|
212
|
+
String.format(
|
|
213
|
+
"Unable to track interaction (%s) because edgeEventType (%d) is invalid ",
|
|
214
|
+
interaction, eventType));
|
|
215
|
+
}
|
|
135
216
|
}
|
|
217
|
+
}
|
|
136
218
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
} else {
|
|
147
|
-
promise.reject("error", "error in handling javascriptMessage " + messageName);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
}
|
|
219
|
+
// Messaging Delegate functions
|
|
220
|
+
@Override
|
|
221
|
+
public void onShow(final FullscreenMessage fullscreenMessage) {
|
|
222
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG, "onShow is called");
|
|
223
|
+
final Message message = (Message)fullscreenMessage.getParent();
|
|
224
|
+
if (message != null) {
|
|
225
|
+
Map<String, String> data =
|
|
226
|
+
RCTAEPMessagingUtil.convertMessageToMap(message);
|
|
227
|
+
emitEvent("onShow", data);
|
|
152
228
|
}
|
|
229
|
+
}
|
|
153
230
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
231
|
+
@Override
|
|
232
|
+
public void onDismiss(final FullscreenMessage fullscreenMessage) {
|
|
233
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG, "onDismiss is called");
|
|
234
|
+
final Message message = (Message)fullscreenMessage.getParent();
|
|
235
|
+
if (message != null) {
|
|
236
|
+
Map<String, String> data =
|
|
237
|
+
RCTAEPMessagingUtil.convertMessageToMap(message);
|
|
238
|
+
emitEvent("onDismiss", data);
|
|
160
239
|
}
|
|
240
|
+
}
|
|
161
241
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
242
|
+
@Override
|
|
243
|
+
public boolean shouldShowMessage(final FullscreenMessage fullscreenMessage) {
|
|
244
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG, "shouldShowMessage is called");
|
|
245
|
+
final Message message = (Message)fullscreenMessage.getParent();
|
|
246
|
+
if (message != null) {
|
|
247
|
+
Map<String, String> data =
|
|
248
|
+
RCTAEPMessagingUtil.convertMessageToMap(message);
|
|
249
|
+
emitEvent("shouldShowMessage", data);
|
|
250
|
+
// Latch stops the thread until the shouldShowMessage value is received
|
|
251
|
+
// from the JS side on thread dedicated to run JS code. The function
|
|
252
|
+
// called from JS that resumes the thread is "shouldShowMessage".
|
|
253
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG,
|
|
254
|
+
"shouldShowMessage: Thread is locked.");
|
|
255
|
+
try {
|
|
256
|
+
latch.await();
|
|
257
|
+
} catch (final InterruptedException e) {
|
|
258
|
+
MobileCore.log(LoggingMode.ERROR, TAG,
|
|
259
|
+
String.format("CountDownLatch await Interrupted: (%s)",
|
|
260
|
+
e.getLocalizedMessage()));
|
|
261
|
+
}
|
|
262
|
+
MobileCore.log(LoggingMode.VERBOSE, TAG,
|
|
263
|
+
"shouldShowMessage: Thread is resumed.");
|
|
168
264
|
}
|
|
169
265
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
MobileCore.log(VERBOSE, TAG, String.format("shouldShowMessage is called with message id: %b and shouldSaveMessage: %b", shouldShowMessage, shouldSaveMessage));
|
|
173
|
-
this.shouldShowMessage = shouldShowMessage;
|
|
174
|
-
this.shouldSaveMessage = shouldSaveMessage;
|
|
175
|
-
latch.countDown();
|
|
266
|
+
if (shouldShowMessage) {
|
|
267
|
+
this.latestMessage = message;
|
|
176
268
|
}
|
|
177
269
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
public void onShow(final FullscreenMessage fullscreenMessage) {
|
|
181
|
-
MobileCore.log(VERBOSE, TAG, "onShow is called");
|
|
182
|
-
final Message message = (Message) fullscreenMessage.getParent();
|
|
183
|
-
if (message != null) {
|
|
184
|
-
Map<String, String> data = new HashMap<>();
|
|
185
|
-
data.put("id", message.getId());
|
|
186
|
-
data.put("autoTrack", String.valueOf(message.getAutoTrack()));
|
|
187
|
-
emitEvent("onShow", data);
|
|
188
|
-
}
|
|
270
|
+
if (shouldSaveMessage) {
|
|
271
|
+
messageCache.put(message.getId(), message);
|
|
189
272
|
}
|
|
190
273
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
274
|
+
return shouldShowMessage;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
@Override
|
|
278
|
+
public void urlLoaded(String url, FullscreenMessage fullscreenMessage) {
|
|
279
|
+
MobileCore.log(
|
|
280
|
+
LoggingMode.VERBOSE, TAG,
|
|
281
|
+
String.format("overrideUrlLoad is called with url: (%s)", url));
|
|
282
|
+
final Message message = (Message)fullscreenMessage.getParent();
|
|
283
|
+
if (message != null) {
|
|
284
|
+
Map data = new HashMap<>();
|
|
285
|
+
data.put("message", RCTAEPMessagingUtil.convertMessageToMap(message));
|
|
286
|
+
data.put("url", url);
|
|
287
|
+
emitEvent("urlLoaded", data);
|
|
201
288
|
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Messaging Delegate Callback
|
|
292
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
293
|
+
public void setMessageSettings(final boolean shouldShowMessage,
|
|
294
|
+
final boolean shouldSaveMessage) {
|
|
295
|
+
MobileCore.log(
|
|
296
|
+
LoggingMode.VERBOSE, TAG,
|
|
297
|
+
String.format(
|
|
298
|
+
"shouldShowMessage is called with message id: %b and shouldSaveMessage: %b",
|
|
299
|
+
shouldShowMessage, shouldSaveMessage));
|
|
300
|
+
this.shouldShowMessage = shouldShowMessage;
|
|
301
|
+
this.shouldSaveMessage = shouldSaveMessage;
|
|
302
|
+
latch.countDown();
|
|
303
|
+
}
|
|
202
304
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
MobileCore.log(VERBOSE, TAG, "shouldShowMessage: Thread is locked.");
|
|
214
|
-
try {
|
|
215
|
-
latch.await();
|
|
216
|
-
} catch (final InterruptedException e) {
|
|
217
|
-
MobileCore.log(LoggingMode.ERROR, TAG, String.format("CountDownLatch await Interrupted: (%s)", e.getLocalizedMessage()));
|
|
218
|
-
}
|
|
219
|
-
MobileCore.log(VERBOSE, TAG, "shouldShowMessage: Thread is resumed.");
|
|
220
|
-
if (shouldSaveMessage) {
|
|
221
|
-
messageCache.put(message.getId(), message);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return shouldShowMessage;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
@Override
|
|
228
|
-
public void urlLoaded(String url, FullscreenMessage fullscreenMessage) {
|
|
229
|
-
MobileCore.log(VERBOSE, TAG, String.format("overrideUrlLoad is called with url: (%s)", url));
|
|
230
|
-
final Message message = (Message) fullscreenMessage.getParent();
|
|
231
|
-
if (message != null) {
|
|
232
|
-
Map<String, String> data = new HashMap<>();
|
|
233
|
-
data.put("id", message.getId());
|
|
234
|
-
data.put("autoTrack", String.valueOf(message.getAutoTrack()));
|
|
235
|
-
data.put("url", url);
|
|
236
|
-
emitEvent("urlLoaded", data);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Emits an event along with data to be handled by the Javascript
|
|
242
|
-
*
|
|
243
|
-
* @param name event name
|
|
244
|
-
* @param data data sent along with event
|
|
245
|
-
*/
|
|
246
|
-
private void emitEvent(final String name, final Map<String, String> data) {
|
|
247
|
-
WritableMap eventData = Arguments.createMap();
|
|
248
|
-
for (final Map.Entry<String, String> entry : data.entrySet()) {
|
|
249
|
-
eventData.putString(entry.getKey(), entry.getValue());
|
|
250
|
-
}
|
|
251
|
-
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(name, eventData);
|
|
305
|
+
/**
|
|
306
|
+
* Emits an event along with data to be handled by the Javascript
|
|
307
|
+
*
|
|
308
|
+
* @param name event name
|
|
309
|
+
* @param data data sent along with event
|
|
310
|
+
*/
|
|
311
|
+
private void emitEvent(final String name, final Map<String, String> data) {
|
|
312
|
+
WritableMap eventData = Arguments.createMap();
|
|
313
|
+
for (final Map.Entry<String, String> entry : data.entrySet()) {
|
|
314
|
+
eventData.putString(entry.getKey(), entry.getValue());
|
|
252
315
|
}
|
|
316
|
+
reactContext
|
|
317
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
318
|
+
.emit(name, eventData);
|
|
319
|
+
}
|
|
253
320
|
}
|
|
@@ -1,38 +1,40 @@
|
|
|
1
1
|
/*
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
you may not use this file except in compliance with the License.
|
|
5
|
-
of the License at
|
|
6
|
-
Unless required by applicable law
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
Copyright 2023 Adobe. All rights reserved.
|
|
3
|
+
This file is licensed to you under the Apache License, Version 2.0 (the
|
|
4
|
+
"License"); you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
|
|
7
|
+
or agreed to in writing, software distributed under the License is distributed
|
|
8
|
+
on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either
|
|
9
|
+
express or implied. See the License for the specific language governing
|
|
10
|
+
permissions and limitations under the License.
|
|
10
11
|
*/
|
|
11
12
|
package com.adobe.marketing.mobile.reactnative.messaging;
|
|
12
13
|
|
|
13
|
-
import java.util.Arrays;
|
|
14
|
-
import java.util.Collections;
|
|
15
|
-
import java.util.List;
|
|
16
|
-
|
|
17
14
|
import com.facebook.react.ReactPackage;
|
|
15
|
+
import com.facebook.react.bridge.JavaScriptModule;
|
|
18
16
|
import com.facebook.react.bridge.NativeModule;
|
|
19
17
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
20
18
|
import com.facebook.react.uimanager.ViewManager;
|
|
21
|
-
import
|
|
19
|
+
import java.util.Arrays;
|
|
20
|
+
import java.util.Collections;
|
|
21
|
+
import java.util.List;
|
|
22
22
|
public class RCTAEPMessagingPackage implements ReactPackage {
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
@Override
|
|
25
|
+
public List<NativeModule>
|
|
26
|
+
createNativeModules(ReactApplicationContext reactContext) {
|
|
27
|
+
return Arrays.<NativeModule>asList(new RCTAEPMessagingModule(reactContext));
|
|
28
|
+
}
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
// Deprecated from RN 0.47
|
|
31
|
+
public List<Class<? extends JavaScriptModule>> createJSModules() {
|
|
32
|
+
return Collections.emptyList();
|
|
33
|
+
}
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
@Override
|
|
36
|
+
public List<ViewManager>
|
|
37
|
+
createViewManagers(ReactApplicationContext reactContext) {
|
|
38
|
+
return Collections.emptyList();
|
|
39
|
+
}
|
|
38
40
|
}
|