tagworks-sdk-v1-react 1.1.13 → 1.1.15
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 +188 -55
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/tagworkssdkv1/DataBundleModule.kt +371 -281
- package/android/src/main/java/com/tagworkssdkv1/TagWorksModule.kt +402 -323
- package/ios/DataBundleModule.swift +176 -12
- package/ios/DataBundleModuleBridge.m +15 -0
- package/ios/StandardEventModule.swift +2 -23
- package/ios/StandardEventModuleBridge.m +0 -4
- package/ios/TagWorksModule.swift +181 -9
- package/ios/TagWorksModuleBridge.m +17 -1
- package/package.json +1 -1
- package/tagworks-sdk-v1-react.podspec +2 -2
|
@@ -25,7 +25,7 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// @objc static func constantsToExport() -> [AnyHashable: Any]! {
|
|
28
|
-
@objc
|
|
28
|
+
@objc func constantsToExport() -> [AnyHashable: Any]! {
|
|
29
29
|
// 상수값을 반환합니다. JavaScript로 전달됩니다.
|
|
30
30
|
return [
|
|
31
31
|
"EVENT_TAG_NAME": "OBZEN_EVENT_NAME",
|
|
@@ -101,11 +101,26 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
101
101
|
|
|
102
102
|
var generalDimensions: [String: String] = [:]
|
|
103
103
|
var factDimensions: [String: Any] = [:]
|
|
104
|
+
// for dimension in self.eventDimensions {
|
|
105
|
+
// if dimension.type == Dimension.generalType {
|
|
106
|
+
// generalDimensions[String(dimension.index)] = dimension.value
|
|
107
|
+
// } else if dimension.type == Dimension.factType {
|
|
108
|
+
// factDimensions[String(dimension.index)] = String(dimension.numValue)
|
|
109
|
+
// }
|
|
110
|
+
// }
|
|
104
111
|
for dimension in self.eventDimensions {
|
|
105
112
|
if dimension.type == Dimension.generalType {
|
|
106
|
-
|
|
113
|
+
if dimension.index == -1 {
|
|
114
|
+
generalDimensions[dimension.key] = dimension.value
|
|
115
|
+
} else {
|
|
116
|
+
generalDimensions[String(dimension.index)] = dimension.value
|
|
117
|
+
}
|
|
107
118
|
} else if dimension.type == Dimension.factType {
|
|
108
|
-
|
|
119
|
+
if dimension.index == -1 {
|
|
120
|
+
factDimensions[dimension.key] = String(dimension.numValue)
|
|
121
|
+
} else {
|
|
122
|
+
factDimensions[String(dimension.index)] = String(dimension.numValue)
|
|
123
|
+
}
|
|
109
124
|
}
|
|
110
125
|
}
|
|
111
126
|
let gDimension = ["General": generalDimensions]
|
|
@@ -147,6 +162,17 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
147
162
|
removeDimensionInFactType(index)
|
|
148
163
|
eventDimensions.append(Dimension(index: index, numValue: value))
|
|
149
164
|
}
|
|
165
|
+
|
|
166
|
+
// -- 동적 파라미터
|
|
167
|
+
@objc func putDynamicDimensionWithString(_ key: String, value: String) {
|
|
168
|
+
removeDynamicDimension(key)
|
|
169
|
+
eventDimensions.append(Dimension(key: key, value: value))
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@objc func putDynamicDimensionWithDouble(_ key: String, value: Double) {
|
|
173
|
+
removeDynamicDimension(key)
|
|
174
|
+
eventDimensions.append(Dimension(key: key, numValue: value))
|
|
175
|
+
}
|
|
150
176
|
|
|
151
177
|
/// General 과 Fact 별로 저장되어 있는 인덱스와 값들을 리턴i
|
|
152
178
|
@objc func getDimensions(_ callback: @escaping RCTResponseSenderBlock) {
|
|
@@ -154,13 +180,21 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
154
180
|
var generalDimensions: [String: String] = [:]
|
|
155
181
|
var factDimensions: [String: Any] = [:]
|
|
156
182
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
183
|
+
for dimension in self.eventDimensions {
|
|
184
|
+
if dimension.type == Dimension.generalType {
|
|
185
|
+
if dimension.index == -1 {
|
|
186
|
+
generalDimensions[dimension.key] = dimension.value
|
|
187
|
+
} else {
|
|
188
|
+
generalDimensions[String(dimension.index)] = dimension.value
|
|
189
|
+
}
|
|
190
|
+
} else if dimension.type == Dimension.factType {
|
|
191
|
+
if dimension.index == -1 {
|
|
192
|
+
factDimensions[dimension.key] = String(dimension.numValue)
|
|
193
|
+
} else {
|
|
194
|
+
factDimensions[String(dimension.index)] = String(dimension.numValue)
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
164
198
|
let gDimension = ["General": generalDimensions]
|
|
165
199
|
let fDimension = ["Fact": factDimensions]
|
|
166
200
|
dictDimensions["Dimensions"] = [gDimension, fDimension]
|
|
@@ -186,11 +220,19 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
186
220
|
for dimension in self.eventDimensions {
|
|
187
221
|
if dimension.type == Dimension.generalType {
|
|
188
222
|
var dim: [String: String] = [:]
|
|
189
|
-
|
|
223
|
+
if dimension.index == -1 {
|
|
224
|
+
dim["General_\(dimension.key)"] = dimension.value
|
|
225
|
+
} else {
|
|
226
|
+
dim["General_\(dimension.index)"] = dimension.value
|
|
227
|
+
}
|
|
190
228
|
dimensionsArray.append(dim)
|
|
191
229
|
} else if dimension.type == Dimension.factType {
|
|
192
230
|
var dim: [String: String] = [:]
|
|
193
|
-
|
|
231
|
+
if dimension.index == -1 {
|
|
232
|
+
dim["Fact_\(dimension.key)"] = String(dimension.numValue)
|
|
233
|
+
} else {
|
|
234
|
+
dim["Fact_\(dimension.index)"] = String(dimension.numValue)
|
|
235
|
+
}
|
|
194
236
|
dimensionsArray.append(dim)
|
|
195
237
|
}
|
|
196
238
|
}
|
|
@@ -226,7 +268,116 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
226
268
|
callback([])
|
|
227
269
|
}
|
|
228
270
|
}
|
|
271
|
+
|
|
272
|
+
// -- 동적 파라미터
|
|
273
|
+
@objc func getDynamicDimensions(_ callback: @escaping RCTResponseSenderBlock) {
|
|
274
|
+
var dictDimensions: [String: Any] = [:]
|
|
275
|
+
var dynamicDimensions: [String: String] = [:]
|
|
276
|
+
|
|
277
|
+
for dimension in self.eventDimensions {
|
|
278
|
+
if dimension.type == Dimension.generalType {
|
|
279
|
+
if dimension.index == -1 {
|
|
280
|
+
dynamicDimensions[dimension.key] = dimension.value
|
|
281
|
+
} else {
|
|
282
|
+
dynamicDimensions[String(dimension.index)] = dimension.value
|
|
283
|
+
}
|
|
284
|
+
} else if dimension.type == Dimension.factType {
|
|
285
|
+
if dimension.index == -1 {
|
|
286
|
+
dynamicDimensions[dimension.key] = String(dimension.numValue)
|
|
287
|
+
} else {
|
|
288
|
+
dynamicDimensions[String(dimension.index)] = String(dimension.numValue)
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
dictDimensions["Dimensions"] = dynamicDimensions
|
|
294
|
+
|
|
295
|
+
do {
|
|
296
|
+
// Dictionary Array를 JSON으로 변환
|
|
297
|
+
let jsonData = try JSONSerialization.data(withJSONObject: dictDimensions, options: .prettyPrinted)
|
|
298
|
+
|
|
299
|
+
// JSON 데이터를 문자열로 변환하여 반환
|
|
300
|
+
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
301
|
+
callback([jsonString]) // JSON 문자열을 JavaScript로 전달
|
|
302
|
+
}
|
|
303
|
+
} catch {
|
|
304
|
+
print("JSON 변환 오류: \(error)")
|
|
305
|
+
callback([NSNull()])
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/// key 값에 맞춰서 리턴
|
|
310
|
+
@objc func getDynamicDimensionsOfArrayIndex(_ callback: @escaping RCTResponseSenderBlock) {
|
|
311
|
+
var dimensionsArray: [[String:String]] = []
|
|
312
|
+
// var dictDimensions: [String:String] = [:]
|
|
313
|
+
// let commonDimensions = TagWorks.sharedInstance.getCommonDimensions()
|
|
314
|
+
|
|
315
|
+
for dimension in self.eventDimensions {
|
|
316
|
+
if dimension.type == Dimension.generalType {
|
|
317
|
+
var dim: [String: String] = [:]
|
|
318
|
+
if dimension.index == -1 {
|
|
319
|
+
dim[dimension.key] = dimension.value
|
|
320
|
+
} else {
|
|
321
|
+
dim[String(dimension.index)] = dimension.value
|
|
322
|
+
}
|
|
323
|
+
dimensionsArray.append(dim)
|
|
324
|
+
} else if dimension.type == Dimension.factType {
|
|
325
|
+
var dim: [String: String] = [:]
|
|
326
|
+
if dimension.index == -1 {
|
|
327
|
+
dim[dimension.key] = String(dimension.numValue)
|
|
328
|
+
} else {
|
|
329
|
+
dim[String(dimension.index)] = String(dimension.numValue)
|
|
330
|
+
}
|
|
331
|
+
dimensionsArray.append(dim)
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
do {
|
|
336
|
+
// Dictionary Array를 JSON으로 변환
|
|
337
|
+
let jsonData = try JSONSerialization.data(withJSONObject: dimensionsArray, options: .prettyPrinted)
|
|
338
|
+
|
|
339
|
+
// JSON 데이터를 문자열로 변환하여 반환
|
|
340
|
+
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
341
|
+
callback([jsonString]) // JSON 문자열을 JavaScript로 전달
|
|
342
|
+
}
|
|
343
|
+
} catch {
|
|
344
|
+
print("JSON 변환 오류: \(error)")
|
|
345
|
+
callback([NSNull()])
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
@objc func getDynamicDimension(_ key: String, callback: @escaping RCTResponseSenderBlock) {
|
|
350
|
+
let dimension = self.eventDimensions.filter {$0.key == key}.first
|
|
351
|
+
if let dimension {
|
|
352
|
+
if dimension.type == Dimension.generalType {
|
|
353
|
+
callback([dimension.value])
|
|
354
|
+
} else {
|
|
355
|
+
callback([dimension.numValue])
|
|
356
|
+
}
|
|
357
|
+
} else {
|
|
358
|
+
callback([])
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// @objc func getDynamicDimensionWithString(_ key: String, callback: @escaping RCTResponseSenderBlock) {
|
|
363
|
+
// let dimension: TagWorks_SDK_iOS.Dimension? = self.eventDimensions.filter {$0.key == key && $0.type == Dimension.generalType}.first
|
|
364
|
+
// if let dimension {
|
|
365
|
+
// callback([dimension.value])
|
|
366
|
+
// } else {
|
|
367
|
+
// callback([])
|
|
368
|
+
// }
|
|
369
|
+
// }
|
|
370
|
+
//
|
|
371
|
+
// @objc func getDynamicDimensionWithDouble(_ key: String, callback: @escaping RCTResponseSenderBlock) {
|
|
372
|
+
// let dimension: TagWorks_SDK_iOS.Dimension? = self.eventDimensions.filter {$0.key == key && $0.type == Dimension.factType}.first
|
|
373
|
+
// if let dimension {
|
|
374
|
+
// callback([dimension.numValue])
|
|
375
|
+
// } else {
|
|
376
|
+
// callback([])
|
|
377
|
+
// }
|
|
378
|
+
// }
|
|
229
379
|
|
|
380
|
+
// Dimension 삭제
|
|
230
381
|
@objc func removeDimensionInGeneralType(_ index: Int) {
|
|
231
382
|
eventDimensions.removeAll(where: {$0.index == index && $0.type == Dimension.generalType})
|
|
232
383
|
}
|
|
@@ -242,6 +393,19 @@ class DataBundleModule: NSObject, RCTBridgeModule {
|
|
|
242
393
|
@objc func removeAllDimension() {
|
|
243
394
|
eventDimensions.removeAll()
|
|
244
395
|
}
|
|
396
|
+
|
|
397
|
+
// -- 동적 파라미터 삭제
|
|
398
|
+
@objc func removeDynamicDimension(_ key: String) {
|
|
399
|
+
eventDimensions.removeAll(where: {$0.key == key})
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
@objc func removeDynamicDimensionWithArrayIndex(_ index: Int) {
|
|
403
|
+
eventDimensions.remove(at: index)
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
@objc func removeAllDynamicDimension() {
|
|
407
|
+
eventDimensions.removeAll()
|
|
408
|
+
}
|
|
245
409
|
|
|
246
410
|
|
|
247
411
|
/// 이벤트에 필요한 파라미터 항목들이 비어 있는지 체크
|
|
@@ -15,15 +15,30 @@ RCT_EXTERN_METHOD(initDataBundle:(NSString *) jsonString)
|
|
|
15
15
|
RCT_EXTERN_METHOD(getDataBundle:(RCTResponseSenderBlock) callback)
|
|
16
16
|
|
|
17
17
|
RCT_EXTERN_METHOD(putString:(NSString *)key value:(NSString *)value)
|
|
18
|
+
|
|
18
19
|
RCT_EXTERN_METHOD(putDimensionWithString:(int)index value:(NSString *)value)
|
|
19
20
|
RCT_EXTERN_METHOD(putDimensionWithDouble:(int)index value:(double)value)
|
|
21
|
+
|
|
20
22
|
RCT_EXTERN_METHOD(getDimensions:(RCTResponseSenderBlock) callback)
|
|
21
23
|
RCT_EXTERN_METHOD(getDimensionsOfArrayIndex:(RCTResponseSenderBlock) callback)
|
|
22
24
|
RCT_EXTERN_METHOD(getDimensionWithString:(int)index callback:(RCTResponseSenderBlock) callback)
|
|
23
25
|
RCT_EXTERN_METHOD(getDimensionWithDouble:(int)index callback:(RCTResponseSenderBlock) callback)
|
|
26
|
+
|
|
24
27
|
RCT_EXTERN_METHOD(removeDimensionInGeneralType:(int)index)
|
|
25
28
|
RCT_EXTERN_METHOD(removeDimensionInFactType:(int)index)
|
|
26
29
|
RCT_EXTERN_METHOD(removeDimensionWithArrayIndex:(int)index)
|
|
27
30
|
RCT_EXTERN_METHOD(removeAllDimension)
|
|
28
31
|
|
|
32
|
+
// -- 동적 파라미터
|
|
33
|
+
RCT_EXTERN_METHOD(putDynamicDimensionWithString:(NSString *)key value:(NSString *)value)
|
|
34
|
+
RCT_EXTERN_METHOD(putDynamicDimensionWithDouble:(NSString *)key value:(double)value)
|
|
35
|
+
|
|
36
|
+
RCT_EXTERN_METHOD(getDynamicDimensions:(RCTResponseSenderBlock) callback)
|
|
37
|
+
RCT_EXTERN_METHOD(getDynamicDimensionsOfArrayIndex:(RCTResponseSenderBlock) callback)
|
|
38
|
+
RCT_EXTERN_METHOD(getDynamicDimension:(NSString *)key callback:(RCTResponseSenderBlock) callback)
|
|
39
|
+
|
|
40
|
+
RCT_EXTERN_METHOD(removeDynamicDimension:(NSString *)key)
|
|
41
|
+
RCT_EXTERN_METHOD(removeDynamicDimensionWithArrayIndex:(int)index)
|
|
42
|
+
RCT_EXTERN_METHOD(removeAllDynamicDimension)
|
|
43
|
+
|
|
29
44
|
@end
|
|
@@ -21,13 +21,13 @@ class StandardEventModule: NSObject, RCTBridgeModule {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
// @objc static func constantsToExport() -> [AnyHashable: Any]! {
|
|
24
|
-
@objc
|
|
24
|
+
@objc func constantsToExport() -> [AnyHashable: Any]! {
|
|
25
25
|
// 상수값을 반환합니다. JavaScript로 전달됩니다.
|
|
26
26
|
return [
|
|
27
27
|
"PAGE_VIEW" : "PageView",
|
|
28
28
|
"CLICK" : "Click",
|
|
29
29
|
"SCROLL" : "Scroll",
|
|
30
|
-
"DOWNLOAD" : "
|
|
30
|
+
"DOWNLOAD" : "Download",
|
|
31
31
|
"OUT_LINK" : "OutLink",
|
|
32
32
|
"SEARCH" : "Search",
|
|
33
33
|
"ERROR" : "Error",
|
|
@@ -36,24 +36,3 @@ class StandardEventModule: NSObject, RCTBridgeModule {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
//@objc(DimensionTypeModule)
|
|
41
|
-
//class DimensionTypeModule: NSObject, RCTBridgeModule {
|
|
42
|
-
//
|
|
43
|
-
// static func moduleName() -> String {
|
|
44
|
-
// return "DimensionTypeModule"
|
|
45
|
-
// }
|
|
46
|
-
//
|
|
47
|
-
// // 네이티브 모듈에서 사용할 상수값을 반환하는 함수
|
|
48
|
-
// @objc static func requiresMainQueueSetup() -> Bool {
|
|
49
|
-
// return true
|
|
50
|
-
// }
|
|
51
|
-
//
|
|
52
|
-
// @objc func getConstants() -> [AnyHashable: Any]! {
|
|
53
|
-
// // 상수값을 반환합니다. JavaScript로 전달됩니다.
|
|
54
|
-
// return [
|
|
55
|
-
// "GENERAL" : "DIMENSION_TYPE_GENERAL",
|
|
56
|
-
// "FACT" : "DIMENSION_TYPE_FACT",
|
|
57
|
-
// ]
|
|
58
|
-
// }
|
|
59
|
-
//}
|
package/ios/TagWorksModule.swift
CHANGED
|
@@ -23,7 +23,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
23
23
|
|
|
24
24
|
// MARK: 이벤트 상수 선언
|
|
25
25
|
// @objc static func constantsToExport() -> [AnyHashable: Any]! {
|
|
26
|
-
@objc
|
|
26
|
+
@objc func constantsToExport() -> [AnyHashable: Any]! {
|
|
27
27
|
// 상수값을 반환합니다. JavaScript로 전달됩니다.
|
|
28
28
|
return [
|
|
29
29
|
"EVENT_TYPE_PAGE": "EVENT_TYPE_PAGE",
|
|
@@ -40,7 +40,8 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
40
40
|
isManualDispatch: Bool = false,
|
|
41
41
|
// userAgent: String? = nil,
|
|
42
42
|
appVersion: String? = nil,
|
|
43
|
-
appName: String? = nil
|
|
43
|
+
appName: String? = nil,
|
|
44
|
+
isUseDynamicParameter: Bool = false) {
|
|
44
45
|
|
|
45
46
|
TagWorks.sharedInstance.setInstanceConfig(siteId: siteId,
|
|
46
47
|
baseUrl: URL(string: baseUrl)!,
|
|
@@ -51,7 +52,8 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
51
52
|
userAgent: nil,
|
|
52
53
|
isManualDispatch: isManualDispatch,
|
|
53
54
|
appVersion: appVersion,
|
|
54
|
-
appName: appName
|
|
55
|
+
appName: appName,
|
|
56
|
+
isUseDynamicParameter: isUseDynamicParameter)
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
@objc func setIsDebugPrint(_ value: Bool) {
|
|
@@ -73,6 +75,10 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
73
75
|
@objc func setUserId(_ value: String) {
|
|
74
76
|
TagWorks.sharedInstance.userId = value
|
|
75
77
|
}
|
|
78
|
+
|
|
79
|
+
@objc func setAdId(_ value: String) {
|
|
80
|
+
TagWorks.sharedInstance.adId = value
|
|
81
|
+
}
|
|
76
82
|
|
|
77
83
|
@objc public func dispatch(_ callback: @escaping RCTResponseSenderBlock) {
|
|
78
84
|
let result = TagWorks.sharedInstance.dispatch()
|
|
@@ -89,7 +95,19 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
89
95
|
removeCommonDimensionInFactType(index)
|
|
90
96
|
TagWorks.sharedInstance.setCommonDimension(index: index, numValue: value)
|
|
91
97
|
}
|
|
98
|
+
|
|
99
|
+
// -- 동적 파라미터
|
|
100
|
+
@objc func setDynamicCommonDimensionWithString(_ key: String, value: String) {
|
|
101
|
+
removeDynamicCommonDimension(key)
|
|
102
|
+
TagWorks.sharedInstance.setDynamicCommonDimension(key: key, value: value)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@objc func setDynamicCommonDimensionWithDouble(_ key: String, value: Double) {
|
|
106
|
+
removeDynamicCommonDimension(key)
|
|
107
|
+
TagWorks.sharedInstance.setDynamicCommonDimension(key: key, numValue: value)
|
|
108
|
+
}
|
|
92
109
|
|
|
110
|
+
// Dimension 가져오기
|
|
93
111
|
@objc func getCommonDimensions(_ callback: @escaping RCTResponseSenderBlock) {
|
|
94
112
|
var dictDimensions: [String: Any] = [:]
|
|
95
113
|
var generalDimensions: [String: String] = [:]
|
|
@@ -98,9 +116,17 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
98
116
|
|
|
99
117
|
for dimension in commonDimensions {
|
|
100
118
|
if dimension.type == Dimension.generalType {
|
|
101
|
-
|
|
119
|
+
if dimension.index == -1 {
|
|
120
|
+
generalDimensions[dimension.key] = dimension.value
|
|
121
|
+
} else {
|
|
122
|
+
generalDimensions[String(dimension.index)] = dimension.value
|
|
123
|
+
}
|
|
102
124
|
} else if dimension.type == Dimension.factType {
|
|
103
|
-
|
|
125
|
+
if dimension.index == -1 {
|
|
126
|
+
factDimensions[dimension.key] = String(dimension.numValue)
|
|
127
|
+
} else {
|
|
128
|
+
factDimensions[String(dimension.index)] = String(dimension.numValue)
|
|
129
|
+
}
|
|
104
130
|
}
|
|
105
131
|
}
|
|
106
132
|
let gDimension = ["General": generalDimensions]
|
|
@@ -129,11 +155,19 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
129
155
|
for dimension in commonDimensions {
|
|
130
156
|
if dimension.type == Dimension.generalType {
|
|
131
157
|
var dim: [String: String] = [:]
|
|
132
|
-
|
|
158
|
+
if dimension.index == -1 {
|
|
159
|
+
dim["General_\(dimension.key)"] = dimension.value
|
|
160
|
+
} else {
|
|
161
|
+
dim["General_\(dimension.index)"] = dimension.value
|
|
162
|
+
}
|
|
133
163
|
dimensionsArray.append(dim)
|
|
134
164
|
} else if dimension.type == Dimension.factType {
|
|
135
165
|
var dim: [String: String] = [:]
|
|
136
|
-
|
|
166
|
+
if dimension.index == -1 {
|
|
167
|
+
dim["Fact_\(dimension.key)"] = String(dimension.numValue)
|
|
168
|
+
} else {
|
|
169
|
+
dim["Fact_\(dimension.index)"] = String(dimension.numValue)
|
|
170
|
+
}
|
|
137
171
|
dimensionsArray.append(dim)
|
|
138
172
|
}
|
|
139
173
|
}
|
|
@@ -169,7 +203,117 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
169
203
|
callback([])
|
|
170
204
|
}
|
|
171
205
|
}
|
|
206
|
+
|
|
207
|
+
// -- 동적 파라미터
|
|
208
|
+
@objc func getDynamicCommonDimensions(_ callback: @escaping RCTResponseSenderBlock) {
|
|
209
|
+
var dictDimensions: [String: Any] = [:]
|
|
210
|
+
var dynamicDimensions: [String: String] = [:]
|
|
211
|
+
let commonDimensions = TagWorks.sharedInstance.getCommonDimensions()
|
|
212
|
+
|
|
213
|
+
for dimension in commonDimensions {
|
|
214
|
+
if dimension.type == Dimension.generalType {
|
|
215
|
+
if dimension.index == -1 {
|
|
216
|
+
dynamicDimensions[dimension.key] = dimension.value
|
|
217
|
+
} else {
|
|
218
|
+
dynamicDimensions[String(dimension.index)] = dimension.value
|
|
219
|
+
}
|
|
220
|
+
} else if dimension.type == Dimension.factType {
|
|
221
|
+
if dimension.index == -1 {
|
|
222
|
+
dynamicDimensions[dimension.key] = String(dimension.numValue)
|
|
223
|
+
} else {
|
|
224
|
+
dynamicDimensions[String(dimension.index)] = String(dimension.numValue)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
dictDimensions["Dimensions"] = dynamicDimensions
|
|
230
|
+
|
|
231
|
+
do {
|
|
232
|
+
// Dictionary Array를 JSON으로 변환
|
|
233
|
+
let jsonData = try JSONSerialization.data(withJSONObject: dictDimensions, options: .prettyPrinted)
|
|
234
|
+
|
|
235
|
+
// JSON 데이터를 문자열로 변환하여 반환
|
|
236
|
+
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
237
|
+
callback([jsonString]) // JSON 문자열을 JavaScript로 전달
|
|
238
|
+
}
|
|
239
|
+
} catch {
|
|
240
|
+
print("JSON 변환 오류: \(error)")
|
|
241
|
+
callback([NSNull()])
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/// key 값에 맞춰서 리턴
|
|
246
|
+
@objc func getDynamicCommonDimensionsOfArrayIndex(_ callback: @escaping RCTResponseSenderBlock) {
|
|
247
|
+
var dimensionsArray: [[String:String]] = []
|
|
248
|
+
// var dictDimensions: [String:String] = [:]
|
|
249
|
+
let commonDimensions = TagWorks.sharedInstance.getCommonDimensions()
|
|
250
|
+
|
|
251
|
+
for dimension in commonDimensions {
|
|
252
|
+
if dimension.type == Dimension.generalType {
|
|
253
|
+
var dim: [String: String] = [:]
|
|
254
|
+
if dimension.index == -1 {
|
|
255
|
+
dim[dimension.key] = dimension.value
|
|
256
|
+
} else {
|
|
257
|
+
dim[String(dimension.index)] = dimension.value
|
|
258
|
+
}
|
|
259
|
+
dimensionsArray.append(dim)
|
|
260
|
+
} else if dimension.type == Dimension.factType {
|
|
261
|
+
var dim: [String: String] = [:]
|
|
262
|
+
if dimension.index == -1 {
|
|
263
|
+
dim[dimension.key] = String(dimension.numValue)
|
|
264
|
+
} else {
|
|
265
|
+
dim[String(dimension.index)] = String(dimension.numValue)
|
|
266
|
+
}
|
|
267
|
+
dimensionsArray.append(dim)
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
do {
|
|
272
|
+
// Dictionary Array를 JSON으로 변환
|
|
273
|
+
let jsonData = try JSONSerialization.data(withJSONObject: dimensionsArray, options: .prettyPrinted)
|
|
274
|
+
|
|
275
|
+
// JSON 데이터를 문자열로 변환하여 반환
|
|
276
|
+
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
277
|
+
callback([jsonString]) // JSON 문자열을 JavaScript로 전달
|
|
278
|
+
}
|
|
279
|
+
} catch {
|
|
280
|
+
print("JSON 변환 오류: \(error)")
|
|
281
|
+
callback([NSNull()])
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
@objc func getDynamicCommonDimension(_ key: String, callback: @escaping RCTResponseSenderBlock) {
|
|
286
|
+
let dimension = TagWorks.sharedInstance.getDynamicCommonDimension(key: key)
|
|
287
|
+
if let dimension {
|
|
288
|
+
if dimension.type == Dimension.generalType {
|
|
289
|
+
callback([dimension.value])
|
|
290
|
+
} else {
|
|
291
|
+
callback([dimension.numValue])
|
|
292
|
+
}
|
|
293
|
+
} else {
|
|
294
|
+
callback([])
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// @objc func getDynamicCommonDimensionWithString(_ key: String, callback: @escaping RCTResponseSenderBlock) {
|
|
299
|
+
// let dimension = TagWorks.sharedInstance.getDynamicCommonDimension(key: key)
|
|
300
|
+
// if let dimension {
|
|
301
|
+
// callback([dimension.value])
|
|
302
|
+
// } else {
|
|
303
|
+
// callback([])
|
|
304
|
+
// }
|
|
305
|
+
// }
|
|
306
|
+
//
|
|
307
|
+
// @objc func getDynamicCommonDimensionWithDouble(_ key: String, callback: @escaping RCTResponseSenderBlock) {
|
|
308
|
+
// let dimension = TagWorks.sharedInstance.getDynamicCommonDimension(key: key)
|
|
309
|
+
// if let dimension {
|
|
310
|
+
// callback([dimension.numValue])
|
|
311
|
+
// } else {
|
|
312
|
+
// callback([])
|
|
313
|
+
// }
|
|
314
|
+
// }
|
|
172
315
|
|
|
316
|
+
// Dimension 삭제
|
|
173
317
|
@objc func removeCommonDimensionInGeneralType(_ index: Int) {
|
|
174
318
|
TagWorks.sharedInstance.removeCommonDimension(WithType: Dimension.generalType, index: index)
|
|
175
319
|
}
|
|
@@ -185,7 +329,19 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
185
329
|
@objc func removeAllCommonDimension() {
|
|
186
330
|
TagWorks.sharedInstance.removeAllCommonDimension()
|
|
187
331
|
}
|
|
332
|
+
|
|
333
|
+
// -- 동적 파라미터 삭제
|
|
334
|
+
@objc func removeDynamicCommonDimension(_ key: String) {
|
|
335
|
+
TagWorks.sharedInstance.removeDynamicCommonDimension(key: key)
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
@objc func removeDynamicCommonDimensionWithArrayIndex(_ index: Int) {
|
|
339
|
+
TagWorks.sharedInstance.removeDynamicCommonDimensionWithArrayIndex(index)
|
|
340
|
+
}
|
|
188
341
|
|
|
342
|
+
@objc func removeAllDynamicCommonDimension() {
|
|
343
|
+
TagWorks.sharedInstance.removeAllDynamicCommonDimension()
|
|
344
|
+
}
|
|
189
345
|
|
|
190
346
|
// MARK: LogEvent 및 WebInterface 구현
|
|
191
347
|
|
|
@@ -220,14 +376,30 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
220
376
|
genericDimensions = dimension["General"] as! [String: String]
|
|
221
377
|
|
|
222
378
|
for (key, value) in genericDimensions {
|
|
223
|
-
|
|
379
|
+
if TagWorks.sharedInstance.isUseDynamicParameter {
|
|
380
|
+
eventDimensions.append(TagWorks_SDK_iOS.Dimension(key: key, value: value))
|
|
381
|
+
} else {
|
|
382
|
+
if Int(key) != nil {
|
|
383
|
+
eventDimensions.append(TagWorks_SDK_iOS.Dimension(index: Int(key)!, value: value))
|
|
384
|
+
} else {
|
|
385
|
+
eventDimensions.append(TagWorks_SDK_iOS.Dimension(key: key, value: value))
|
|
386
|
+
}
|
|
387
|
+
}
|
|
224
388
|
}
|
|
225
389
|
}
|
|
226
390
|
if dimension["Fact"] != nil {
|
|
227
391
|
factDimensions = dimension["Fact"] as! [String: Any]
|
|
228
392
|
|
|
229
393
|
for (key, value) in factDimensions {
|
|
230
|
-
|
|
394
|
+
if TagWorks.sharedInstance.isUseDynamicParameter {
|
|
395
|
+
eventDimensions.append(TagWorks_SDK_iOS.Dimension(key: key, numValue: Double(value as! String) ?? 0.0))
|
|
396
|
+
} else {
|
|
397
|
+
if Int(key) != nil {
|
|
398
|
+
eventDimensions.append(TagWorks_SDK_iOS.Dimension(index: Int(key)!, numValue: Double(value as! String) ?? 0.0))
|
|
399
|
+
} else {
|
|
400
|
+
eventDimensions.append(TagWorks_SDK_iOS.Dimension(key: key, numValue: Double(value as! String) ?? 0.0))
|
|
401
|
+
}
|
|
402
|
+
}
|
|
231
403
|
}
|
|
232
404
|
}
|
|
233
405
|
}
|
|
@@ -18,25 +18,41 @@ RCT_EXTERN_METHOD(initializeTagWorks:(NSString *)siteId
|
|
|
18
18
|
isManualDispatch:(BOOL)isManualDispatch
|
|
19
19
|
// userAgent:(NSString *)userAgent
|
|
20
20
|
appVersion:(NSString *)appVersion
|
|
21
|
-
appName:(NSString *)appName
|
|
21
|
+
appName:(NSString *)appName
|
|
22
|
+
isUseDynamicParameter:(BOOL)isUseDynamicParameter)
|
|
22
23
|
|
|
23
24
|
RCT_EXTERN_METHOD(setIsDebugPrint:(BOOL)value)
|
|
24
25
|
RCT_EXTERN_METHOD(setLogLevel:(int)level)
|
|
25
26
|
RCT_EXTERN_METHOD(setOptOut:(BOOL)value)
|
|
26
27
|
RCT_EXTERN_METHOD(setUserId:(NSString *)value)
|
|
28
|
+
RCT_EXTERN_METHOD(setAdId:(NSString *)value)
|
|
27
29
|
RCT_EXTERN_METHOD(dispatch:(RCTResponseSenderBlock) callback)
|
|
28
30
|
|
|
29
31
|
RCT_EXTERN_METHOD(setCommonDimensionWithString:(int)index value:(NSString *)value)
|
|
30
32
|
RCT_EXTERN_METHOD(setCommonDimensionWithDouble:(int)index value:(double)value)
|
|
33
|
+
|
|
31
34
|
RCT_EXTERN_METHOD(getCommonDimensions:(RCTResponseSenderBlock) callback)
|
|
32
35
|
RCT_EXTERN_METHOD(getCommonDimensionsOfArrayIndex:(RCTResponseSenderBlock) callback)
|
|
33
36
|
RCT_EXTERN_METHOD(getCommonDimensionWithString:(int)index callback:(RCTResponseSenderBlock) callback)
|
|
34
37
|
RCT_EXTERN_METHOD(getCommonDimensionWithDouble:(int)index callback:(RCTResponseSenderBlock) callback)
|
|
38
|
+
|
|
35
39
|
RCT_EXTERN_METHOD(removeCommonDimensionInGeneralType:(int)index)
|
|
36
40
|
RCT_EXTERN_METHOD(removeCommonDimensionInFactType:(int)index)
|
|
37
41
|
RCT_EXTERN_METHOD(removeCommonDimensionWithArrayIndex:(int)index)
|
|
38
42
|
RCT_EXTERN_METHOD(removeAllCommonDimension)
|
|
39
43
|
|
|
44
|
+
// -- 동적 파라미터
|
|
45
|
+
RCT_EXTERN_METHOD(setDynamicCommonDimensionWithString:(NSString *)key value:(NSString *)value)
|
|
46
|
+
RCT_EXTERN_METHOD(setDynamicCommonDimensionWithDouble:(NSString *)key value:(double)value)
|
|
47
|
+
|
|
48
|
+
RCT_EXTERN_METHOD(getDynamicCommonDimensions:(RCTResponseSenderBlock) callback)
|
|
49
|
+
RCT_EXTERN_METHOD(getDynamicCommonDimensionsOfArrayIndex:(RCTResponseSenderBlock) callback)
|
|
50
|
+
RCT_EXTERN_METHOD(getDynamicCommonDimension:(NSString *)key callback:(RCTResponseSenderBlock) callback)
|
|
51
|
+
|
|
52
|
+
RCT_EXTERN_METHOD(removeDynamicCommonDimension:(NSString *)key)
|
|
53
|
+
RCT_EXTERN_METHOD(removeDynamicCommonDimensionWithArrayIndex:(int)index)
|
|
54
|
+
RCT_EXTERN_METHOD(removeAllDynamicCommonDimension)
|
|
55
|
+
|
|
40
56
|
RCT_EXTERN_METHOD(logEvent:(NSString *)type dataBundleString:(NSString *)dataBundleString callback:(RCTResponseSenderBlock) callback)
|
|
41
57
|
RCT_EXTERN_METHOD(webInterfaceDidReceive:(NSString *) message)
|
|
42
58
|
RCT_EXTERN_METHOD(sendReferrerEventWithOpenUrlString:(NSString *) openURLString)
|
package/package.json
CHANGED
|
@@ -15,8 +15,8 @@ Pod::Spec.new do |s|
|
|
|
15
15
|
s.source = { :git => "http://192.168.20.44:8443/etc/mobile/sdk/tagworks-sdk-v1-react.git", :tag => "#{s.version}" }
|
|
16
16
|
|
|
17
17
|
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
18
|
-
|
|
19
|
-
s.dependency "TagWorks-SDK-iOS"
|
|
18
|
+
s.dependency "TagWorks-SDK-iOS", '~> 1.1.22'
|
|
19
|
+
# s.dependency "TagWorks-SDK-iOS"
|
|
20
20
|
|
|
21
21
|
# Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
|
|
22
22
|
# See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
|