react-native-moengage 11.0.0 → 11.1.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/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # 30-09-2024
2
+
3
+ ## 11.1.0
4
+ - Added support for Multiple SelfHandled InApps.
5
+ - iOS
6
+ - Added support for Provisional Push.
7
+ - MoEngage-iOS-SDK version updated to `9.20.0`.
8
+
1
9
  # 07-08-2024
2
10
 
3
11
  ## 11.0.0
@@ -15,7 +15,7 @@ Pod::Spec.new do |s|
15
15
  s.platforms = { :ios => "11.0", :tvos => "11.0" }
16
16
  s.source_files = 'iOS/MoEReactBridge/**/*.{h,m,mm}'
17
17
  s.dependency 'React'
18
- s.dependency 'MoEngagePluginBase','5.0.0'
18
+ s.dependency 'MoEngagePluginBase','5.1.0'
19
19
  s.ios.dependency 'MoEngage-iOS-SDK/RichNotification'
20
20
 
21
21
  s.prepare_command = <<-CMD
@@ -20,9 +20,9 @@ rootProject.allprojects {
20
20
 
21
21
  ext {
22
22
  //dependency version
23
- moengageCoreVersion = "13.04.00"
24
- moengageInAppVersion = "8.5.0"
25
- basePluginVersion = "4.1.0"
23
+ moengageCoreVersion = "13.05.00"
24
+ moengageInAppVersion = "8.6.0"
25
+ basePluginVersion = "4.2.0"
26
26
  //build versions
27
27
  minimumVersion = 21
28
28
  compileVersion = 34
@@ -11,260 +11,273 @@
11
11
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
12
12
  */
13
13
 
14
- package com.moengage.react
15
-
16
- import android.content.Context
17
- import com.facebook.react.bridge.Promise
18
- import com.facebook.react.bridge.ReactApplicationContext
19
- import com.moengage.core.LogLevel
20
- import com.moengage.core.MoECoreHelper
21
- import com.moengage.core.internal.logger.Logger
22
- import com.moengage.core.listeners.AppBackgroundListener
23
- import com.moengage.plugin.base.internal.PluginHelper
24
- import com.moengage.plugin.base.internal.setEventEmitter
25
- import com.moengage.plugin.base.internal.userDeletionDataToJson
26
-
27
- /**
28
- * Class to handle all the request from the [MoEReactBridge] from both old and new arch
29
- *
30
- * @author Abhishek Kumar
31
- * @since Todo: Add Version
32
- */
33
- internal class MoEReactBridgeHandler(private val reactContext: ReactApplicationContext) {
34
-
35
- private val tag = "${MODULE_TAG}MoEReactBridgeHandler"
36
-
37
- private val context: Context = reactContext.applicationContext
38
- private val pluginHelper = PluginHelper()
39
-
40
- private val backgroundStateListener =
41
- AppBackgroundListener { _, _ -> pluginHelper.onFrameworkDetached() }
42
-
43
- fun getName() = NAME
44
-
45
- fun setAppStatus(payload: String) {
46
- try {
47
- Logger.print { "$tag setAppStatus() : Payload: $payload" }
48
- pluginHelper.setAppStatus(context, payload)
49
- } catch (t: Throwable) {
50
- Logger.print(LogLevel.ERROR, t) { "$tag setAppStatus() : " }
51
- }
52
- }
53
-
54
- fun trackEvent(payload: String) {
55
- try {
56
- Logger.print { "$tag trackEvent() : Payload: $payload" }
57
- pluginHelper.trackEvent(context, payload)
58
- } catch (t: Throwable) {
59
- Logger.print(LogLevel.ERROR, t) { "$tag trackEvent() : " }
60
- }
61
- }
62
-
63
- fun setUserAttribute(payload: String) {
64
- try {
65
- Logger.print { "$tag setUserAttribute() : Payload: $payload" }
66
- pluginHelper.setUserAttribute(context, payload)
67
- } catch (t: Throwable) {
68
- Logger.print(LogLevel.ERROR, t) { "$tag setUserAttribute() : " }
69
- }
70
- }
71
-
72
- fun logout(payload: String) {
73
- try {
74
- Logger.print { "$tag logout() : $payload" }
75
- pluginHelper.logout(context, payload)
76
- } catch (t: Throwable) {
77
- Logger.print(LogLevel.ERROR, t) { "$tag logout() : " }
78
- }
79
- }
80
-
81
- fun setAlias(payload: String) {
82
- try {
83
- Logger.print { "$tag setAlias() : Payload: $payload" }
84
- pluginHelper.setAlias(context, payload)
85
- } catch (t: Throwable) {
86
- Logger.print(LogLevel.ERROR, t) { "$tag setAlias() : " }
87
- }
88
- }
89
-
90
- fun setAppContext(payload: String) {
91
- try {
92
- Logger.print { "$tag setAppContext() : Payload: $payload" }
93
- pluginHelper.setAppContext(context, payload)
94
- } catch (t: Throwable) {
95
- Logger.print(LogLevel.ERROR, t) { "$tag setAppContext() : " }
96
- }
97
- }
98
-
99
- fun resetAppContext(payload: String) {
100
- try {
101
- Logger.print { "$tag resetAppContext() : $payload" }
102
- pluginHelper.resetAppContext(context, payload)
103
- } catch (t: Throwable) {
104
- Logger.print(LogLevel.ERROR, t) { "$tag resetAppContext() : " }
105
- }
106
- }
107
-
108
- fun showInApp(payload: String) {
109
- try {
110
- Logger.print { "$tag showInApp() : $payload" }
111
- pluginHelper.showInApp(context, payload)
112
- } catch (t: Throwable) {
113
- Logger.print(LogLevel.ERROR, t) { "$tag showInApp() : " }
114
- }
115
- }
116
-
117
- fun getSelfHandledInApp(payload: String) {
118
- try {
119
- Logger.print { "$tag getSelfHandledInApp() : $payload" }
120
- pluginHelper.getSelfHandledInApp(context, payload)
121
- } catch (t: Throwable) {
122
- Logger.print(LogLevel.ERROR, t) { "$tag getSelfHandledInApp() : " }
123
- }
124
- }
125
-
126
- fun passPushToken(payload: String) {
127
- try {
128
- Logger.print { "$tag passPushToken() : $payload" }
129
- pluginHelper.passPushToken(context, payload)
130
- } catch (t: Throwable) {
131
- Logger.print(LogLevel.ERROR, t) { "$tag passPushToken() : " }
132
- }
133
- }
134
-
135
- fun passPushPayload(payload: String) {
136
- try {
137
- Logger.print { "$tag passPushPayload() : $payload" }
138
- pluginHelper.passPushPayload(context, payload)
139
- } catch (t: Throwable) {
140
- Logger.print(LogLevel.ERROR, t) { "$tag passPushPayload() : " }
141
- }
142
- }
143
-
144
- fun initialize(payload: String) {
145
- try {
146
- Logger.print { "$tag initialize() : $payload" }
147
- pluginHelper.initialise(payload)
148
- setEventEmitter(EventEmitterImpl(reactContext))
149
- if (GlobalCache.lifecycleAwareCallbackEnabled) {
150
- MoECoreHelper.addAppBackgroundListener(backgroundStateListener)
151
- }
152
- } catch (t: Throwable) {
153
- Logger.print(LogLevel.ERROR, t) { "$tag initialize() : " }
154
- }
155
- }
156
-
157
- fun selfHandledCallback(payload: String) {
158
- try {
159
- Logger.print { "$tag selfHandledCallback() : $payload" }
160
- pluginHelper.selfHandledCallback(context, payload)
161
- } catch (t: Throwable) {
162
- Logger.print(LogLevel.ERROR, t) { "$tag selfHandledCallback() : " }
163
- }
164
- }
165
-
166
- fun optOutTracking(payload: String) {
167
- try {
168
- pluginHelper.optOutTracking(context, payload)
169
- } catch (t: Throwable) {
170
- Logger.print(LogLevel.ERROR, t) { "$tag optOutTracking() : " }
171
- }
172
- }
173
-
174
- fun updateSdkState(payload: String) {
175
- try {
176
- Logger.print { "$tag updateSdkState() : $payload" }
177
- pluginHelper.storeFeatureStatus(context, payload)
178
- } catch (t: Throwable) {
179
- Logger.print(LogLevel.ERROR, t) { "$tag updateSdkState() : " }
180
- }
181
- }
182
-
183
- fun onOrientationChanged() {
184
- try {
185
- Logger.print { "$tag onOrientationChanged() : " }
186
- pluginHelper.onConfigurationChanged()
187
- } catch (t: Throwable) {
188
- Logger.print(LogLevel.ERROR, t) { "$tag onOrientationChanged() : " }
189
- }
190
- }
191
-
192
- fun deviceIdentifierTrackingStatusUpdate(payload: String) {
193
- try {
194
- Logger.print { "$tag deviceIdentifierTrackingStatusUpdate() : $payload" }
195
- pluginHelper.deviceIdentifierTrackingStatusUpdate(context, payload)
196
- } catch (t: Throwable) {
197
- Logger.print(LogLevel.ERROR, t) { "$tag deviceIdentifierTrackingStatusUpdate() : " }
198
- }
199
- }
200
-
201
- fun setupNotificationChannels() {
202
- try {
203
- Logger.print { "$tag setupNotificationChannels() : " }
204
- pluginHelper.setUpNotificationChannels(context)
205
- } catch (t: Throwable) {
206
- Logger.print(LogLevel.ERROR, t) { "$tag setupNotificationChannel() :" }
207
- }
208
- }
209
-
210
- fun navigateToSettings() {
211
- try {
212
- Logger.print { "$tag navigateToSettings() : " }
213
- pluginHelper.navigateToSettings(context)
214
- } catch (t: Throwable) {
215
- Logger.print(LogLevel.ERROR, t) { "$tag navigateToSettings() :" }
216
- }
217
- }
218
-
219
- fun requestPushPermission() {
220
- try {
221
- Logger.print { "$tag requestPushPermission() : " }
222
- pluginHelper.requestPushPermission(context)
223
- } catch (t: Throwable) {
224
- Logger.print(LogLevel.ERROR, t) { "$tag requestPushPermission() :" }
225
- }
226
- }
227
-
228
- fun permissionResponse(payload: String) {
229
- try {
230
- Logger.print { "$tag permissionResponse() : Payload: $payload" }
231
- pluginHelper.permissionResponse(context, payload)
232
- } catch (t: Throwable) {
233
- Logger.print(LogLevel.ERROR, t) { "$tag permissionResponse() :" }
234
- }
235
- }
236
-
237
- fun updatePushPermissionRequestCount(payload: String) {
238
- try {
239
- Logger.print { "$tag updatePushPermissionRequestCount() : Payload: $payload" }
240
- pluginHelper.updatePushPermissionRequestCount(context, payload)
241
- } catch (t: Throwable) {
242
- Logger.print(LogLevel.ERROR, t) { "$tag updatePushPermissionRequestCount() :" }
243
- }
244
- }
245
-
246
- fun deleteUser(payload: String, promise: Promise) {
247
- try {
248
- Logger.print { "$tag deleteUser() : Payload: $payload" }
249
- pluginHelper.deleteUser(context, payload) { userDeletionData ->
250
- promise.resolve(userDeletionDataToJson(userDeletionData).toString())
251
- }
252
- } catch (t: Throwable) {
253
- Logger.print(LogLevel.ERROR, t) { "$tag deleteUser() :" }
254
- promise.reject(t)
255
- }
256
- }
257
-
258
- fun showNudge(payload: String) {
259
- try {
260
- Logger.print { "$tag showNudge() : Payload: $payload" }
261
- pluginHelper.showNudge(context, payload)
262
- } catch (t: Throwable) {
263
- Logger.print(LogLevel.ERROR, t) { "$tag showNudge() :" }
264
- }
265
- }
266
-
267
- companion object {
268
- const val NAME = "MoEReactBridge"
269
- }
270
- }
14
+ package com.moengage.react
15
+
16
+ import android.content.Context
17
+ import com.facebook.react.bridge.Promise
18
+ import com.facebook.react.bridge.ReactApplicationContext
19
+ import com.moengage.core.LogLevel
20
+ import com.moengage.core.MoECoreHelper
21
+ import com.moengage.core.internal.logger.Logger
22
+ import com.moengage.core.listeners.AppBackgroundListener
23
+ import com.moengage.plugin.base.internal.PluginHelper
24
+ import com.moengage.plugin.base.internal.selfHandledInAppsToJson
25
+ import com.moengage.plugin.base.internal.setEventEmitter
26
+ import com.moengage.plugin.base.internal.userDeletionDataToJson
27
+
28
+ /**
29
+ * Class to handle all the request from the [MoEReactBridge] from both old and new arch
30
+ *
31
+ * @author Abhishek Kumar
32
+ * @since Todo: Add Version
33
+ */
34
+ internal class MoEReactBridgeHandler(private val reactContext: ReactApplicationContext) {
35
+
36
+ private val tag = "${MODULE_TAG}MoEReactBridgeHandler"
37
+
38
+ private val context: Context = reactContext.applicationContext
39
+ private val pluginHelper = PluginHelper()
40
+
41
+ private val backgroundStateListener =
42
+ AppBackgroundListener { _, _ -> pluginHelper.onFrameworkDetached() }
43
+
44
+ fun getName() = NAME
45
+
46
+ fun setAppStatus(payload: String) {
47
+ try {
48
+ Logger.print { "$tag setAppStatus() : Payload: $payload" }
49
+ pluginHelper.setAppStatus(context, payload)
50
+ } catch (t: Throwable) {
51
+ Logger.print(LogLevel.ERROR, t) { "$tag setAppStatus() : " }
52
+ }
53
+ }
54
+
55
+ fun trackEvent(payload: String) {
56
+ try {
57
+ Logger.print { "$tag trackEvent() : Payload: $payload" }
58
+ pluginHelper.trackEvent(context, payload)
59
+ } catch (t: Throwable) {
60
+ Logger.print(LogLevel.ERROR, t) { "$tag trackEvent() : " }
61
+ }
62
+ }
63
+
64
+ fun setUserAttribute(payload: String) {
65
+ try {
66
+ Logger.print { "$tag setUserAttribute() : Payload: $payload" }
67
+ pluginHelper.setUserAttribute(context, payload)
68
+ } catch (t: Throwable) {
69
+ Logger.print(LogLevel.ERROR, t) { "$tag setUserAttribute() : " }
70
+ }
71
+ }
72
+
73
+ fun logout(payload: String) {
74
+ try {
75
+ Logger.print { "$tag logout() : $payload" }
76
+ pluginHelper.logout(context, payload)
77
+ } catch (t: Throwable) {
78
+ Logger.print(LogLevel.ERROR, t) { "$tag logout() : " }
79
+ }
80
+ }
81
+
82
+ fun setAlias(payload: String) {
83
+ try {
84
+ Logger.print { "$tag setAlias() : Payload: $payload" }
85
+ pluginHelper.setAlias(context, payload)
86
+ } catch (t: Throwable) {
87
+ Logger.print(LogLevel.ERROR, t) { "$tag setAlias() : " }
88
+ }
89
+ }
90
+
91
+ fun setAppContext(payload: String) {
92
+ try {
93
+ Logger.print { "$tag setAppContext() : Payload: $payload" }
94
+ pluginHelper.setAppContext(context, payload)
95
+ } catch (t: Throwable) {
96
+ Logger.print(LogLevel.ERROR, t) { "$tag setAppContext() : " }
97
+ }
98
+ }
99
+
100
+ fun resetAppContext(payload: String) {
101
+ try {
102
+ Logger.print { "$tag resetAppContext() : $payload" }
103
+ pluginHelper.resetAppContext(context, payload)
104
+ } catch (t: Throwable) {
105
+ Logger.print(LogLevel.ERROR, t) { "$tag resetAppContext() : " }
106
+ }
107
+ }
108
+
109
+ fun showInApp(payload: String) {
110
+ try {
111
+ Logger.print { "$tag showInApp() : $payload" }
112
+ pluginHelper.showInApp(context, payload)
113
+ } catch (t: Throwable) {
114
+ Logger.print(LogLevel.ERROR, t) { "$tag showInApp() : " }
115
+ }
116
+ }
117
+
118
+ fun getSelfHandledInApp(payload: String) {
119
+ try {
120
+ Logger.print { "$tag getSelfHandledInApp() : $payload" }
121
+ pluginHelper.getSelfHandledInApp(context, payload)
122
+ } catch (t: Throwable) {
123
+ Logger.print(LogLevel.ERROR, t) { "$tag getSelfHandledInApp() : " }
124
+ }
125
+ }
126
+
127
+ fun passPushToken(payload: String) {
128
+ try {
129
+ Logger.print { "$tag passPushToken() : $payload" }
130
+ pluginHelper.passPushToken(context, payload)
131
+ } catch (t: Throwable) {
132
+ Logger.print(LogLevel.ERROR, t) { "$tag passPushToken() : " }
133
+ }
134
+ }
135
+
136
+ fun passPushPayload(payload: String) {
137
+ try {
138
+ Logger.print { "$tag passPushPayload() : $payload" }
139
+ pluginHelper.passPushPayload(context, payload)
140
+ } catch (t: Throwable) {
141
+ Logger.print(LogLevel.ERROR, t) { "$tag passPushPayload() : " }
142
+ }
143
+ }
144
+
145
+ fun initialize(payload: String) {
146
+ try {
147
+ Logger.print { "$tag initialize() : $payload" }
148
+ pluginHelper.initialise(payload)
149
+ setEventEmitter(EventEmitterImpl(reactContext))
150
+ if (GlobalCache.lifecycleAwareCallbackEnabled) {
151
+ MoECoreHelper.addAppBackgroundListener(backgroundStateListener)
152
+ }
153
+ } catch (t: Throwable) {
154
+ Logger.print(LogLevel.ERROR, t) { "$tag initialize() : " }
155
+ }
156
+ }
157
+
158
+ fun selfHandledCallback(payload: String) {
159
+ try {
160
+ Logger.print { "$tag selfHandledCallback() : $payload" }
161
+ pluginHelper.selfHandledCallback(context, payload)
162
+ } catch (t: Throwable) {
163
+ Logger.print(LogLevel.ERROR, t) { "$tag selfHandledCallback() : " }
164
+ }
165
+ }
166
+
167
+ fun optOutTracking(payload: String) {
168
+ try {
169
+ pluginHelper.optOutTracking(context, payload)
170
+ } catch (t: Throwable) {
171
+ Logger.print(LogLevel.ERROR, t) { "$tag optOutTracking() : " }
172
+ }
173
+ }
174
+
175
+ fun updateSdkState(payload: String) {
176
+ try {
177
+ Logger.print { "$tag updateSdkState() : $payload" }
178
+ pluginHelper.storeFeatureStatus(context, payload)
179
+ } catch (t: Throwable) {
180
+ Logger.print(LogLevel.ERROR, t) { "$tag updateSdkState() : " }
181
+ }
182
+ }
183
+
184
+ fun onOrientationChanged() {
185
+ try {
186
+ Logger.print { "$tag onOrientationChanged() : " }
187
+ pluginHelper.onConfigurationChanged()
188
+ } catch (t: Throwable) {
189
+ Logger.print(LogLevel.ERROR, t) { "$tag onOrientationChanged() : " }
190
+ }
191
+ }
192
+
193
+ fun deviceIdentifierTrackingStatusUpdate(payload: String) {
194
+ try {
195
+ Logger.print { "$tag deviceIdentifierTrackingStatusUpdate() : $payload" }
196
+ pluginHelper.deviceIdentifierTrackingStatusUpdate(context, payload)
197
+ } catch (t: Throwable) {
198
+ Logger.print(LogLevel.ERROR, t) { "$tag deviceIdentifierTrackingStatusUpdate() : " }
199
+ }
200
+ }
201
+
202
+ fun setupNotificationChannels() {
203
+ try {
204
+ Logger.print { "$tag setupNotificationChannels() : " }
205
+ pluginHelper.setUpNotificationChannels(context)
206
+ } catch (t: Throwable) {
207
+ Logger.print(LogLevel.ERROR, t) { "$tag setupNotificationChannel() :" }
208
+ }
209
+ }
210
+
211
+ fun navigateToSettings() {
212
+ try {
213
+ Logger.print { "$tag navigateToSettings() : " }
214
+ pluginHelper.navigateToSettings(context)
215
+ } catch (t: Throwable) {
216
+ Logger.print(LogLevel.ERROR, t) { "$tag navigateToSettings() :" }
217
+ }
218
+ }
219
+
220
+ fun requestPushPermission() {
221
+ try {
222
+ Logger.print { "$tag requestPushPermission() : " }
223
+ pluginHelper.requestPushPermission(context)
224
+ } catch (t: Throwable) {
225
+ Logger.print(LogLevel.ERROR, t) { "$tag requestPushPermission() :" }
226
+ }
227
+ }
228
+
229
+ fun permissionResponse(payload: String) {
230
+ try {
231
+ Logger.print { "$tag permissionResponse() : Payload: $payload" }
232
+ pluginHelper.permissionResponse(context, payload)
233
+ } catch (t: Throwable) {
234
+ Logger.print(LogLevel.ERROR, t) { "$tag permissionResponse() :" }
235
+ }
236
+ }
237
+
238
+ fun updatePushPermissionRequestCount(payload: String) {
239
+ try {
240
+ Logger.print { "$tag updatePushPermissionRequestCount() : Payload: $payload" }
241
+ pluginHelper.updatePushPermissionRequestCount(context, payload)
242
+ } catch (t: Throwable) {
243
+ Logger.print(LogLevel.ERROR, t) { "$tag updatePushPermissionRequestCount() :" }
244
+ }
245
+ }
246
+
247
+ fun deleteUser(payload: String, promise: Promise) {
248
+ try {
249
+ Logger.print { "$tag deleteUser() : Payload: $payload" }
250
+ pluginHelper.deleteUser(context, payload) { userDeletionData ->
251
+ promise.resolve(userDeletionDataToJson(userDeletionData).toString())
252
+ }
253
+ } catch (t: Throwable) {
254
+ Logger.print(LogLevel.ERROR, t) { "$tag deleteUser() :" }
255
+ promise.reject(t)
256
+ }
257
+ }
258
+
259
+ fun showNudge(payload: String) {
260
+ try {
261
+ Logger.print { "$tag showNudge() : Payload: $payload" }
262
+ pluginHelper.showNudge(context, payload)
263
+ } catch (t: Throwable) {
264
+ Logger.print(LogLevel.ERROR, t) { "$tag showNudge() :" }
265
+ }
266
+ }
267
+
268
+ companion object {
269
+ const val NAME = "MoEReactBridge"
270
+ }
271
+
272
+ fun getSelfHandledInApps(payload: String, promise: Promise) {
273
+ try {
274
+ Logger.print { "$tag getSelfHandledInApps() : Payload: $payload" }
275
+ pluginHelper.getSelfHandledInApps(context, payload) { data ->
276
+ promise.resolve(selfHandledInAppsToJson(data).toString())
277
+ }
278
+ } catch (t: Throwable) {
279
+ Logger.print(LogLevel.ERROR, t) { "$tag getSelfHandledInApps() :" }
280
+ promise.reject(t)
281
+ }
282
+ }
283
+ }
@@ -140,4 +140,12 @@ class MoEReactBridge(reactContext: ReactApplicationContext) : NativeMoEngageSpec
140
140
  override fun registerForPush() {
141
141
  // iOS only
142
142
  }
143
+
144
+ override fun getSelfHandledInApps(payload: String, promise: Promise) {
145
+ bridgeHandler.getSelfHandledInApps(payload, promise)
146
+ }
147
+
148
+ override fun registerForProvisionalPush() {
149
+ //iOS only
150
+ }
143
151
  }
@@ -118,6 +118,10 @@ RCT_EXPORT_METHOD(registerForPush) {
118
118
  [[MoEReactNativeHandler sharedInstance] registerForPush];
119
119
  }
120
120
 
121
+ RCT_EXPORT_METHOD(registerForProvisionalPush) {
122
+ [[MoEReactNativeHandler sharedInstance] registerForProvisionalPush];
123
+ }
124
+
121
125
  #pragma mark Show InApp
122
126
 
123
127
  RCT_EXPORT_METHOD(showInApp:(NSString *)payload) {
@@ -130,6 +134,10 @@ RCT_EXPORT_METHOD(getSelfHandledInApp:(NSString *)payload) {
130
134
  [[MoEReactNativeHandler sharedInstance] getSelfHandledInApp:payload];
131
135
  }
132
136
 
137
+ RCT_EXPORT_METHOD(getSelfHandledInApps:(NSString *)payload resolve:(RCTPromiseResolveBlock) resolve reject:(RCTPromiseRejectBlock)reject) {
138
+ [[MoEReactNativeHandler sharedInstance] getSelfHandledInApps:payload resolve:resolve reject:reject];
139
+ }
140
+
133
141
  RCT_EXPORT_METHOD(updateSelfHandledInAppStatus:(NSString *)payload) {
134
142
  [[MoEReactNativeHandler sharedInstance] updateSelfHandledInAppStatus:payload];
135
143
  }
@@ -27,10 +27,12 @@
27
27
  -(void)showInApp:(NSString *)payload;
28
28
  -(void)showNudge:(NSString *)payload ;
29
29
  -(void)getSelfHandledInApp:(NSString *)payload;
30
+ -(void)getSelfHandledInApps:(NSString *)payload resolve:(RCTPromiseResolveBlock) resolve reject:(RCTPromiseRejectBlock)reject;
30
31
  -(void)updateSelfHandledInAppStatus:(NSString *)payload;
31
32
  -(void)setAppContext:(NSString *)payload;
32
33
  -(void)resetAppContext:(NSString *)payload;
33
34
  -(void)logout:(NSString *)payload;
34
35
  -(void)optOutDataTracking:(NSString *)payload;
35
36
  -(void)updateSdkState:(NSString *)payload;
37
+ -(void)registerForProvisionalPush;
36
38
  @end
@@ -66,6 +66,14 @@
66
66
  [[MoEngagePluginBridge sharedInstance] registerForPush];
67
67
  }
68
68
 
69
+ -(void)registerForProvisionalPush {
70
+ if (@available(iOS 12, *)) {
71
+ [[MoEngagePluginBridge sharedInstance] registerForProvisionalPush];
72
+ } else {
73
+ NSLog(@"registerForProvisionalPush is not available below iOS 12.");
74
+ }
75
+ }
76
+
69
77
  #pragma mark Show InApp
70
78
  -(void)showInApp:(NSString *)payload {
71
79
  NSDictionary* jsonPayload = [MoEngageReactUtils getJSONRepresentation:payload];
@@ -78,6 +86,20 @@
78
86
  [[MoEngagePluginBridge sharedInstance] getSelfHandledInApp:jsonPayload];
79
87
  }
80
88
 
89
+ -(void)getSelfHandledInApps:(NSString *)payload resolve:(RCTPromiseResolveBlock) resolve reject:(RCTPromiseRejectBlock)reject {
90
+ NSDictionary* jsonPayload = [MoEngageReactUtils getJSONRepresentation:payload];
91
+ [[MoEngagePluginBridge sharedInstance] getSelfHandledInApps:jsonPayload completionBlock:^(NSDictionary<NSString *,id> * _Nonnull campaignPayload) {
92
+ NSError *err;
93
+ NSData * jsonData = [NSJSONSerialization dataWithJSONObject:campaignPayload options:0 error:&err];
94
+ if (jsonData) {
95
+ NSString *strPayload = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
96
+ resolve(strPayload);
97
+ } else {
98
+ reject(@"Error", @"Error in parsing Self Handled Campaign Payload", [NSError errorWithDomain:@"" code:400 userInfo:@{@"Error reason": @"Error in parsing Self Handled Campaign Payload"}]);
99
+ }
100
+ }];
101
+ }
102
+
81
103
  -(void)updateSelfHandledInAppStatus:(NSString *)payload {
82
104
  NSDictionary* jsonPayload = [MoEngageReactUtils getJSONRepresentation:payload];
83
105
  [[MoEngagePluginBridge sharedInstance] updateSelfHandledImpression:jsonPayload];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-moengage",
3
- "version": "11.0.0",
3
+ "version": "11.1.0",
4
4
  "description": "MoEngage is a mobile marketing automation company. This react-native SDK helps you track events, trigger smart notifications and in-apps, provides a drop-in Inbox Controller for notifications.",
5
5
  "main": "src/index.ts",
6
6
  "files": [
@@ -76,6 +76,13 @@ export interface Spec extends TurboModule {
76
76
  */
77
77
  getSelfHandledInApp: (payload: string) => void;
78
78
 
79
+ /**
80
+ * Call this method to get the multiple eligible Self Handled Campaigns.
81
+ * @param payload : Stringified JSON payload
82
+ * @returns Stringified list of Self Handled campaigns
83
+ */
84
+ getSelfHandledInApps: (payload: string) => Promise<string>;
85
+
79
86
  /**
80
87
  * Call this method to update the impressions of self handled inapps.
81
88
  *
@@ -192,6 +199,12 @@ export interface Spec extends TurboModule {
192
199
  /// ios specific
193
200
  registerForPush: () => void;
194
201
 
202
+
203
+ /**
204
+ * Registers for iOS Provisional Push.
205
+ */
206
+ registerForProvisionalPush: () => void;
207
+
195
208
  addListener: (eventType: string) => void;
196
209
  removeListeners: (count: number) => void;
197
210
  }
package/src/index.ts CHANGED
@@ -58,6 +58,7 @@ import { getUserDeletionData } from "../src/moeParser/MoEngagePayloadParser";
58
58
  import { MoEngageNudgePosition } from "../src/models/MoEngageNudgePosition";
59
59
  import MoEAnalyticsConfig from "../src/models/MoEAnalyticsConfig";
60
60
  import { MoESupportedAttributes } from "./models/MoESupportedAttributes";
61
+ import * as MoECoreHandler from "./utils/MoECoreHandler";
61
62
 
62
63
  const PLATFORM_IOS = "ios";
63
64
  const PLATFORM_ANDROID = "android";
@@ -384,7 +385,7 @@ var ReactMoE = {
384
385
 
385
386
  /**
386
387
  * Call this method when you show the self handled in-app so we can update impressions.
387
- * @param {MoESelfHandledCampaignData}campInfo : campaign information object
388
+ * @param {MoESelfHandledCampaignData}inAppCampaign : campaign information object
388
389
  */
389
390
  selfHandledShown: function (inAppCampaign: MoESelfHandledCampaignData) {
390
391
  if (!(inAppCampaign instanceof MoESelfHandledCampaignData)) {
@@ -397,7 +398,7 @@ var ReactMoE = {
397
398
 
398
399
  /**
399
400
  * Call this method to track when self handled in app widget(other than Primary Widget) is clicked.
400
- * @param {MoESelfHandledCampaignData}campInfo : campaign information object
401
+ * @param {MoESelfHandledCampaignData}moEClickData : campaign information object
401
402
  */
402
403
  selfHandledClicked: function (moEClickData: MoESelfHandledCampaignData) {
403
404
  if (!(moEClickData instanceof MoESelfHandledCampaignData)) {
@@ -410,7 +411,7 @@ var ReactMoE = {
410
411
 
411
412
  /**
412
413
  * Call this method to track dismiss actions on the inApp.
413
- * @param {MoESelfHandledCampaignData}campInfo : campaign information object
414
+ * @param {MoESelfHandledCampaignData}inAppCampaign : campaign information object
414
415
  */
415
416
  selfHandledDismissed: function (inAppCampaign: MoESelfHandledCampaignData) {
416
417
  if (!(inAppCampaign instanceof MoESelfHandledCampaignData)) {
@@ -423,7 +424,7 @@ var ReactMoE = {
423
424
 
424
425
  /**
425
426
  * Call this method to the current context for inApp module.
426
- * @param {Array{String}}contexts : Name of all the contexts
427
+ * @param{Array{String}}contexts : Name of all the contexts
427
428
  */
428
429
  setCurrentContext: function (contexts: Array<String>) {
429
430
  if (!MoEHelper.validateArrayOfString(contexts)) {
@@ -726,6 +727,29 @@ var ReactMoE = {
726
727
 
727
728
  return new UserDeletionData(new MoEAccountMeta(moeAppId), false)
728
729
  },
730
+
731
+ /**
732
+ * Call this method to get the multiple self handled campaigns.
733
+ * @since TODO
734
+ */
735
+ getSelfHandledInApps: async function () {
736
+ MoEngageLogger.verbose("Will try to fetch multiple self handled inapps", moeAppId);
737
+ return await MoECoreHandler.getSelfHandledInApps(moeAppId);
738
+ },
739
+
740
+ /**
741
+ * Call this method to register for provisional push notification in iOS
742
+ * Note: This API is only for iOS platform and is a no-operation method for other plaforms.
743
+ * @since TODO
744
+ */
745
+ registerForProvisionalPush: function () {
746
+ if (Platform.OS == PLATFORM_IOS) {
747
+ MoEngageLogger.verbose("Will call registerForProvisionalPush");
748
+ MoEReactBridge.registerForProvisionalPush();
749
+ } else {
750
+ MoEngageLogger.debug("This api is not supported on Android platform.");
751
+ }
752
+ },
729
753
  };
730
754
 
731
755
  export {
@@ -0,0 +1,20 @@
1
+ /**
2
+ * DisplayRules for Campaign
3
+ * @since TODO
4
+ */
5
+ export default class MoEInAppRules {
6
+ /**
7
+ * Screenname for which InApp was configured to be shown.
8
+ */
9
+ screenName: string | null
10
+
11
+ /**
12
+ * contexts for which InApp was configured to be shown.
13
+ */
14
+ contexts: Array<string>
15
+
16
+ constructor(screenName: string, contexts: Array<string> = []) {
17
+ this.screenName = screenName;
18
+ this.contexts = contexts;
19
+ }
20
+ }
@@ -1,10 +1,13 @@
1
+ import MoEInAppRules from "../models/MoEInAppRules";
2
+
1
3
  export default class MoESelfHandledCampaign {
2
4
  payload: string;
3
5
  dismissInterval: Number;
6
+ displayRules: MoEInAppRules
4
7
 
5
- constructor(payload: string, dismissInterval: Number) {
8
+ constructor(payload: string, dismissInterval: Number, displayRules: MoEInAppRules) {
6
9
  this.payload = payload;
7
10
  this.dismissInterval = dismissInterval;
11
+ this.displayRules = displayRules;
8
12
  }
9
-
10
13
  }
@@ -0,0 +1,15 @@
1
+ import MoEAccountMeta from "./MoEAccountMeta";
2
+ import MoESelfHandledCampaignData from "./MoESelfHandledCampaignData";
3
+
4
+ /**
5
+ * Model for Multiple SelfHandled Data
6
+ */
7
+ export default class MoESelfHandledCampaignsData {
8
+ accountMeta: MoEAccountMeta;
9
+ campaigns: Array<MoESelfHandledCampaignData>
10
+
11
+ constructor(accountMeta: MoEAccountMeta, campaigns: Array<MoESelfHandledCampaignData>) {
12
+ this.accountMeta = accountMeta;
13
+ this.campaigns = campaigns;
14
+ }
15
+ }
@@ -5,8 +5,11 @@ import MoEClickData from "../models/MoEClickData";
5
5
  import MoEInAppCustomAction from "../models/MoEInAppCustomAction";
6
6
  import MoEInAppData from "../models/MoEInAppData";
7
7
  import MoEInAppNavigation from "../models/MoEInAppNavigation";
8
+ import MoEInAppRules from "../models/MoEInAppRules";
8
9
  import MoESelfHandledCampaign from "../models/MoESelfHandledCampaign";
9
10
  import MoESelfHandledCampaignData from "../models/MoESelfHandledCampaignData";
11
+ import MoESelfHandledCampaignsData from "../models/MoESelfHandledCampaignsData";
12
+
10
13
  import {
11
14
  ACTION_TYPE,
12
15
  FORMATTED_CAMPAIGN_ID,
@@ -24,7 +27,12 @@ import {
24
27
  MOE_PAYLOAD,
25
28
  MOE_PLATFORM,
26
29
  MOE_SELF_HANDLED,
27
- MOE_NAVIGATION_VALUE
30
+ MOE_NAVIGATION_VALUE,
31
+ MOE_INAPP_DISPLAY_RULES,
32
+ MOE_INAPP_SCREEN_NAME,
33
+ MOE_INAPP_CONTEXTS,
34
+ MOE_DATA,
35
+ ACCOUNT_META
28
36
  } from "../utils/MoEConstants";
29
37
  import { isValidObject } from "../utils/MoEHelper";
30
38
  import { getMoEAccountMeta } from "./MoEngagePayloadParser";
@@ -64,7 +72,19 @@ function getMoESelfHandledCampaign(json: { [k: string]: any }) {
64
72
  var selfHandled = json[MOE_SELF_HANDLED];
65
73
  var payload = selfHandled[MOE_PAYLOAD];
66
74
  var dismissInterval = selfHandled[MOE_DISMISSINTERVAL];
67
- return new MoESelfHandledCampaign(payload, dismissInterval);
75
+ let displayRulesPayload = selfHandled[MOE_INAPP_DISPLAY_RULES];
76
+ let displayRules = getMoEInAppRules(displayRulesPayload);
77
+
78
+ return new MoESelfHandledCampaign(payload, dismissInterval, displayRules);
79
+ }
80
+
81
+ function getMoEInAppRules(json: { [k: string]: any }) {
82
+ var screenName = null;
83
+ if (json[MOE_INAPP_SCREEN_NAME] != undefined) {
84
+ screenName = json[MOE_INAPP_SCREEN_NAME];
85
+ }
86
+ var contexts = json[MOE_INAPP_CONTEXTS];
87
+ return new MoEInAppRules(screenName, contexts);
68
88
  }
69
89
 
70
90
  function getMoEInAppCustomAction(json: { [k: string]: any }) {
@@ -203,7 +223,26 @@ export function getNavigationObj(json: { [k: string]: any }, accountMetaPayload:
203
223
  var accountMeta = getMoEAccountMeta(accountMetaPayload);
204
224
  var action = getMoEInAppNavigation(json);
205
225
  return new MoEClickData(accountMeta, platform, campaignData, action);
206
-
207
226
  }
208
227
  else return undefined
228
+ }
229
+
230
+ export function getMoESelfHandledCampaignsDataObj(payload: string) {
231
+ const jsonPayload = JSON.parse(payload);
232
+ const accountMeta = getMoEAccountMeta(jsonPayload[ACCOUNT_META]);
233
+ const selfHandledCampaigns: Array<MoESelfHandledCampaignData> = [];
234
+
235
+ for (let i = 0; i < jsonPayload.campaigns.length; i++) {
236
+ const campaignJson = jsonPayload.campaigns[i];
237
+ const campaignPayload = campaignJson[MOE_DATA];
238
+
239
+ if (isSelfHandledCampaignValid(campaignPayload)) {
240
+ const campaign = getMoESelfHandledCampaign(campaignPayload);
241
+ var platform = campaignPayload[MOE_PLATFORM];
242
+ const campaignData = getMoECampaignData(campaignPayload);
243
+ const campaignInfo = new MoESelfHandledCampaignData(accountMeta, platform, campaign, campaignData);
244
+ selfHandledCampaigns.push(campaignInfo);
245
+ }
246
+ }
247
+ return new MoESelfHandledCampaignsData(accountMeta, selfHandledCampaigns);
209
248
  }
@@ -26,6 +26,12 @@ export const MOE_KEY_VALUE_PAIR = 'kvPair'
26
26
  //IN APP SELF HANDLED
27
27
  export const MOE_DISMISSINTERVAL = 'dismissInterval'
28
28
  export const MOE_IS_CANCELLABLE = 'isCancellable'
29
+ export const MOE_CAMPAIGNS = 'campaigns'
30
+
31
+ // INAPP DISPLAY RULES
32
+ export const MOE_INAPP_DISPLAY_RULES = 'displayRules'
33
+ export const MOE_INAPP_SCREEN_NAME = 'screenName'
34
+ export const MOE_INAPP_CONTEXTS = 'contexts'
29
35
 
30
36
  //IN APP NAVIGATION
31
37
  export const MOE_NAVIGATION_TYPE = 'navigationType'
@@ -0,0 +1,15 @@
1
+ import { getMoESelfHandledCampaignsDataObj } from "../../src/moeParser/MoEInAppParser";
2
+ import MoEngageLogger from "../logger/MoEngageLogger";
3
+ import MoEReactBridge from "../NativeMoEngage";
4
+ import { getAppIdJson } from "../utils/MoEJsonBuilder";
5
+
6
+ export const getSelfHandledInApps = async (appId: string) => {
7
+ try {
8
+ const selfHandledCampaignsData = await MoEReactBridge.getSelfHandledInApps(getAppIdJson(appId));
9
+ const retVal = getMoESelfHandledCampaignsDataObj(selfHandledCampaignsData);
10
+ return retVal;
11
+ } catch (error) {
12
+ MoEngageLogger.error("getSelfHandledInApps: error parsing $error", error);
13
+ return null;
14
+ }
15
+ }
@@ -3,13 +3,14 @@ import MoEInAppData from "../models/MoEInAppData";
3
3
  import MoEProperties from "../models/MoEProperties";
4
4
  import MoESelfHandledCampaignData from "../models/MoESelfHandledCampaignData";
5
5
  import { MOE_LOCATION } from "./MoEConstants";
6
- import { MoEPropertiesToJson} from "./MoEObjectToJson";
7
- import {MoEngagePermissionType} from "../models/MoEngagePermissionType";
6
+ import { MoEPropertiesToJson } from "./MoEObjectToJson";
7
+ import { MoEngagePermissionType } from "../models/MoEngagePermissionType";
8
8
  import MoEInitConfig from "../models/MoEInitConfig";
9
9
  import MoEngageLogger from "../logger/MoEngageLogger";
10
- import {MoEngageNudgePosition} from "../models/MoEngageNudgePosition";
10
+ import { MoEngageNudgePosition } from "../models/MoEngageNudgePosition";
11
11
  import { MoESupportedAttributes } from "../models/MoESupportedAttributes";
12
-
12
+ import MoESelfHandledCampaign from "../models/MoESelfHandledCampaign";
13
+ import MoEInAppRules from "../models/MoEInAppRules";
13
14
 
14
15
  export function getInAppCampaignJson(moEInAppData: MoEInAppData, type: string, appId: String) {
15
16
  var json: { [k: string]: any } = {
@@ -37,7 +38,7 @@ export function getSelfHandledJson(moESelfHandledCampaignData: MoESelfHandledCam
37
38
  campaignName: moESelfHandledCampaignData.campaignData.campaignName,
38
39
  campaignId: moESelfHandledCampaignData.campaignData.campaignId,
39
40
  campaignContext: moESelfHandledCampaignData.campaignData.context.attributes,
40
- selfHandled: moESelfHandledCampaignData.campaign,
41
+ selfHandled: getSelfHandledCampaignJson(moESelfHandledCampaignData.campaign),
41
42
  platform: moESelfHandledCampaignData.platform
42
43
  }
43
44
  }
@@ -81,14 +82,14 @@ export function getMoEPushCampaignJson(pushPayload: object, service: string, app
81
82
  },
82
83
  data: {
83
84
  payload: pushPayload,
84
- service:service
85
+ service: service
85
86
  }
86
87
  }
87
88
  return JSON.stringify(json);
88
89
  }
89
90
 
90
91
  export function getMoEPushTokenJson(pushToken: string, pushService: string, platform: string, appId: String) {
91
- var json: { [k: string]: any} = {
92
+ var json: { [k: string]: any } = {
92
93
  accountMeta: {
93
94
  appId: appId
94
95
  },
@@ -227,11 +228,11 @@ export function getOptOutTrackingJson(type: string, state: boolean, appId: strin
227
228
  }
228
229
 
229
230
  export function getPermissionResponseJson(isGranted: boolean, permissionType: MoEngagePermissionType) {
230
- let json: { [k: string]: any } = {
231
- isGranted: isGranted,
232
- type: permissionType.toLowerCase()
233
- }
234
- return JSON.stringify(json);
231
+ let json: { [k: string]: any } = {
232
+ isGranted: isGranted,
233
+ type: permissionType.toLowerCase()
234
+ }
235
+ return JSON.stringify(json);
235
236
  }
236
237
 
237
238
  export function getPushPermissionRequestCountJson(count: number, appId: String) {
@@ -286,3 +287,22 @@ export function getNudgeDisplayJson(nudgePosition: MoEngageNudgePosition, appId:
286
287
  }
287
288
  return JSON.stringify(json);
288
289
  }
290
+
291
+ export function getSelfHandledCampaignJson(moESelfHandledCampaign: MoESelfHandledCampaign) {
292
+ var json: { [k: string]: any } = {
293
+ dismissInterval: moESelfHandledCampaign.dismissInterval,
294
+ displayRules: moESelfHandledCampaign.displayRules,
295
+ payload: moESelfHandledCampaign.payload
296
+ }
297
+ MoEngageLogger.verbose("getSelfHandledCampaignJson(): payload json: ", json);
298
+ return json;
299
+ }
300
+
301
+ export function getDisplayRulesJson(displayRules: MoEInAppRules) {
302
+ var json: { [k: string]: any } = {
303
+ contexts: displayRules.contexts,
304
+ screenName: displayRules.screenName
305
+ }
306
+ MoEngageLogger.verbose("getDisplayRulesJson(): payload json: ", json);
307
+ return json;
308
+ }