smartmessage-react-native 2.11.2
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/RNSmartMessage.podspec +30 -0
- package/android/build.gradle +65 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/tr/com/odc/RNSmartMessage/RNSmartMessageModule.java +774 -0
- package/android/src/main/java/tr/com/odc/RNSmartMessage/RNSmartMessagePackage.java +29 -0
- package/ios/RNSmartMessage-Bridging-Header.h +1 -0
- package/ios/RNSmartMessage.h +25 -0
- package/ios/RNSmartMessage.m +138 -0
- package/ios/RNSmartMessage.swift +660 -0
- package/package.json +38 -0
- package/readme.md +494 -0
- package/src/SMDataModels.js +457 -0
- package/src/SmartMessage.js +385 -0
- package/src/index.d.ts +238 -0
- package/src/index.js +8 -0
- package/src/types.d.ts +451 -0
|
@@ -0,0 +1,660 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import SmartMessageSdk
|
|
3
|
+
import UserNotificationsUI
|
|
4
|
+
import UserNotifications
|
|
5
|
+
|
|
6
|
+
@objc(RNSmartMessage)
|
|
7
|
+
class RNSmartMessage: NSObject {
|
|
8
|
+
|
|
9
|
+
static var token: String? = nil;
|
|
10
|
+
|
|
11
|
+
@objc
|
|
12
|
+
static func initializeSdk(_ tokenData: Data) -> Void {
|
|
13
|
+
let token = tokenData.map { String(format: "%02.2hhx", $0) }.joined()
|
|
14
|
+
self.token = token;
|
|
15
|
+
|
|
16
|
+
SmartMessage.shared.initializeSdk(tokenId: token)
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@objc
|
|
21
|
+
static func setUNCenter(_ unCenter: UNUserNotificationCenter) -> Void {
|
|
22
|
+
|
|
23
|
+
if(unCenter.delegate != nil) {
|
|
24
|
+
SmartMessage.shared.setUNUserNotificationCenterDelegate(delegate: unCenter.delegate!)
|
|
25
|
+
}else{
|
|
26
|
+
print("UNUserNotificationCenter or its delegate is nil!")
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// to ServiceExtension
|
|
32
|
+
@objc
|
|
33
|
+
static func configureNotificationService(
|
|
34
|
+
_ request: UNNotificationRequest,
|
|
35
|
+
contentHandler: ((UNNotificationContent) -> Void),
|
|
36
|
+
bestAttemptContent: (UNMutableNotificationContent?)
|
|
37
|
+
) -> Void {
|
|
38
|
+
SmartMessage.shared.configureNotificationService(request: request,
|
|
39
|
+
contentHandler: contentHandler,
|
|
40
|
+
bestAttemptContent: bestAttemptContent)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// to ContentExtension
|
|
44
|
+
@objc
|
|
45
|
+
static func handleNotification(
|
|
46
|
+
_ baseExtensionController: UIViewController,
|
|
47
|
+
baseView: UIView,
|
|
48
|
+
userInfo: [AnyHashable : Any]?,
|
|
49
|
+
isNotificationWillPresent: Bool = false
|
|
50
|
+
) -> Void {
|
|
51
|
+
|
|
52
|
+
guard let info = userInfo,
|
|
53
|
+
let aps = info["aps"] as? [AnyHashable: Any]
|
|
54
|
+
else {
|
|
55
|
+
return}
|
|
56
|
+
|
|
57
|
+
SmartMessage.shared.handleNotification(baseExtensionController: baseExtensionController,
|
|
58
|
+
baseView: baseView,
|
|
59
|
+
aps: aps,
|
|
60
|
+
isNotificationWillPresent: isNotificationWillPresent)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@objc
|
|
66
|
+
func displayDialog(
|
|
67
|
+
_ data: String?
|
|
68
|
+
) -> Void {
|
|
69
|
+
|
|
70
|
+
DispatchQueue.main.async {
|
|
71
|
+
if let contoller = UIApplication.shared.delegate?.window??.rootViewController,
|
|
72
|
+
let userInfo = data?.convertToStringAnyDictionary()
|
|
73
|
+
{
|
|
74
|
+
|
|
75
|
+
var aps = [String:Any]()
|
|
76
|
+
aps["notifInfo"] = userInfo
|
|
77
|
+
SmartMessage.shared.handleNotification(baseExtensionController: contoller,
|
|
78
|
+
baseView: contoller.view,
|
|
79
|
+
aps: aps,
|
|
80
|
+
isNotificationWillPresent: true)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@objc
|
|
87
|
+
func requestNotificationPermission() -> Void {
|
|
88
|
+
SmartMessage.shared.requestPushPermission()
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@objc
|
|
92
|
+
func requestNotificationPermissionWithPromise(
|
|
93
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
94
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
95
|
+
) -> Void {
|
|
96
|
+
SmartMessage.shared.requestPushPermission()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@objc
|
|
100
|
+
func requestLocationPermission() -> Void {
|
|
101
|
+
SmartMessage.shared.requestLocationPermission()
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@objc
|
|
105
|
+
func requestLocationPermissionWithPromise(
|
|
106
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
107
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
108
|
+
) -> Void {
|
|
109
|
+
SmartMessage.shared.requestLocationPermission()
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@objc
|
|
113
|
+
func getToken(
|
|
114
|
+
_ resolve: RCTPromiseResolveBlock,
|
|
115
|
+
rejecter reject: RCTPromiseRejectBlock
|
|
116
|
+
) -> Void {
|
|
117
|
+
|
|
118
|
+
if (SmartMessage.shared.getApnsDeviceToken() != nil) {
|
|
119
|
+
resolve(SmartMessage.shared.getApnsDeviceToken()!)
|
|
120
|
+
} else {
|
|
121
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
122
|
+
reject("getToken failed : ", "Token is null or has not been set yet.", error)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@objc
|
|
127
|
+
func getUserInfo(
|
|
128
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
129
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
130
|
+
) -> Void {
|
|
131
|
+
|
|
132
|
+
SmartMessage.shared.getUserInfo(){ result in
|
|
133
|
+
switch result {
|
|
134
|
+
case .success(let response):
|
|
135
|
+
do{
|
|
136
|
+
try resolve(response.userInfo.encodeToJsonString())
|
|
137
|
+
}catch let error as NSError{
|
|
138
|
+
reject("getUserInfo failed : ",error.localizedDescription,error)
|
|
139
|
+
}
|
|
140
|
+
break
|
|
141
|
+
case .failure(let error):
|
|
142
|
+
reject("getUserInfo failed : ",error.localizedDescription,error)
|
|
143
|
+
break
|
|
144
|
+
case .empty:
|
|
145
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
146
|
+
reject("getUserInfo failed : ","No data",error)
|
|
147
|
+
break
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@objc
|
|
154
|
+
func setUserInfo(_ data: String?) -> Void {
|
|
155
|
+
|
|
156
|
+
guard let userInfo = data?.convertToStringAnyDictionary()else{
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
var memberFields = [SMMemberFieldItemModel]()
|
|
161
|
+
|
|
162
|
+
let decoder = JSONDecoder()
|
|
163
|
+
|
|
164
|
+
for memberField in (userInfo["memberfields"] as? [Dictionary<String,String>] ?? []) {
|
|
165
|
+
do {
|
|
166
|
+
let data = try JSONSerialization.data(withJSONObject: memberField)
|
|
167
|
+
memberFields.append(try decoder.decode(SMMemberFieldItemModel.self, from: data))
|
|
168
|
+
}catch{
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
let userModel = UserInfoRequestModel(
|
|
174
|
+
name: userInfo["name"] as? String ?? "",
|
|
175
|
+
surname: userInfo["surname"] as? String ?? "",
|
|
176
|
+
email: userInfo["email"] as? String ?? "",
|
|
177
|
+
mobile: userInfo["mobile"] as? String ?? "",
|
|
178
|
+
id: userInfo["id"] as? String ?? "",
|
|
179
|
+
birthdate: userInfo["birthdate"] as? String ?? "",
|
|
180
|
+
gender: userInfo["gender"] as? String ?? "-1",
|
|
181
|
+
username: userInfo["username"] as? String ?? "",
|
|
182
|
+
rcvNot: userInfo["rcvNot"] as? Bool ?? true,
|
|
183
|
+
tags: userInfo["tags"] as? String ?? "",
|
|
184
|
+
lang: userInfo["lang"] as? String ?? "",
|
|
185
|
+
memberFields: memberFields
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
SmartMessage.shared.setUserInfo(userModel: userModel)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
@objc
|
|
193
|
+
func setUserInfoWithPromise(_ data: String?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
194
|
+
|
|
195
|
+
guard let userInfo = data?.convertToStringAnyDictionary()else{
|
|
196
|
+
return
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
var memberFields = [SMMemberFieldItemModel]()
|
|
200
|
+
|
|
201
|
+
let decoder = JSONDecoder()
|
|
202
|
+
|
|
203
|
+
for memberField in (userInfo["memberfields"] as? [Dictionary<String,String>] ?? []) {
|
|
204
|
+
do {
|
|
205
|
+
let data = try JSONSerialization.data(withJSONObject: memberField)
|
|
206
|
+
memberFields.append(try decoder.decode(SMMemberFieldItemModel.self, from: data))
|
|
207
|
+
}catch{
|
|
208
|
+
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
let userModel = UserInfoRequestModel(
|
|
213
|
+
name: userInfo["name"] as? String ?? "",
|
|
214
|
+
surname: userInfo["surname"] as? String ?? "",
|
|
215
|
+
email: userInfo["email"] as? String ?? "",
|
|
216
|
+
mobile: userInfo["mobile"] as? String ?? "",
|
|
217
|
+
id: userInfo["id"] as? String ?? "",
|
|
218
|
+
birthdate: userInfo["birthdate"] as? String ?? "",
|
|
219
|
+
gender: userInfo["gender"] as? String ?? "-1",
|
|
220
|
+
username: userInfo["username"] as? String ?? "",
|
|
221
|
+
rcvNot: userInfo["rcvNot"] as? Bool ?? true,
|
|
222
|
+
tags: userInfo["tags"] as? String ?? "",
|
|
223
|
+
lang: userInfo["lang"] as? String ?? "",
|
|
224
|
+
memberFields: memberFields
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
SmartMessage.shared.setUserInfo(userModel: userModel){ result in
|
|
228
|
+
switch result {
|
|
229
|
+
case .success(let response):
|
|
230
|
+
do{
|
|
231
|
+
resolve(try response.encodeToJsonString())
|
|
232
|
+
}catch let error as NSError {
|
|
233
|
+
reject("setUserInfo failed : ",error.localizedDescription,error)
|
|
234
|
+
}
|
|
235
|
+
break
|
|
236
|
+
case .failure(let error):
|
|
237
|
+
reject("setUserInfo failed : ",error.localizedDescription,error)
|
|
238
|
+
break
|
|
239
|
+
case .empty:
|
|
240
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
241
|
+
reject("setUserInfo failed : ","No data",error)
|
|
242
|
+
break
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
@objc
|
|
249
|
+
func getMessageList(_ messageListRequestData: String?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
250
|
+
|
|
251
|
+
guard let messageListRequest = messageListRequestData?.convertToStringAnyDictionary() else {
|
|
252
|
+
reject("getMessageList has failed : ","data could not be converted to MessageListRequestModel",nil)
|
|
253
|
+
return
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
let messageListRequestModel : MessageListRequestModel = MessageListRequestModel.init(
|
|
257
|
+
customerNo: messageListRequest["customerNo"] as? String ?? "",
|
|
258
|
+
externalId: messageListRequest["externalId"] as? String ?? "",
|
|
259
|
+
status: messageListRequest["status"] as? [String] ?? [""],
|
|
260
|
+
pushType: messageListRequest["pushType"] as? [String] ?? [""],
|
|
261
|
+
expiredPush: messageListRequest["expiredPush"] as? Bool ?? false,
|
|
262
|
+
index: messageListRequest["index"] as? Int ?? 0,
|
|
263
|
+
size: messageListRequest["size"] as? Int ?? 0,
|
|
264
|
+
orderBy: messageListRequest["orderBy"] as? String ?? "",
|
|
265
|
+
startDate: messageListRequest["startDate"] as? String ?? "",
|
|
266
|
+
endDate: messageListRequest["endDate"] as? String ?? ""
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
SmartMessage.shared.getMessageList(request: messageListRequestModel){ result in
|
|
270
|
+
switch result {
|
|
271
|
+
case .success(let response):
|
|
272
|
+
do{
|
|
273
|
+
resolve(try response.encodeToJsonString())
|
|
274
|
+
}catch let error as NSError {
|
|
275
|
+
reject("getMessageList has failed : ",error.localizedDescription,error)
|
|
276
|
+
}
|
|
277
|
+
break
|
|
278
|
+
case .failure(let error):
|
|
279
|
+
reject("getMessageList has failed : ",error.localizedDescription,error)
|
|
280
|
+
break
|
|
281
|
+
case .empty:
|
|
282
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
283
|
+
reject("getMessageList has failed : ","No data",error)
|
|
284
|
+
break
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
@objc
|
|
292
|
+
func getNotificationContent(_ contentUrl: String?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
293
|
+
|
|
294
|
+
if (contentUrl == nil || contentUrl!.isEmpty) {
|
|
295
|
+
reject("getNotificationContent has failed : ","contentUrl cannot be null or empty",nil)
|
|
296
|
+
return
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
SmartMessage.shared.getMessageContent(contentUrl: contentUrl!){ result in
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
switch result {
|
|
303
|
+
case .success(let response):
|
|
304
|
+
resolve(response.convertToDictionary()?.convertToJson())
|
|
305
|
+
break
|
|
306
|
+
case .failure(let error):
|
|
307
|
+
reject("getMessageList has failed : ",error.localizedDescription,error)
|
|
308
|
+
break
|
|
309
|
+
case .empty:
|
|
310
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
311
|
+
reject("getMessageList has failed : ","No data",error)
|
|
312
|
+
break
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
@objc
|
|
320
|
+
func isLocationEnabled() -> Bool {
|
|
321
|
+
return SmartMessage.shared.isLocationEnabled()
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
@objc
|
|
325
|
+
func startLocationTracking() -> Void {
|
|
326
|
+
return SmartMessage.shared.startLocationServices()
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
@objc
|
|
330
|
+
func stopLocationTracking() -> Void {
|
|
331
|
+
return SmartMessage.shared.stopLocationServices()
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
@objc
|
|
335
|
+
func matchContactDevice(_ requestData : String?){
|
|
336
|
+
|
|
337
|
+
if(requestData == nil || requestData!.isEmpty){
|
|
338
|
+
print("matchContactDeviceWithPromise has failed : requestData cannot be null or empty")
|
|
339
|
+
return
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
do{
|
|
343
|
+
let decoder = JSONDecoder()
|
|
344
|
+
let data = requestData!.data(using: .utf8)!
|
|
345
|
+
let matchContactDeviceRequest = try decoder.decode(MatchContactDeviceRequestModel.self, from: data)
|
|
346
|
+
SmartMessage.shared.matchContactDevice(matchContactDeviceRequest: matchContactDeviceRequest)
|
|
347
|
+
}catch let error as NSError {
|
|
348
|
+
print(error)
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
@objc
|
|
354
|
+
func matchContactDeviceWithPromise(_ requestData : String?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
355
|
+
|
|
356
|
+
if(requestData == nil || requestData!.isEmpty){
|
|
357
|
+
reject("matchContactDeviceWithPromise has failed : ","requestData cannot be null or empty",nil)
|
|
358
|
+
return
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
do{
|
|
362
|
+
let decoder = JSONDecoder()
|
|
363
|
+
let data = requestData!.data(using: .utf8)!
|
|
364
|
+
let matchContactDeviceRequest = try decoder.decode(MatchContactDeviceRequestModel.self, from: data)
|
|
365
|
+
|
|
366
|
+
SmartMessage.shared.matchContactDevice(matchContactDeviceRequest: matchContactDeviceRequest){ sdkResult in
|
|
367
|
+
switch sdkResult {
|
|
368
|
+
case .success(let response):
|
|
369
|
+
do{
|
|
370
|
+
let responseJson = try response.encodeToJsonString()
|
|
371
|
+
resolve(responseJson)
|
|
372
|
+
}
|
|
373
|
+
catch let error {
|
|
374
|
+
reject("matchContactDeviceWithPromise failed : ",error.localizedDescription,error)
|
|
375
|
+
}
|
|
376
|
+
case .failure(let error):
|
|
377
|
+
reject("matchContactDeviceWithPromise failed : ",error.localizedDescription,error)
|
|
378
|
+
case .empty:
|
|
379
|
+
reject("matchContactDeviceWithPromise failed : ","No data", nil)
|
|
380
|
+
@unknown default:
|
|
381
|
+
reject("matchContactDeviceWithPromise failed : ","Unknown case", nil)
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
}catch let error as NSError {
|
|
386
|
+
print(error)
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
@objc
|
|
392
|
+
func saveConfig(){
|
|
393
|
+
do{
|
|
394
|
+
try SmartMessage.shared.saveConfig()
|
|
395
|
+
}catch ConfigError.configPlistNotFoundError{
|
|
396
|
+
print("Config.plist could not be found")
|
|
397
|
+
}catch ConfigError.decodeToModelError{
|
|
398
|
+
print("Config.plist could not decode to config model")
|
|
399
|
+
}catch let error{
|
|
400
|
+
print(error.localizedDescription)
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
@objc
|
|
405
|
+
func saveConfigWithPromise(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
406
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
407
|
+
|
|
408
|
+
do{
|
|
409
|
+
try SmartMessage.shared.saveConfig()
|
|
410
|
+
resolve(true)
|
|
411
|
+
}catch ConfigError.configPlistNotFoundError{
|
|
412
|
+
reject("saveConfigWithPromise has failed : ","Config.plist could not be found",nil)
|
|
413
|
+
}catch ConfigError.decodeToModelError{
|
|
414
|
+
print("saveConfigWithPromise")
|
|
415
|
+
reject("saveConfigWithPromise has failed : ","Config.plist could not decode to config model",nil)
|
|
416
|
+
}catch let error{
|
|
417
|
+
reject("saveConfigWithPromise has failed : ",error.localizedDescription,error)
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
@objc
|
|
422
|
+
func saveNotificationToDB(_ notificationModel: String, _ isSeen : Bool) {
|
|
423
|
+
|
|
424
|
+
guard let notificationModelDict = notificationModel.convertToStringAnyDictionary() else{
|
|
425
|
+
return
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
SmartMessage.shared.saveNotificationToDB(notification: notificationModelDict)
|
|
429
|
+
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
@objc
|
|
433
|
+
func getNotificationListFromDB(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
434
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
435
|
+
|
|
436
|
+
guard let notificationList = SmartMessage.shared.getNotificationListFromDB() else{
|
|
437
|
+
reject("getNotificationListFromDB","Message list is empty or there was an error when getting the list from core db",nil)
|
|
438
|
+
return
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
do{
|
|
442
|
+
resolve(try notificationList.encodeToJsonString())
|
|
443
|
+
}catch let error as NSError {
|
|
444
|
+
reject("getNotificationListFromDB",error.localizedDescription,error)
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
@objc
|
|
450
|
+
func updateNotificationAsSeen(_ notificationId: String?){
|
|
451
|
+
|
|
452
|
+
if(notificationId == nil || notificationId!.isEmpty){
|
|
453
|
+
return
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
SmartMessage.shared.updateNotificationAsSeen(notificationId: notificationId!)
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
@objc
|
|
460
|
+
func updateNotificationContent(_ notificationId: String?, _ notificationModel: String?){
|
|
461
|
+
|
|
462
|
+
if(notificationId == nil || notificationId!.isEmpty || notificationModel == nil || notificationModel!.isEmpty){
|
|
463
|
+
return
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
SmartMessage.shared.updateNotificationContent(notificationId: notificationId!, notificationString: notificationModel!)
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
@objc
|
|
470
|
+
func reportCustomEvent(_ eventIdentifier: String!,_ uniqueId: String!,_ parameters: String?) -> Void {
|
|
471
|
+
|
|
472
|
+
guard let parametersDictionary = parameters?.convertToStringStringDictionary() else { return }
|
|
473
|
+
|
|
474
|
+
SmartMessage.shared.reportCustomEvent(eventIdentifier: eventIdentifier, uniqueId: uniqueId, parameters: parametersDictionary)
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
@objc
|
|
478
|
+
func reportCustomEventWithPromise( _ eventIdentifier: String!,_ uniqueId: String!,_ parameters: String?,resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
479
|
+
|
|
480
|
+
guard let parametersDictionary = parameters?.convertToStringStringDictionary() else { return }
|
|
481
|
+
|
|
482
|
+
SmartMessage.shared.reportCustomEvent(eventIdentifier: eventIdentifier, uniqueId: uniqueId, parameters: parametersDictionary){ result in
|
|
483
|
+
switch result {
|
|
484
|
+
case .success(let response):
|
|
485
|
+
do{
|
|
486
|
+
resolve(try response.encodeToJsonString())
|
|
487
|
+
}catch let error as NSError {
|
|
488
|
+
reject("reportCustomEvent failed : ",error.localizedDescription,error)
|
|
489
|
+
}
|
|
490
|
+
break
|
|
491
|
+
case .failure(let error):
|
|
492
|
+
reject("reportCustomEvent failed : ",error.localizedDescription,error)
|
|
493
|
+
case .empty:
|
|
494
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
495
|
+
reject("reportCustomEvent failed : ","No data",error)
|
|
496
|
+
break
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
@objc
|
|
502
|
+
func reportLoggedIn() -> Void {
|
|
503
|
+
SmartMessage.shared.reportLogin()
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
@objc
|
|
507
|
+
func reportLoggedInWithPromise(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
508
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
509
|
+
|
|
510
|
+
SmartMessage.shared.reportLogin(){ result in
|
|
511
|
+
switch result {
|
|
512
|
+
case .success(let response):
|
|
513
|
+
do{
|
|
514
|
+
resolve(try response.encodeToJsonString())
|
|
515
|
+
}catch let error as NSError {
|
|
516
|
+
reject("reportLoggedIn failed : ",error.localizedDescription,error)
|
|
517
|
+
}
|
|
518
|
+
break
|
|
519
|
+
case .failure(let error):
|
|
520
|
+
reject("reportLoggedIn failed : ",error.localizedDescription,error)
|
|
521
|
+
case .empty:
|
|
522
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
523
|
+
reject("reportLoggedIn failed : ","No data",error)
|
|
524
|
+
break
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
@objc
|
|
530
|
+
func reportLoggedOut() -> Void {
|
|
531
|
+
SmartMessage.shared.reportLogout();
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
@objc
|
|
535
|
+
func reportLoggedOutWithPromise(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
536
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
537
|
+
|
|
538
|
+
SmartMessage.shared.reportLogout(){ result in
|
|
539
|
+
switch result {
|
|
540
|
+
case .success(let response):
|
|
541
|
+
do{
|
|
542
|
+
resolve(try response.encodeToJsonString())
|
|
543
|
+
}catch let error as NSError {
|
|
544
|
+
reject("reportLoggedOut failed : ",error.localizedDescription,error)
|
|
545
|
+
}
|
|
546
|
+
break
|
|
547
|
+
case .failure(let error):
|
|
548
|
+
reject("reportLoggedOut failed : ",error.localizedDescription,error)
|
|
549
|
+
case .empty:
|
|
550
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
551
|
+
reject("reportLoggedOut failed : ","No data",error)
|
|
552
|
+
break
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
@objc
|
|
560
|
+
func permissionUpdate(_ permissionType:String,_ isGranted:Bool) -> Void {
|
|
561
|
+
|
|
562
|
+
if let type = PermissionType.init(rawValue: permissionType){
|
|
563
|
+
SmartMessage.shared.updatePermission(permissionType: type , isGranted:isGranted)
|
|
564
|
+
}else{
|
|
565
|
+
return
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
@objc
|
|
571
|
+
func permissionUpdateWithPromise(_ permissionType:String,_ isGranted:Bool,resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
572
|
+
|
|
573
|
+
if let type = PermissionType.init(rawValue: permissionType){
|
|
574
|
+
|
|
575
|
+
SmartMessage.shared.updatePermission(permissionType: type , isGranted:isGranted){ result in
|
|
576
|
+
|
|
577
|
+
switch result {
|
|
578
|
+
case .success(let response):
|
|
579
|
+
do{
|
|
580
|
+
resolve(try response.encodeToJsonString())
|
|
581
|
+
}catch let error as NSError {
|
|
582
|
+
reject("updatePermission failed : ",error.localizedDescription,error)
|
|
583
|
+
}
|
|
584
|
+
break
|
|
585
|
+
case .failure(let error):
|
|
586
|
+
reject("updatePermission failed : ",error.localizedDescription,error)
|
|
587
|
+
break
|
|
588
|
+
case .empty:
|
|
589
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
590
|
+
reject("updatePermission failed : ","No data",error)
|
|
591
|
+
break
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}else{
|
|
595
|
+
let error = NSError(domain: "SMP", code: -1)
|
|
596
|
+
reject("updatePermission failed : ","PermissionType could not be casted",error)
|
|
597
|
+
return
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
@objc
|
|
603
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
604
|
+
return true
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
extension String {
|
|
610
|
+
func convertToStringAnyDictionary() -> [String: Any]? {
|
|
611
|
+
var dict: Dictionary<String, Any>?
|
|
612
|
+
|
|
613
|
+
if let data = self.data(using: .utf8) {
|
|
614
|
+
do {
|
|
615
|
+
dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
|
|
616
|
+
} catch {
|
|
617
|
+
print(error.localizedDescription)
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
return dict
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
func convertToStringStringDictionary() -> [String: String]? {
|
|
624
|
+
var dict: Dictionary<String, String>?
|
|
625
|
+
|
|
626
|
+
if let data = self.data(using: .utf8) {
|
|
627
|
+
do {
|
|
628
|
+
dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: String]
|
|
629
|
+
} catch {
|
|
630
|
+
print(error.localizedDescription)
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
return dict
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
func safeValue(_ defaultValue: String = "") -> String {
|
|
637
|
+
guard let _ = self as String? else {
|
|
638
|
+
return defaultValue
|
|
639
|
+
}
|
|
640
|
+
return self
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
extension Dictionary{
|
|
645
|
+
func convertToJson() -> String {
|
|
646
|
+
if let theJSONData = try? JSONSerialization.data(withJSONObject: self, options: []) {
|
|
647
|
+
return String(data: theJSONData,encoding: .utf8)!
|
|
648
|
+
}
|
|
649
|
+
return ""
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
extension UserInfoModel{
|
|
654
|
+
func convertToJson() -> String {
|
|
655
|
+
if let theJSONData = try? JSONSerialization.data(withJSONObject: self, options: []) {
|
|
656
|
+
return String(data: theJSONData,encoding: .utf8)!
|
|
657
|
+
}
|
|
658
|
+
return ""
|
|
659
|
+
}
|
|
660
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "smartmessage-react-native",
|
|
3
|
+
"version": "2.11.2",
|
|
4
|
+
"description": "SmartMessage SMP React Native SDK",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"author": "SmartMessage",
|
|
7
|
+
"email": "engineering.accounts@smartmessage.com",
|
|
8
|
+
"repository": {
|
|
9
|
+
"url": "https://github.com/smartmessagesdk/SmartMessageSDK-ReactNative"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://www.smartmessage.com",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"files": [
|
|
14
|
+
"src",
|
|
15
|
+
"android",
|
|
16
|
+
"ios",
|
|
17
|
+
"*.podspec",
|
|
18
|
+
"!ios/build",
|
|
19
|
+
"!android/build",
|
|
20
|
+
"!android/gradle",
|
|
21
|
+
"!android/gradlew",
|
|
22
|
+
"!android/gradlew.bat",
|
|
23
|
+
"!android/local.properties",
|
|
24
|
+
"!**/__tests__",
|
|
25
|
+
"!**/__mocks__",
|
|
26
|
+
"!**/.*"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"react-native": ">=0.61.0"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"react-native",
|
|
36
|
+
"smartmessage"
|
|
37
|
+
]
|
|
38
|
+
}
|