tagworks-sdk-v1-react 1.1.19 → 1.1.21

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.
Files changed (41) hide show
  1. package/README.md +664 -138
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/tagworkssdkv1/DataBundleModule.kt +364 -365
  4. package/android/src/main/java/com/tagworkssdkv1/OnCmsBannerViewManager.kt +83 -0
  5. package/android/src/main/java/com/tagworkssdkv1/TagWorks.kt +37 -0
  6. package/android/src/main/java/com/tagworkssdkv1/TagWorksDeeplinkModule.kt +117 -0
  7. package/android/src/main/java/com/tagworkssdkv1/TagWorksModule.kt +402 -373
  8. package/android/src/main/java/com/tagworkssdkv1/TagWorksPopupModule.kt +56 -0
  9. package/android/src/main/java/com/tagworkssdkv1/TagworksSdkV1Package.kt +7 -2
  10. package/ios/OnCMSBannerViewManagerBridge.m +20 -0
  11. package/ios/OnCmsBannerViewManager.swift +134 -0
  12. package/ios/TagWorksDeeplinkModule.swift +64 -0
  13. package/ios/TagWorksDeeplinkModuleBridge.m +53 -0
  14. package/ios/TagWorksModule.swift +68 -18
  15. package/ios/TagWorksModuleBridge.m +15 -1
  16. package/ios/TagWorksPopupModule.swift +47 -0
  17. package/ios/TagWorksPopupModuleBridge.m +15 -0
  18. package/lib/commonjs/TagWorksDeeplink.js +48 -0
  19. package/lib/commonjs/TagWorksDeeplink.js.map +1 -0
  20. package/lib/commonjs/index.js +21 -7
  21. package/lib/commonjs/index.js.map +1 -1
  22. package/lib/module/TagWorksDeeplink.js +44 -0
  23. package/lib/module/TagWorksDeeplink.js.map +1 -0
  24. package/lib/module/index.js +11 -8
  25. package/lib/module/index.js.map +1 -1
  26. package/lib/typescript/commonjs/babel.config.d.ts +2 -0
  27. package/lib/typescript/commonjs/babel.config.d.ts.map +1 -0
  28. package/lib/typescript/commonjs/src/TagWorksDeeplink.d.ts +23 -0
  29. package/lib/typescript/commonjs/src/TagWorksDeeplink.d.ts.map +1 -0
  30. package/lib/typescript/commonjs/src/index.d.ts +8 -2
  31. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  32. package/lib/typescript/module/babel.config.d.ts +2 -0
  33. package/lib/typescript/module/babel.config.d.ts.map +1 -0
  34. package/lib/typescript/module/src/TagWorksDeeplink.d.ts +23 -0
  35. package/lib/typescript/module/src/TagWorksDeeplink.d.ts.map +1 -0
  36. package/lib/typescript/module/src/index.d.ts +8 -2
  37. package/lib/typescript/module/src/index.d.ts.map +1 -1
  38. package/package.json +7 -4
  39. package/src/TagWorksDeeplink.js +45 -0
  40. package/src/{index.tsx → index.js} +11 -5
  41. package/tagworks-sdk-v1-react.podspec +9 -3
@@ -0,0 +1,56 @@
1
+ package com.tagworkssdkv1
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
5
+ import com.facebook.react.bridge.ReactMethod
6
+ import com.obzen.tagworks.TagWorksPopup
7
+
8
+ class TagWorksPopupModule(reactApplicationContext: ReactApplicationContext) :
9
+ ReactContextBaseJavaModule(reactApplicationContext) {
10
+ override fun getName(): String {
11
+ return "TagWorksPopupModule"
12
+
13
+ }
14
+
15
+
16
+ @ReactMethod
17
+ fun onCMSPopup(
18
+ onCmsUrl: String,
19
+ custId: String?,
20
+ rcmdAreaCd: String
21
+ ) {
22
+ val currentActivity = reactApplicationContext.currentActivity ?: return
23
+
24
+ TagWorksPopup.onCMSPopup(
25
+ onCmsUrl,
26
+ custId,
27
+ rcmdAreaCd,
28
+ currentActivity
29
+ )
30
+ }
31
+
32
+ // @ReactMethod
33
+ // fun onCMSPopupBanner(
34
+ // onCmsUrl: String,
35
+ // custId: String?,
36
+ // rcmdAreaCd: String,
37
+ // viewId: Int
38
+ // ) {
39
+ //
40
+ // val activity = reactApplicationContext.currentActivity ?: return
41
+ // val bannerView = currentActivity?.findViewById<ViewGroup>(viewId) ?: return
42
+ //
43
+ //
44
+ // TagWorksPopup.onCMSPopupBanner(
45
+ // onCmsUrl = onCmsUrl,
46
+ // cust_id = custId,
47
+ // rcmd_area_cd = rcmdAreaCd,
48
+ // bannerView = bannerView,
49
+ // context = activity,
50
+ // defaultImage = R.drawable.default_img // 기본 이미지 지정
51
+ // )
52
+ //
53
+ // }
54
+
55
+
56
+ }
@@ -9,10 +9,15 @@ import com.facebook.react.uimanager.ViewManager
9
9
  class TagworksSdkV1Package : ReactPackage {
10
10
  override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
11
11
  // return listOf(TagworksSdkV1Module(reactContext))
12
- return listOf(TagworksSdkV1Module(reactContext), DataBundleModule(reactContext), TagWorksModule(reactContext), StandardEventModule(reactContext))
12
+ return listOf(TagworksSdkV1Module(reactContext),
13
+ TagWorksPopupModule(reactContext),
14
+ DataBundleModule(reactContext),
15
+ TagWorksModule(reactContext),
16
+ StandardEventModule(reactContext),
17
+ TagWorksDeeplinkModule(reactContext))
13
18
  }
14
19
 
15
20
  override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
16
- return emptyList()
21
+ return listOf(OnCmsBannerViewManager())
17
22
  }
18
23
  }
@@ -0,0 +1,20 @@
1
+ //
2
+ // OnCMSBannerViewManagerBridge.m
3
+ // tagworks-sdk-v1-react
4
+ //
5
+ // Created by obzen on 4/18/25.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <React/RCTViewManager.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(OnCmsBannerViewManager, RCTViewManager)
12
+
13
+ RCT_EXPORT_VIEW_PROPERTY(onCmsUrl, NSString)
14
+ RCT_EXPORT_VIEW_PROPERTY(rcmd_area_cd, NSString)
15
+ RCT_EXPORT_VIEW_PROPERTY(cust_id, NSString)
16
+ RCT_EXPORT_VIEW_PROPERTY(defaultImage, NSString)
17
+
18
+ //RCT_EXTERN_METHOD(setOnCmsBannerParam:(NSNumber *) reactTag url:(NSString *)url custId:(NSString *)custId areaCd:(NSString *)areaCd defaultImage:(NSString *)defaultImage)
19
+
20
+ @end
@@ -0,0 +1,134 @@
1
+ //
2
+ // OnCmsBannerViewManager.swift
3
+ // tagworks-sdk-v1-react
4
+ //
5
+ // Created by obzen on 4/17/25.
6
+ //
7
+
8
+ import Foundation
9
+ import TagWorks_SDK_iOS
10
+
11
+ @objc(OnCmsBannerViewManager)
12
+ class OnCmsBannerViewManager: RCTViewManager {
13
+
14
+ override static func requiresMainQueueSetup() -> Bool {
15
+ return true
16
+ }
17
+
18
+ override func view() -> UIView! {
19
+ return OnCmsBannerView()
20
+ }
21
+
22
+ // @objc func setOnCmsBannerParam(_ reactTag: NSNumber, url: String, custId: String, areaCd: String, defaultImage: String) {
23
+ // DispatchQueue.main.async {
24
+ // guard let view = self.bridge.uiManager.view(forReactTag: reactTag) as? OnCmsBannerView else {
25
+ // return
26
+ // }
27
+ //
28
+ // view.onCMSPopupBanner(onCmsUrl: url, custId: custId, rcmdAreaCd: areaCd, defaultImage: defaultImage)
29
+ // }
30
+ // }
31
+ }
32
+
33
+
34
+ class OnCmsBannerView: UIView {
35
+
36
+ private var onCmsUrlProp: String = ""
37
+ private var custIdProp: String?
38
+ private var rcmdAreaCdProp: String = ""
39
+ private var defaultImageProp: String = ""
40
+
41
+ private var shouldAttachBanner = false
42
+
43
+ override init(frame: CGRect) {
44
+ super.init(frame: frame)
45
+ self.backgroundColor = .clear
46
+ }
47
+
48
+ required init?(coder: NSCoder) {
49
+ fatalError("init(coder:) has not been implemented")
50
+ }
51
+
52
+ override func layoutSubviews() {
53
+ super.layoutSubviews()
54
+ print("layout Size : \(self.frame.size)")
55
+
56
+ if shouldAttachBanner && self.frame.size != .zero {
57
+ attachBanner()
58
+ shouldAttachBanner = false // 한 번만 실행되도록
59
+ }
60
+ }
61
+
62
+ private var isReady: Bool {
63
+ // return !onCmsUrlProp.isEmpty && !rcmdAreaCdProp.isEmpty && !custIdProp.isEmpty
64
+ // return !onCmsUrlProp.isEmpty && !rcmdAreaCdProp.isEmpty
65
+ return true
66
+ }
67
+
68
+ @objc var onCmsUrl: NSString = "" {
69
+ didSet {
70
+ onCmsUrlProp = onCmsUrl as String
71
+ checkAndAttach()
72
+ }
73
+ }
74
+
75
+ @objc var rcmd_area_cd: String = "" {
76
+ didSet {
77
+ rcmdAreaCdProp = rcmd_area_cd
78
+ checkAndAttach()
79
+ }
80
+ }
81
+
82
+ @objc var cust_id: String = "" {
83
+ didSet {
84
+ custIdProp = cust_id
85
+ checkAndAttach()
86
+ }
87
+ }
88
+
89
+ @objc var defaultImage: String = "" {
90
+ didSet {
91
+ defaultImageProp = defaultImage
92
+ checkAndAttach()
93
+ }
94
+ }
95
+
96
+ private func checkAndAttach() {
97
+ if isReady {
98
+ // attachBanner()
99
+ shouldAttachBanner = true
100
+ setNeedsLayout() // layoutSubviews 호출 유도
101
+ }
102
+ }
103
+
104
+ private func attachBanner() {
105
+ // guard !onCmsUrlProp.isEmpty, !rcmdAreaCdProp.isEmpty else {
106
+ // return
107
+ // }
108
+
109
+ // TagWorks SDK가 제공하는 iOS 메서드 사용
110
+ TagWorksPopup.sharedInstance.onCMSPopupBanner(onCmsUrl: onCmsUrlProp,
111
+ cust_id: custIdProp ?? "",
112
+ rcmd_area_cd: rcmdAreaCdProp,
113
+ bannerView: self,
114
+ defaultPngImageName: defaultImageProp)
115
+ }
116
+
117
+
118
+
119
+
120
+ // public func onCMSPopupBanner(onCmsUrl: String, custId: String, rcmdAreaCd: String, defaultImage: String) {
121
+ // guard !onCmsUrl.isEmpty, !rcmdAreaCd.isEmpty, !custId.isEmpty else {
122
+ // return
123
+ // }
124
+ //
125
+ // // TagWorks SDK가 제공하는 iOS 메서드 사용
126
+ // TagWorksPopup.sharedInstance.onCMSPopupBanner(onCmsUrl: onCmsUrl,
127
+ // cust_id: custId,
128
+ // rcmd_area_cd: rcmdAreaCd,
129
+ // bannerView: self,
130
+ // defaultPngImageName: defaultImage)
131
+ // }
132
+
133
+
134
+ }
@@ -0,0 +1,64 @@
1
+ //
2
+ // TagWorksDeeplinkModule.swift
3
+ // TagWorks_SDK_React
4
+ //
5
+ // Created by obzen on 09/01/25.
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+ import TagWorks_SDK_iOS
11
+
12
+ @objc(TagWorksDeeplinkModule)
13
+ // class TagWorksDeeplinkModule: NSObject, RCTBridgeModule {
14
+ class TagWorksDeeplinkModule: RCTEventEmitter {
15
+
16
+ private var hasDeeplinkListener: Bool = false
17
+
18
+ static override func moduleName() -> String {
19
+ return "TagWorksDeeplinkModule"
20
+ }
21
+
22
+ // 네이티브 모듈에서 사용할 상수값을 반환하는 함수
23
+ @objc static override func requiresMainQueueSetup() -> Bool {
24
+ return true
25
+ }
26
+
27
+ // MARK: Deeplink Interface
28
+
29
+ // iOS는 스위즐링을 통해 앱 실행 중 들어오는 딥링크는 자동 감지하기에, cold start로 들어오는 딥링크 정보만을 처리..
30
+ @objc func handleDeeplinkUrl(_ url: String) {
31
+ TagWorks.sharedInstance.launchWithOptions(url: URL(string: url), userInfo: nil)
32
+ }
33
+
34
+ // iOS는 디퍼드 딥링크 체크를 setInstanceConfig() 메서드에서 진행하기 때문에 따로 메서드를 구현하지 않고 인터페이스만 생성함. (혹시 모를 사이드 이펙트를 방지하기 위함)
35
+ @objc func handleDeferredDeeplink() {
36
+
37
+ }
38
+
39
+
40
+ // MARK: 딥링크 콜백 관련 이벤트 Emitter
41
+ // ================================
42
+ override func supportedEvents() -> [String]! {
43
+ return ["TagWorks_DeeplinkEvent"]
44
+ }
45
+
46
+ override func startObserving() {
47
+ hasDeeplinkListener = true
48
+ // SDK 콜백 등록
49
+ TagWorks.sharedInstance.registerDeeplinkCallback { isTagWorksDeeplink, deeplinkURL in
50
+ if self.hasDeeplinkListener {
51
+ self.sendEvent(withName: "TagWorks_DeeplinkEvent", body: [
52
+ "isTagWorksDeeplink": isTagWorksDeeplink,
53
+ "deeplinkURL": deeplinkURL.absoluteString
54
+ ])
55
+ }
56
+ }
57
+ }
58
+
59
+ override func stopObserving() {
60
+ hasDeeplinkListener = false
61
+ }
62
+
63
+ // ================================
64
+ }
@@ -0,0 +1,53 @@
1
+ //
2
+ // TagWorksDeeplinkModuleBridge.m
3
+ // TagWorks_SDK_React
4
+ //
5
+ // Created by obzen on 09/01/25.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <React/RCTBridgeModule.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(TagWorksDeeplinkModule, NSObject)
12
+
13
+ RCT_EXTERN_METHOD(handleDeeplinkUrl:(NSString *) url)
14
+ RCT_EXTERN_METHOD(handleDeferredDeeplink)
15
+
16
+ //RCT_EXTERN_METHOD(setLogLevel:(int)level)
17
+ //RCT_EXTERN_METHOD(setOptOut:(BOOL)value)
18
+ //RCT_EXTERN_METHOD(setUserId:(NSString *)value)
19
+ //RCT_EXTERN_METHOD(setAdId:(NSString *)value)
20
+ //RCT_EXTERN_METHOD(dispatch:(RCTResponseSenderBlock) callback)
21
+ //
22
+ //RCT_EXTERN_METHOD(setCommonDimensionWithString:(int)index value:(NSString *)value)
23
+ //RCT_EXTERN_METHOD(setCommonDimensionWithDouble:(int)index value:(double)value)
24
+ //
25
+ //RCT_EXTERN_METHOD(getCommonDimensions:(RCTResponseSenderBlock) callback)
26
+ //RCT_EXTERN_METHOD(getCommonDimensionsOfArrayIndex:(RCTResponseSenderBlock) callback)
27
+ //RCT_EXTERN_METHOD(getCommonDimensionWithString:(int)index callback:(RCTResponseSenderBlock) callback)
28
+ //RCT_EXTERN_METHOD(getCommonDimensionWithDouble:(int)index callback:(RCTResponseSenderBlock) callback)
29
+ //
30
+ //RCT_EXTERN_METHOD(removeCommonDimensionInGeneralType:(int)index)
31
+ //RCT_EXTERN_METHOD(removeCommonDimensionInFactType:(int)index)
32
+ //RCT_EXTERN_METHOD(removeCommonDimensionWithArrayIndex:(int)index)
33
+ //RCT_EXTERN_METHOD(removeAllCommonDimension)
34
+ //
35
+ //// -- 동적 파라미터
36
+ //RCT_EXTERN_METHOD(setDynamicCommonDimensionWithString:(NSString *)key value:(NSString *)value)
37
+ //RCT_EXTERN_METHOD(setDynamicCommonDimensionWithDouble:(NSString *)key value:(double)value)
38
+ //
39
+ //RCT_EXTERN_METHOD(getDynamicCommonDimensions:(RCTResponseSenderBlock) callback)
40
+ //RCT_EXTERN_METHOD(getDynamicCommonDimensionsOfArrayIndex:(RCTResponseSenderBlock) callback)
41
+ //RCT_EXTERN_METHOD(getDynamicCommonDimension:(NSString *)key callback:(RCTResponseSenderBlock) callback)
42
+ //
43
+ //RCT_EXTERN_METHOD(removeDynamicCommonDimension:(NSString *)key)
44
+ //RCT_EXTERN_METHOD(removeDynamicCommonDimensionWithArrayIndex:(int)index)
45
+ //RCT_EXTERN_METHOD(removeAllDynamicCommonDimension)
46
+ //
47
+ //RCT_EXTERN_METHOD(logEvent:(NSString *)type dataBundleString:(NSString *)dataBundleString callback:(RCTResponseSenderBlock) callback)
48
+ //RCT_EXTERN_METHOD(webInterfaceDidReceive:(NSString *) message)
49
+ //RCT_EXTERN_METHOD(sendReferrerEventWithOpenUrlString:(NSString *) openURLString)
50
+ //
51
+ //RCT_EXTERN_METHOD(saveErrorReport:(NSString *)errorType errorMessage:(NSString *)errorMessage)
52
+
53
+ @end
@@ -11,6 +11,9 @@ import TagWorks_SDK_iOS
11
11
 
12
12
  @objc(TagWorksModule)
13
13
  class TagWorksModule: NSObject, RCTBridgeModule {
14
+ // class TagWorksModule: RCTEventEmitter {
15
+
16
+ private var hasDeeplinkListener: Bool = false
14
17
 
15
18
  static func moduleName() -> String {
16
19
  return "TagWorksModule"
@@ -22,7 +25,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
22
25
  }
23
26
 
24
27
  // MARK: 이벤트 상수 선언
25
- // @objc static func constantsToExport() -> [AnyHashable: Any]! {
28
+ // @objc static func constantsToExport() -> [AnyHashable: Any]! {
26
29
  @objc func constantsToExport() -> [AnyHashable: Any]! {
27
30
  // 상수값을 반환합니다. JavaScript로 전달됩니다.
28
31
  return [
@@ -30,7 +33,9 @@ class TagWorksModule: NSObject, RCTBridgeModule {
30
33
  "EVENT_TYPE_USER_EVENT": "EVENT_TYPE_USER_EVENT",
31
34
  ]
32
35
  }
33
- // userAgent: String? = nil,
36
+
37
+ //=================================
38
+
34
39
  // MARK: SDK 초기화
35
40
  @objc func initializeTagWorks(_ siteId: String,
36
41
  baseUrl: String,
@@ -47,7 +52,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
47
52
  isUseIntervals: isUseIntervals,
48
53
  dispatchInterval: dispatchInterval,
49
54
  sessionTimeOut: sessionTimeOut,
50
- // userAgent: userAgent,
55
+ // userAgent: userAgent,
51
56
  userAgent: nil,
52
57
  isManualDispatch: isManualDispatch,
53
58
  appVersion: appVersion,
@@ -55,10 +60,41 @@ class TagWorksModule: NSObject, RCTBridgeModule {
55
60
  isUseDynamicParameter: isUseDynamicParameter)
56
61
  }
57
62
 
63
+ @objc func initializeTagWorks(_ siteId: String,
64
+ baseUrl: String,
65
+ isUseIntervals: Bool,
66
+ dispatchIntervalWithSeconds: TimeInterval = 3.0,
67
+ sessionTimeOutWithSeconds: TimeInterval = 5.0,
68
+ isManualDispatch: Bool = false,
69
+ appVersion: String? = nil,
70
+ appName: String? = nil,
71
+ isUseDynamicParameter: Bool = true,
72
+ deeplinkServerUrl: String? = nil) {
73
+
74
+ let deepLinkServerUrl: URL?
75
+ if let deeplinkServerUrlString = deeplinkServerUrl {
76
+ deepLinkServerUrl = URL(string: deeplinkServerUrlString)
77
+ } else {
78
+ deepLinkServerUrl = nil
79
+ }
80
+
81
+ TagWorks.sharedInstance.setInstanceConfig(siteId: siteId,
82
+ baseUrl: URL(string: baseUrl)!,
83
+ isUseIntervals: isUseIntervals,
84
+ dispatchIntervalWithSeconds: dispatchIntervalWithSeconds,
85
+ sessionTimeOutWithSeconds: sessionTimeOutWithSeconds,
86
+ isManualDispatch: isManualDispatch,
87
+ appVersion: appVersion,
88
+ appName: appName,
89
+ isUseDynamicParameter: isUseDynamicParameter,
90
+ isEnabledAdId: false,
91
+ deeplinkServerUrl: deepLinkServerUrl)
92
+ }
93
+
58
94
  @objc func setIsDebugPrint(_ value: Bool) {
59
95
  TagWorks.sharedInstance.isDebugLogPrint = value
60
96
  }
61
-
97
+
62
98
  @objc func setLogLevel(_ level: Int) {
63
99
  if level <= 3 {
64
100
  TagWorks.sharedInstance.isDebugLogPrint = true
@@ -74,11 +110,19 @@ class TagWorksModule: NSObject, RCTBridgeModule {
74
110
  @objc func setUserId(_ value: String) {
75
111
  TagWorks.sharedInstance.userId = value
76
112
  }
77
-
113
+
78
114
  @objc func setAdId(_ value: String) {
79
115
  TagWorks.sharedInstance.adId = value
80
116
  }
81
117
 
118
+ @objc func setAutoTrackingPage(_ value: Bool) {
119
+ TagWorks.sharedInstance.autoTrackingPage = value
120
+ }
121
+
122
+ @objc func isInitialize() -> Bool {
123
+ return TagWorks.sharedInstance.isInitialize()
124
+ }
125
+
82
126
  @objc public func dispatch(_ callback: @escaping RCTResponseSenderBlock) {
83
127
  let result = TagWorks.sharedInstance.dispatch()
84
128
  callback([result])
@@ -94,13 +138,13 @@ class TagWorksModule: NSObject, RCTBridgeModule {
94
138
  removeCommonDimensionInFactType(index)
95
139
  TagWorks.sharedInstance.setCommonDimension(index: index, numValue: value)
96
140
  }
97
-
141
+
98
142
  // -- 동적 파라미터
99
143
  @objc func setDynamicCommonDimensionWithString(_ key: String, value: String) {
100
144
  removeDynamicCommonDimension(key)
101
145
  TagWorks.sharedInstance.setDynamicCommonDimension(key: key, value: value)
102
146
  }
103
-
147
+
104
148
  @objc func setDynamicCommonDimensionWithDouble(_ key: String, value: Double) {
105
149
  removeDynamicCommonDimension(key)
106
150
  TagWorks.sharedInstance.setDynamicCommonDimension(key: key, numValue: value)
@@ -124,7 +168,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
124
168
  if dimension.index == -1 {
125
169
  factDimensions[dimension.key] = String(dimension.numValue)
126
170
  } else {
127
- factDimensions[String(dimension.index)] = String(dimension.numValue)
171
+ factDimensions[String(dimension.index)] = String(dimension.numValue)
128
172
  }
129
173
  }
130
174
  }
@@ -170,7 +214,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
170
214
  dimensionsArray.append(dim)
171
215
  }
172
216
  }
173
-
217
+
174
218
  do {
175
219
  // Dictionary Array를 JSON으로 변환
176
220
  let jsonData = try JSONSerialization.data(withJSONObject: dimensionsArray, options: .prettyPrinted)
@@ -202,7 +246,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
202
246
  callback([])
203
247
  }
204
248
  }
205
-
249
+
206
250
  // -- 동적 파라미터
207
251
  @objc func getDynamicCommonDimensions(_ callback: @escaping RCTResponseSenderBlock) {
208
252
  var dictDimensions: [String: Any] = [:]
@@ -224,7 +268,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
224
268
  }
225
269
  }
226
270
  }
227
-
271
+
228
272
  dictDimensions["Dimensions"] = dynamicDimensions
229
273
 
230
274
  do {
@@ -240,11 +284,11 @@ class TagWorksModule: NSObject, RCTBridgeModule {
240
284
  callback([NSNull()])
241
285
  }
242
286
  }
243
-
287
+
244
288
  /// key 값에 맞춰서 리턴
245
289
  @objc func getDynamicCommonDimensionsOfArrayIndex(_ callback: @escaping RCTResponseSenderBlock) {
246
290
  var dimensionsArray: [[String:String]] = []
247
- // var dictDimensions: [String:String] = [:]
291
+ // var dictDimensions: [String:String] = [:]
248
292
  let commonDimensions = TagWorks.sharedInstance.getCommonDimensions()
249
293
 
250
294
  for dimension in commonDimensions {
@@ -266,7 +310,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
266
310
  dimensionsArray.append(dim)
267
311
  }
268
312
  }
269
-
313
+
270
314
  do {
271
315
  // Dictionary Array를 JSON으로 변환
272
316
  let jsonData = try JSONSerialization.data(withJSONObject: dimensionsArray, options: .prettyPrinted)
@@ -280,7 +324,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
280
324
  callback([NSNull()])
281
325
  }
282
326
  }
283
-
327
+
284
328
  @objc func getDynamicCommonDimension(_ key: String, callback: @escaping RCTResponseSenderBlock) {
285
329
  let dimension = TagWorks.sharedInstance.getDynamicCommonDimension(key: key)
286
330
  if let dimension {
@@ -304,20 +348,20 @@ class TagWorksModule: NSObject, RCTBridgeModule {
304
348
  }
305
349
 
306
350
  @objc func removeCommonDimensionWithArrayIndex(_ index: Int) {
307
- TagWorks.sharedInstance.removeCommonDimensionWithArrayIndex(index)
351
+ TagWorks.sharedInstance.removeCommonDimensionWithArrayIndex(index)
308
352
  }
309
353
 
310
354
  @objc func removeAllCommonDimension() {
311
355
  TagWorks.sharedInstance.removeAllCommonDimension()
312
356
  }
313
-
357
+
314
358
  // -- 동적 파라미터 삭제
315
359
  @objc func removeDynamicCommonDimension(_ key: String) {
316
360
  TagWorks.sharedInstance.removeDynamicCommonDimension(key: key)
317
361
  }
318
362
 
319
363
  @objc func removeDynamicCommonDimensionWithArrayIndex(_ index: Int) {
320
- TagWorks.sharedInstance.removeDynamicCommonDimensionWithArrayIndex(index)
364
+ TagWorks.sharedInstance.removeDynamicCommonDimensionWithArrayIndex(index)
321
365
  }
322
366
 
323
367
  @objc func removeAllDynamicCommonDimension() {
@@ -405,6 +449,8 @@ class TagWorksModule: NSObject, RCTBridgeModule {
405
449
  if dictionary.keys.contains("e_a") {
406
450
  if dictionary["e_a"] as! String == "obzen" {
407
451
  TagWorks.sharedInstance.webViewInterface.webInterfaceDidReceiveDictionary(dictionary)
452
+ } else if dictionary["e_a"] as! String == "obzenoncms" {
453
+ TagWorks.sharedInstance.webViewInterface.webInterfaceDidReceiveOnCmsPopupDictionary(dictionary)
408
454
  }
409
455
  }
410
456
  }
@@ -418,4 +464,8 @@ class TagWorksModule: NSObject, RCTBridgeModule {
418
464
  guard let urlString = URL(string: openURLString) else { return }
419
465
  TagWorks.sharedInstance.sendReferrerEvent(openURL: urlString)
420
466
  }
467
+
468
+ @objc func saveErrorReport(_ errorType: String, errorMessage: String) {
469
+ TagWorks.sharedInstance.saveErrorReport(errorType: errorType, errorMessage: errorMessage)
470
+ }
421
471
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  #import <Foundation/Foundation.h>
9
9
  #import <React/RCTBridgeModule.h>
10
+ #import <React/RCTEventEmitter.h>
10
11
 
11
12
  @interface RCT_EXTERN_MODULE(TagWorksModule, NSObject)
12
13
 
@@ -16,16 +17,27 @@ RCT_EXTERN_METHOD(initializeTagWorks:(NSString *)siteId
16
17
  dispatchInterval:(NSTimeInterval)dispatchInterval
17
18
  sessionTimeOut:(NSTimeInterval)sessionTimeOut
18
19
  isManualDispatch:(BOOL)isManualDispatch
19
- // userAgent:(NSString *)userAgent
20
20
  appVersion:(NSString *)appVersion
21
21
  appName:(NSString *)appName
22
22
  isUseDynamicParameter:(BOOL)isUseDynamicParameter)
23
+
24
+ RCT_EXTERN_METHOD(initializeTagWorks:(NSString *)siteId
25
+ baseUrl:(NSString *)baseUrl
26
+ isUseIntervals:(BOOL)isUseIntervals
27
+ dispatchIntervalWithSeconds:(NSTimeInterval)dispatchIntervalWithSeconds
28
+ sessionTimeOutWithSeconds:(NSTimeInterval)sessionTimeOutWithSeconds
29
+ isManualDispatch:(BOOL)isManualDispatch
30
+ appVersion:(NSString *)appVersion
31
+ appName:(NSString *)appName
32
+ isUseDynamicParameter:(BOOL)isUseDynamicParameter
33
+ deeplinkServerUrl:(NSString *)deeplinkServerUrl)
23
34
 
24
35
  RCT_EXTERN_METHOD(setIsDebugPrint:(BOOL)value)
25
36
  RCT_EXTERN_METHOD(setLogLevel:(int)level)
26
37
  RCT_EXTERN_METHOD(setOptOut:(BOOL)value)
27
38
  RCT_EXTERN_METHOD(setUserId:(NSString *)value)
28
39
  RCT_EXTERN_METHOD(setAdId:(NSString *)value)
40
+ RCT_EXTERN_METHOD(setAutoTrackingPage:(BOOL)value)
29
41
  RCT_EXTERN_METHOD(dispatch:(RCTResponseSenderBlock) callback)
30
42
 
31
43
  RCT_EXTERN_METHOD(setCommonDimensionWithString:(int)index value:(NSString *)value)
@@ -57,6 +69,8 @@ RCT_EXTERN_METHOD(logEvent:(NSString *)type dataBundleString:(NSString *)dataBun
57
69
  RCT_EXTERN_METHOD(webInterfaceDidReceive:(NSString *) message)
58
70
  RCT_EXTERN_METHOD(sendReferrerEventWithOpenUrlString:(NSString *) openURLString)
59
71
 
72
+ RCT_EXTERN_METHOD(saveErrorReport:(NSString *)errorType errorMessage:(NSString *)errorMessage)
73
+
60
74
  @end
61
75
 
62
76
 
@@ -0,0 +1,47 @@
1
+ //
2
+ // TagWorksPopupModule.swift
3
+ // tagworks-sdk-v1-react
4
+ //
5
+ // Created by obzen on 4/17/25.
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+ import TagWorks_SDK_iOS
11
+
12
+ @objc(TagWorksPopupModule)
13
+ class TagWorksPopupModule: NSObject, RCTBridgeModule {
14
+
15
+ static func moduleName() -> String {
16
+ return "TagWorksPopupModule"
17
+ }
18
+
19
+ // 네이티브 모듈에서 사용할 상수값을 반환하는 함수
20
+ @objc static func requiresMainQueueSetup() -> Bool {
21
+ return true
22
+ }
23
+
24
+ @objc public func onCMSPopup(_ onCmsUrl: String, custId: String, rcmdAreaCd: String) {
25
+ DispatchQueue.main.async {
26
+ guard var currentViewController = UIApplication.shared.delegate?.window??.rootViewController else {
27
+ return
28
+ }
29
+
30
+ while let presented = currentViewController.presentedViewController {
31
+ currentViewController = presented
32
+ }
33
+
34
+
35
+ // TagWorksPopup.sharedInstance.onCMSPopup(onCmsUrl: onCmsUrl,
36
+ // cust_id: custId,
37
+ // rcmd_area_cd: rcmdAreaCd,
38
+ // owner: currentViewController)
39
+ // Survey 테스트
40
+ TagWorksPopup.sharedInstance.onCMSPopup(onCmsUrl: "https://dxlab.obzen.com/oncms",
41
+ cntn_id: "BUZURWbe",
42
+ cust_id: "C0000000001",
43
+ rcmd_area_cd: "SURV_AREA_1",
44
+ owner: currentViewController)
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,15 @@
1
+ //
2
+ // TagWorksPopupModuleBridge.m
3
+ // tagworks-sdk-v1-react
4
+ //
5
+ // Created by obzen on 4/17/25.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <React/RCTBridgeModule.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(TagWorksPopupModule, NSObject)
12
+
13
+ RCT_EXTERN_METHOD(onCMSPopup:(NSString *)onCmsUrl custId:(NSString *)custId rcmdAreaCd:(NSString *)rcmdAreaCd);
14
+
15
+ @end