react-native-netmera 2.0.0-beta02 → 2.0.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/README.md +56 -37
- package/RNNetmera.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPushActionCallbacks.kt +13 -17
- package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraUtil.kt +39 -8
- package/ios/RNNetmera.swift +3 -5
- package/ios/RNNetmeraPushLifecycleDelegate.swift +14 -18
- package/ios/RNNetmeraPushObject.swift +77 -88
- package/lib/module/Netmera.js +33 -15
- package/lib/module/Netmera.js.map +1 -1
- package/lib/module/index.js +4 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/NetmeraCarouselObject.js +18 -0
- package/lib/module/models/NetmeraCarouselObject.js.map +1 -0
- package/lib/module/models/NetmeraInteractiveAction.js +5 -5
- package/lib/module/models/NetmeraInteractiveAction.js.map +1 -1
- package/lib/module/models/NetmeraPushAction.js +27 -0
- package/lib/module/models/NetmeraPushAction.js.map +1 -0
- package/lib/module/models/NetmeraPushObject.js +58 -0
- package/lib/module/models/NetmeraPushObject.js.map +1 -0
- package/lib/typescript/src/Netmera.d.ts +8 -4
- package/lib/typescript/src/Netmera.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/models/NetmeraCarouselObject.d.ts +8 -0
- package/lib/typescript/src/models/NetmeraCarouselObject.d.ts.map +1 -0
- package/lib/typescript/src/models/NetmeraCategory.d.ts +2 -2
- package/lib/typescript/src/models/NetmeraCategory.d.ts.map +1 -1
- package/lib/typescript/src/models/NetmeraInteractiveAction.d.ts +2 -2
- package/lib/typescript/src/models/NetmeraInteractiveAction.d.ts.map +1 -1
- package/lib/typescript/src/models/NetmeraPushAction.d.ts +17 -0
- package/lib/typescript/src/models/NetmeraPushAction.d.ts.map +1 -0
- package/lib/typescript/src/models/NetmeraPushObject.d.ts +40 -0
- package/lib/typescript/src/models/NetmeraPushObject.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/Netmera.ts +52 -35
- package/src/index.ts +10 -2
- package/src/models/NetmeraCarouselObject.ts +21 -0
- package/src/models/NetmeraCategory.ts +2 -2
- package/src/models/NetmeraInteractiveAction.ts +7 -7
- package/src/models/NetmeraPushAction.ts +28 -0
- package/src/models/NetmeraPushObject.ts +90 -0
- package/lib/module/models/NetmeraInbox.js +0 -37
- package/lib/module/models/NetmeraInbox.js.map +0 -1
- package/lib/typescript/src/models/NetmeraInbox.d.ts +0 -24
- package/lib/typescript/src/models/NetmeraInbox.d.ts.map +0 -1
- package/src/models/NetmeraInbox.ts +0 -60
package/README.md
CHANGED
|
@@ -173,8 +173,8 @@ RNNetmera.initNetmera()
|
|
|
173
173
|
|
|
174
174
|
```
|
|
175
175
|
// For receiving Media Push, you must add Netmera pods to top of your Podfile.
|
|
176
|
-
pod 'NetmeraNotificationServiceExtension', "4.
|
|
177
|
-
pod "NetmeraNotificationContentExtension", "4.
|
|
176
|
+
pod 'NetmeraNotificationServiceExtension', "4.19.0"
|
|
177
|
+
pod "NetmeraNotificationContentExtension", "4.19.0"
|
|
178
178
|
```
|
|
179
179
|
|
|
180
180
|
7. In order to use the widget URL callback, add these lines into `AppDelegate.swift` file.
|
|
@@ -205,54 +205,73 @@ extension AppDelegate: NetmeraPushDelegate {
|
|
|
205
205
|
|
|
206
206
|
1. Create a new `NetmeraPushHeadlessTask.ts` inside your React Native project.
|
|
207
207
|
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
|
|
208
|
+
```ts
|
|
209
|
+
import type {
|
|
210
|
+
NetmeraPushObject,
|
|
211
|
+
NetmeraInteractiveAction,
|
|
212
|
+
NetmeraCarouselObject,
|
|
213
|
+
} from 'react-native-netmera';
|
|
214
|
+
|
|
215
|
+
export const onPushRegister = async (data: { pushToken: string }) => {
|
|
216
|
+
console.log('onPushRegister: ', data);
|
|
211
217
|
};
|
|
212
218
|
|
|
213
|
-
export const onPushReceive = async (
|
|
214
|
-
|
|
219
|
+
export const onPushReceive = async (push: NetmeraPushObject) => {
|
|
220
|
+
console.log('onPushReceive: ', push);
|
|
215
221
|
};
|
|
216
222
|
|
|
217
|
-
export const onPushOpen = async (
|
|
218
|
-
|
|
223
|
+
export const onPushOpen = async (push: NetmeraPushObject) => {
|
|
224
|
+
console.log('onPushOpen: ', push);
|
|
219
225
|
};
|
|
220
226
|
|
|
221
|
-
export const onPushDismiss = async (
|
|
222
|
-
|
|
227
|
+
export const onPushDismiss = async (push: NetmeraPushObject) => {
|
|
228
|
+
console.log('onPushDismiss: ', push);
|
|
223
229
|
};
|
|
224
230
|
|
|
225
|
-
export const onPushButtonClicked = async (
|
|
226
|
-
|
|
231
|
+
export const onPushButtonClicked = async (
|
|
232
|
+
push: NetmeraPushObject,
|
|
233
|
+
action?: NetmeraInteractiveAction
|
|
234
|
+
) => {
|
|
235
|
+
console.log('onPushButtonClicked: ', push);
|
|
236
|
+
console.log('Clicked action: ', action);
|
|
227
237
|
};
|
|
228
238
|
|
|
229
|
-
export const onCarouselObjectSelected = async (
|
|
230
|
-
|
|
239
|
+
export const onCarouselObjectSelected = async (
|
|
240
|
+
push: NetmeraPushObject,
|
|
241
|
+
carouselItem?: NetmeraCarouselObject
|
|
242
|
+
) => {
|
|
243
|
+
console.log('onCarouselObjectSelected: ', push);
|
|
244
|
+
console.log('Selected carousel item: ', carouselItem);
|
|
231
245
|
};
|
|
232
246
|
```
|
|
233
247
|
|
|
234
|
-
2.
|
|
248
|
+
2. Register push lifecycle callbacks inside your `index.js` file.
|
|
249
|
+
|
|
250
|
+
```js
|
|
251
|
+
import { AppRegistry } from 'react-native';
|
|
252
|
+
import App from './src/App';
|
|
253
|
+
import { name as appName } from './app.json';
|
|
254
|
+
import { Netmera } from 'react-native-netmera';
|
|
235
255
|
|
|
236
|
-
```
|
|
237
256
|
import {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
} from
|
|
245
|
-
|
|
246
|
-
Netmera.
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
)
|
|
254
|
-
|
|
255
|
-
// This should be called after Netmera.
|
|
257
|
+
onCarouselObjectSelected,
|
|
258
|
+
onPushButtonClicked,
|
|
259
|
+
onPushDismiss,
|
|
260
|
+
onPushOpen,
|
|
261
|
+
onPushReceive,
|
|
262
|
+
onPushRegister,
|
|
263
|
+
} from './NetmeraPushHeadlessTask';
|
|
264
|
+
|
|
265
|
+
Netmera.setPushLifecycleCallbacks(
|
|
266
|
+
onPushRegister,
|
|
267
|
+
onPushReceive,
|
|
268
|
+
onPushOpen,
|
|
269
|
+
onPushDismiss,
|
|
270
|
+
onPushButtonClicked,
|
|
271
|
+
onCarouselObjectSelected
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
// This should be called after Netmera.setPushLifecycleCallbacks.
|
|
256
275
|
AppRegistry.registerComponent(appName, () => App);
|
|
257
276
|
```
|
|
258
277
|
|
|
@@ -408,7 +427,7 @@ You can send your events as follows. For more examples, please see the [example
|
|
|
408
427
|
|
|
409
428
|
##### Deeplink
|
|
410
429
|
|
|
411
|
-
In order to manage your deeplinks, use the following method
|
|
430
|
+
In order to manage your deeplinks, use the following method for iOS initial url's
|
|
412
431
|
|
|
413
432
|
```
|
|
414
433
|
Netmera.getInitialURL().then(url => {
|
|
@@ -418,7 +437,7 @@ Netmera.getInitialURL().then(url => {
|
|
|
418
437
|
});
|
|
419
438
|
```
|
|
420
439
|
|
|
421
|
-
You can use
|
|
440
|
+
You can use `Linking` methods as before
|
|
422
441
|
|
|
423
442
|
##### Widget URL Callback
|
|
424
443
|
|
package/RNNetmera.podspec
CHANGED
|
@@ -19,7 +19,7 @@ NETMERA is a Mobile Application Engagement Platform. We offer a series of develo
|
|
|
19
19
|
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
20
20
|
s.public_header_files = "ios/RNNetmera.h"
|
|
21
21
|
|
|
22
|
-
netmera_version = '4.
|
|
22
|
+
netmera_version = '4.19.0'
|
|
23
23
|
|
|
24
24
|
s.dependency "NetmeraAnalytic", netmera_version
|
|
25
25
|
s.dependency "NetmeraAnalyticAutotracking", netmera_version
|
package/android/build.gradle
CHANGED
|
@@ -7,7 +7,6 @@ import android.os.Bundle
|
|
|
7
7
|
import android.util.Log
|
|
8
8
|
import com.facebook.react.HeadlessJsTaskService
|
|
9
9
|
import com.facebook.react.bridge.Arguments
|
|
10
|
-
import com.facebook.react.bridge.ReadableMap
|
|
11
10
|
import com.facebook.react.bridge.WritableMap
|
|
12
11
|
import com.netmera.NetmeraCarouselObject
|
|
13
12
|
import com.netmera.NetmeraPushObject
|
|
@@ -28,26 +27,31 @@ class RNNetmeraPushActionCallbacks : NMPushActionCallbacks {
|
|
|
28
27
|
|
|
29
28
|
override fun onPushRegister(context: Context, gcmSenderId: String, pushToken: String) {
|
|
30
29
|
val bundle = Bundle().apply {
|
|
31
|
-
putString("gcmSenderId", gcmSenderId)
|
|
32
30
|
putString("pushToken", pushToken)
|
|
33
31
|
}
|
|
34
32
|
sendEvent(context, ON_PUSH_REGISTER, Arguments.fromBundle(bundle))
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
override fun onPushReceive(context: Context, bundle: Bundle?, netmeraPushObject: NetmeraPushObject) {
|
|
38
|
-
sendEvent(context, ON_PUSH_RECEIVE,
|
|
36
|
+
sendEvent(context, ON_PUSH_RECEIVE, RNNetmeraUtil.mapPushObject(netmeraPushObject))
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
override fun onPushOpen(context: Context, bundle: Bundle?, netmeraPushObject: NetmeraPushObject) {
|
|
42
|
-
sendEvent(context, ON_PUSH_OPEN,
|
|
40
|
+
sendEvent(context, ON_PUSH_OPEN, RNNetmeraUtil.mapPushObject(netmeraPushObject))
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
override fun onPushDismiss(context: Context, bundle: Bundle?, netmeraPushObject: NetmeraPushObject) {
|
|
46
|
-
sendEvent(context, ON_PUSH_DISMISS,
|
|
44
|
+
sendEvent(context, ON_PUSH_DISMISS, RNNetmeraUtil.mapPushObject(netmeraPushObject))
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
override fun onPushButtonClicked(context: Context, bundle: Bundle?, netmeraPushObject: NetmeraPushObject) {
|
|
50
|
-
|
|
48
|
+
val map = RNNetmeraUtil.mapPushObject(netmeraPushObject)
|
|
49
|
+
val clickedIndex = bundle?.getInt("key.clicked.button.index", -1) ?: -1
|
|
50
|
+
val actions = netmeraPushObject.interactiveActions
|
|
51
|
+
if (clickedIndex >= 0 && actions != null && clickedIndex < actions.size) {
|
|
52
|
+
map.putMap("clickedAction", RNNetmeraUtil.mapInteractiveAction(actions[clickedIndex]))
|
|
53
|
+
}
|
|
54
|
+
sendEvent(context, ON_PUSH_BUTTON_CLICKED, map)
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
override fun onCarouselObjectSelected(
|
|
@@ -57,10 +61,9 @@ class RNNetmeraPushActionCallbacks : NMPushActionCallbacks {
|
|
|
57
61
|
selectedIndex: Int,
|
|
58
62
|
netmeraCarouselObject: NetmeraCarouselObject
|
|
59
63
|
) {
|
|
60
|
-
val
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
map.merge(mergeMap(newBundle, netmeraPushObject))
|
|
64
|
+
val map = RNNetmeraUtil.mapPushObject(netmeraPushObject)
|
|
65
|
+
val carouselMap = RNNetmeraUtil.mapCarouselObject(netmeraCarouselObject)
|
|
66
|
+
map.putMap("carouselItem", carouselMap)
|
|
64
67
|
sendEvent(context, ON_CAROUSEL_OBJECT_SELECTED, map)
|
|
65
68
|
}
|
|
66
69
|
|
|
@@ -79,11 +82,4 @@ class RNNetmeraPushActionCallbacks : NMPushActionCallbacks {
|
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
84
|
|
|
82
|
-
private fun mergeMap(bundle: Bundle?, netmeraPushObject: NetmeraPushObject): WritableMap {
|
|
83
|
-
val mapPushObject = RNNetmeraUtil.mapPushObject(netmeraPushObject)
|
|
84
|
-
val mapBundle: ReadableMap? = bundle?.let { Arguments.fromBundle(it) }
|
|
85
|
-
mapBundle?.let { mapPushObject.merge(it) }
|
|
86
|
-
return mapPushObject
|
|
87
|
-
}
|
|
88
|
-
|
|
89
85
|
}
|
|
@@ -2,8 +2,9 @@ package com.netmera.reactnativesdk
|
|
|
2
2
|
|
|
3
3
|
import android.text.format.DateFormat
|
|
4
4
|
import com.facebook.react.bridge.*
|
|
5
|
-
import com.google.gson.
|
|
5
|
+
import com.google.gson.JsonObject
|
|
6
6
|
import com.netmera.NetmeraCarouselObject
|
|
7
|
+
import com.netmera.NetmeraInteractiveAction
|
|
7
8
|
import com.netmera.NetmeraPushObject
|
|
8
9
|
import com.netmera.data.NMCategoryPreference
|
|
9
10
|
import com.netmera.data.NMCouponDetail
|
|
@@ -149,8 +150,12 @@ object RNNetmeraUtil {
|
|
|
149
150
|
map.putString("expireTime", DateFormat.format("yyyy-MM-dd HH:mm:ss", it).toString())
|
|
150
151
|
}
|
|
151
152
|
|
|
152
|
-
pushObject.interactiveActions?.let {
|
|
153
|
-
if (
|
|
153
|
+
pushObject.interactiveActions?.let { actions ->
|
|
154
|
+
if (actions.isNotEmpty()) {
|
|
155
|
+
val actionsArray = Arguments.createArray()
|
|
156
|
+
actions.forEach { action -> actionsArray.pushMap(mapInteractiveAction(action)) }
|
|
157
|
+
map.putArray("interactiveActions", actionsArray)
|
|
158
|
+
}
|
|
154
159
|
}
|
|
155
160
|
|
|
156
161
|
pushObject.pushStyle?.let { style ->
|
|
@@ -158,7 +163,11 @@ object RNNetmeraUtil {
|
|
|
158
163
|
style.subText?.let { map.putString("subtitle", it) }
|
|
159
164
|
style.contentText?.let { map.putString("body", it) }
|
|
160
165
|
style.bigPicturePath?.let { map.putString("mediaAttachmentURL", it) }
|
|
161
|
-
style.
|
|
166
|
+
style.carouselObjects?.let { carouselObjects ->
|
|
167
|
+
val carouselArray = Arguments.createArray()
|
|
168
|
+
carouselObjects.forEach { item -> carouselArray.pushMap(mapCarouselObject(item)) }
|
|
169
|
+
map.putArray("carousel", carouselArray)
|
|
170
|
+
}
|
|
162
171
|
}
|
|
163
172
|
|
|
164
173
|
pushObject.sendDate?.let {
|
|
@@ -166,8 +175,8 @@ object RNNetmeraUtil {
|
|
|
166
175
|
"sendDate", DateFormat.format("yyyy-MM-dd HH:mm:ss", it).toString()
|
|
167
176
|
)
|
|
168
177
|
}
|
|
169
|
-
pushObject.pushAction?.let {
|
|
170
|
-
map.
|
|
178
|
+
pushObject.pushAction?.let { pushAction ->
|
|
179
|
+
map.putMap("pushAction", mapPushAction(pushAction))
|
|
171
180
|
pushObject.webPageUrl?.let { url -> map.putString("webPage", url) }
|
|
172
181
|
}
|
|
173
182
|
|
|
@@ -177,8 +186,30 @@ object RNNetmeraUtil {
|
|
|
177
186
|
fun mapCarouselObject(carouselObject: NetmeraCarouselObject): WritableMap {
|
|
178
187
|
val map: WritableMap = Arguments.createMap()
|
|
179
188
|
map.putString("id", carouselObject.id)
|
|
180
|
-
map.putString("
|
|
181
|
-
map.
|
|
189
|
+
carouselObject.picturePath?.let { map.putString("picturePath", it) }
|
|
190
|
+
carouselObject.action?.let { map.putMap("action", mapPushAction(it)) }
|
|
191
|
+
return map
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
fun mapInteractiveAction(action: NetmeraInteractiveAction): WritableMap {
|
|
195
|
+
val map: WritableMap = Arguments.createMap()
|
|
196
|
+
map.putString("id", action.id)
|
|
197
|
+
action.actionTitle?.let { map.putString("title", it) }
|
|
198
|
+
action.action?.let { map.putMap("act", mapPushAction(it)) }
|
|
199
|
+
action.customJson?.let {
|
|
200
|
+
try {
|
|
201
|
+
map.putMap("prms", jsonToWritableMap(JSONObject(it.toString())))
|
|
202
|
+
} catch (_: Throwable) {
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return map
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private fun mapPushAction(pushAction: JsonObject): WritableMap {
|
|
209
|
+
val map: WritableMap = Arguments.createMap()
|
|
210
|
+
pushAction.get("at")?.asInt?.let { map.putInt("at", it) }
|
|
211
|
+
val url = pushAction.get("uri")?.asString ?: pushAction.get("url")?.asString
|
|
212
|
+
url?.let { map.putString("url", it) }
|
|
182
213
|
return map
|
|
183
214
|
}
|
|
184
215
|
|
package/ios/RNNetmera.swift
CHANGED
|
@@ -466,9 +466,7 @@ public class RNNetmera: NSObject {
|
|
|
466
466
|
manager.inbox { result in
|
|
467
467
|
switch result {
|
|
468
468
|
case .success:
|
|
469
|
-
let array
|
|
470
|
-
RNNetmeraPushObject.getPushObjectMap($0)
|
|
471
|
-
}
|
|
469
|
+
let array = RNNetmeraPushObject.mapPushObjects(manager.objects)
|
|
472
470
|
resolver(array)
|
|
473
471
|
self.netmeraInbox = manager
|
|
474
472
|
break
|
|
@@ -597,7 +595,7 @@ public class RNNetmera: NSObject {
|
|
|
597
595
|
data["unreadCount"] = categoryObject.statusCounts[.unread] ?? 0
|
|
598
596
|
data["deletedCount"] = categoryObject.statusCounts[.deleted] ?? 0
|
|
599
597
|
if let lastMessage = categoryObject.lastMessage {
|
|
600
|
-
let lastMsg = RNNetmeraPushObject.
|
|
598
|
+
let lastMsg = RNNetmeraPushObject.mapPushObject(lastMessage)
|
|
601
599
|
if let jsonData = try? JSONSerialization.data(withJSONObject: lastMsg, options: []),
|
|
602
600
|
let jsonStr = String(data: jsonData, encoding: .utf8) {
|
|
603
601
|
data["lastMessage"] = jsonStr
|
|
@@ -637,7 +635,7 @@ public class RNNetmera: NSObject {
|
|
|
637
635
|
data["unreadCount"] = categoryObject.statusCounts[.unread] ?? 0
|
|
638
636
|
data["deletedCount"] = categoryObject.statusCounts[.deleted] ?? 0
|
|
639
637
|
if let lastMessage = categoryObject.lastMessage {
|
|
640
|
-
let lastMsg = RNNetmeraPushObject.
|
|
638
|
+
let lastMsg = RNNetmeraPushObject.mapPushObject(lastMessage)
|
|
641
639
|
if let jsonData = try? JSONSerialization.data(withJSONObject: lastMsg, options: []),
|
|
642
640
|
let jsonStr = String(data: jsonData, encoding: .utf8) {
|
|
643
641
|
data["lastMessage"] = jsonStr
|
|
@@ -14,40 +14,36 @@ final class RNNetmeraPushLifecycleDelegate: NetmeraPushLifecycleDelegate {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
func didReceive(_ push: NetmeraBasePush) {
|
|
17
|
-
|
|
18
|
-
RNNetmeraRCTEventEmitter.onPushReceive(["payload": payload])
|
|
17
|
+
RNNetmeraRCTEventEmitter.onPushReceive(RNNetmeraPushObject.getPushObjectMap(push))
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
func didOpen(_ push: NetmeraBasePush) {
|
|
22
21
|
if let deeplink = push.deeplinkURL {
|
|
23
22
|
RNNetmeraRCTEventEmitter.onDeeplinkTriggered(deeplink)
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
RNNetmeraRCTEventEmitter.onPushOpen(["payload": payload])
|
|
24
|
+
RNNetmeraRCTEventEmitter.onPushOpen(RNNetmeraPushObject.getPushObjectMap(push))
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
func didTakeAction(_ action: NetmeraBaseAction?, from source: NetmeraActionSource, for push: NetmeraBasePush) {
|
|
30
28
|
if let deeplink = action?.deeplinkURL {
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
guard let payload = RNNetmeraPushObject.getBasePushObjectMap(push),
|
|
35
|
-
let actionMap = RNNetmeraPushObject.getActionMap(action) else {
|
|
36
|
-
return
|
|
29
|
+
RNNetmeraRCTEventEmitter.onDeeplinkTriggered(deeplink)
|
|
37
30
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"payload": payload,
|
|
41
|
-
"action": actionMap
|
|
42
|
-
]
|
|
31
|
+
|
|
32
|
+
var eventData = RNNetmeraPushObject.getPushObjectMap(push)
|
|
43
33
|
|
|
44
34
|
switch source {
|
|
45
35
|
case .interactiveButton:
|
|
46
|
-
|
|
36
|
+
if let actionMap = RNNetmeraPushObject.getInteractiveActionMap(action) {
|
|
37
|
+
eventData["clickedAction"] = actionMap
|
|
38
|
+
}
|
|
39
|
+
RNNetmeraRCTEventEmitter.onPushButtonClicked(eventData)
|
|
47
40
|
case .carouselItem:
|
|
48
|
-
|
|
41
|
+
if let content = action as? NetmeraContentPushItem {
|
|
42
|
+
eventData["carouselItem"] = RNNetmeraPushObject.getCarouselItemMap(content)
|
|
43
|
+
}
|
|
44
|
+
RNNetmeraRCTEventEmitter.onCarouselItemClicked(eventData)
|
|
49
45
|
@unknown default:
|
|
50
|
-
|
|
46
|
+
break
|
|
51
47
|
}
|
|
52
48
|
}
|
|
53
49
|
}
|
|
@@ -16,114 +16,103 @@ import NetmeraNotificationCore
|
|
|
16
16
|
class RNNetmeraPushObject {
|
|
17
17
|
|
|
18
18
|
static func mapPushObjects(_ pushObjects: [NetmeraInboxPush]) -> [[String: Any]] {
|
|
19
|
-
return pushObjects.map {
|
|
19
|
+
return pushObjects.map { mapPushObject($0) }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static func mapPushObject(_ push: NetmeraInboxPush) -> [String: Any] {
|
|
23
|
+
guard let payload = push.payload else { return [:] }
|
|
24
|
+
|
|
25
|
+
var data = getPushObjectMap(payload)
|
|
26
|
+
if let status = push.status { data["inboxStatus"] = status.rawValue }
|
|
27
|
+
|
|
28
|
+
return data
|
|
20
29
|
}
|
|
21
30
|
|
|
22
|
-
static func getPushObjectMap(_
|
|
31
|
+
static func getPushObjectMap(_ push: NetmeraBasePush?) -> [String: Any] {
|
|
23
32
|
var data: [String: Any] = [:]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
data["
|
|
28
|
-
data["
|
|
29
|
-
data["
|
|
30
|
-
data["category"] =
|
|
31
|
-
data["customJson"] =
|
|
32
|
-
data["
|
|
33
|
-
data["
|
|
34
|
-
|
|
35
|
-
if let
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if let action = item.action {
|
|
44
|
-
itemMap["action"] = mapAction(action)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return itemMap
|
|
33
|
+
guard let push else { return data }
|
|
34
|
+
|
|
35
|
+
// MARK: NetmeraBasePush fields
|
|
36
|
+
data["pushType"] = push.pushType.rawValue
|
|
37
|
+
if let pushId = push.pushId { data["pushId"] = pushId }
|
|
38
|
+
if let pushInstanceId = push.pushInstanceId { data["pushInstanceId"] = pushInstanceId }
|
|
39
|
+
if let category = push.category { data["category"] = category }
|
|
40
|
+
if let customJson = push.params { data["customJson"] = customJson }
|
|
41
|
+
if let externalId = push.externalId { data["externalId"] = externalId }
|
|
42
|
+
if let categories = push.categoryIds { data["categories"] = categories }
|
|
43
|
+
if let sd = push.sendDate { data["sendDate"] = formatDate(sd) }
|
|
44
|
+
if let ed = push.expirationDate { data["expireTime"] = formatDate(ed) }
|
|
45
|
+
|
|
46
|
+
if let action = push.action {
|
|
47
|
+
data["pushAction"] = mapPushAction(action)
|
|
48
|
+
if let dl = (action as? NetmeraDeeplinkAction)?.deeplinkURL {
|
|
49
|
+
data["deepLink"] = dl
|
|
50
|
+
} else if let url = (action as? NetmeraWebViewAction)?.url {
|
|
51
|
+
data["webPage"] = url
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
data["subtitle"] = alert?.subtitle ?? ""
|
|
58
|
-
data["body"] = alert?.body ?? ""
|
|
59
|
-
|
|
60
|
-
if let expireDate = push?.expirationDate {
|
|
61
|
-
data["expireTime"] = formatDate(expireDate)
|
|
54
|
+
|
|
55
|
+
// MARK: NetmeraStandartPush fields
|
|
56
|
+
if let standartPush = push as? NetmeraStandartPush,
|
|
57
|
+
let alert = standartPush.aps?.alert {
|
|
58
|
+
if let title = alert.title { data["title"] = title }
|
|
59
|
+
if let subtitle = alert.subtitle { data["subtitle"] = subtitle }
|
|
60
|
+
if let body = alert.body { data["body"] = body }
|
|
62
61
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
data["
|
|
67
|
-
|
|
68
|
-
if
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
62
|
+
|
|
63
|
+
// MARK: NetmeraInboxPush.Payload fields
|
|
64
|
+
if let inboxPush = push as? NetmeraInboxPush.Payload {
|
|
65
|
+
if let url = inboxPush.mediaAttachmentURL { data["mediaAttachmentURL"] = url }
|
|
66
|
+
|
|
67
|
+
if let carousel = inboxPush.carousel {
|
|
68
|
+
data["carousel"] = carousel.map { item -> [String: Any] in
|
|
69
|
+
var itemMap: [String: Any] = [:]
|
|
70
|
+
itemMap["id"] = item.id
|
|
71
|
+
itemMap["picturePath"] = item.url?.absoluteString
|
|
72
|
+
if let action = item.action { itemMap["action"] = mapPushAction(action) }
|
|
73
|
+
return itemMap
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
dict
|
|
76
|
+
|
|
77
|
+
if let ia = inboxPush.interactiveAction {
|
|
78
|
+
let mapped = ia.map { actionItem -> [String: Any] in
|
|
79
|
+
var dict: [String: Any] = [:]
|
|
80
|
+
if let id = actionItem.id { dict["id"] = id }
|
|
81
|
+
if let title = actionItem.title { dict["title"] = title }
|
|
82
|
+
if let act = actionItem.action { dict["act"] = mapPushAction(act) }
|
|
83
|
+
dict["prms"] = actionItem.params ?? [:]
|
|
84
|
+
return dict
|
|
85
|
+
}
|
|
86
|
+
if let jsonData = try? JSONSerialization.data(withJSONObject: mapped, options: []) {
|
|
87
|
+
data["interactiveActions"] = String(data: jsonData, encoding: .utf8)
|
|
86
88
|
}
|
|
87
|
-
dict["prms"] = actionItem.params ?? [:]
|
|
88
|
-
return dict
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if let jsonData = try? JSONSerialization.data(withJSONObject: mapped, options: []) {
|
|
92
|
-
data["interactiveActions"] = String(data: jsonData, encoding: .utf8)
|
|
93
89
|
}
|
|
94
90
|
}
|
|
95
91
|
|
|
96
|
-
if let sendDate = push?.sendDate {
|
|
97
|
-
data["sendDate"] = formatDate(sendDate)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
92
|
return data
|
|
101
93
|
}
|
|
102
94
|
|
|
103
|
-
static func
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return nil
|
|
109
|
-
}
|
|
110
|
-
|
|
95
|
+
static func getCarouselItemMap(_ item: NetmeraContentPushItem) -> [String: Any] {
|
|
96
|
+
var dict: [String: Any] = [:]
|
|
97
|
+
if let id = item.id { dict["id"] = id }
|
|
98
|
+
if let url = item.url { dict["picturePath"] = url.absoluteString }
|
|
99
|
+
if let action = item.action { dict["action"] = mapPushAction(action) }
|
|
111
100
|
return dict
|
|
112
101
|
}
|
|
113
|
-
|
|
114
|
-
static func getActionMap(_ action: NetmeraBaseAction?) -> [String: Any]? {
|
|
115
|
-
guard
|
|
116
|
-
let action,
|
|
117
|
-
let data = try? JSONEncoder().encode(action),
|
|
118
|
-
let dict = try? JSONSerialization.jsonObject(with: data) as? [String: Any]
|
|
119
|
-
else {
|
|
120
|
-
return nil
|
|
121
|
-
}
|
|
122
102
|
|
|
103
|
+
static func getInteractiveActionMap(_ action: NetmeraBaseAction?) -> [String: Any]? {
|
|
104
|
+
guard let action else { return nil }
|
|
105
|
+
var dict: [String: Any] = [:]
|
|
106
|
+
if let id = action.id { dict["id"] = id }
|
|
107
|
+
if let prms = action.params { dict["prms"] = prms }
|
|
108
|
+
if let pushAction = action.action { dict["act"] = mapPushAction(pushAction) }
|
|
109
|
+
if let ia = action as? NetmeraPushInteractiveAction, let title = ia.title {
|
|
110
|
+
dict["title"] = title
|
|
111
|
+
}
|
|
123
112
|
return dict
|
|
124
113
|
}
|
|
125
114
|
|
|
126
|
-
|
|
115
|
+
static func mapPushAction(_ action: NetmeraPushAction) -> [String: Any] {
|
|
127
116
|
var dict: [String: Any] = [:]
|
|
128
117
|
dict["at"] = action.actionType?.rawValue
|
|
129
118
|
|
|
@@ -144,7 +133,7 @@ class RNNetmeraPushObject {
|
|
|
144
133
|
@unknown default:
|
|
145
134
|
break
|
|
146
135
|
}
|
|
147
|
-
return dict.
|
|
136
|
+
return dict.compactMapValues { $0 }
|
|
148
137
|
}
|
|
149
138
|
|
|
150
139
|
private static func formatDate(_ date: Date) -> String {
|