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.
- package/README.md +664 -138
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/tagworkssdkv1/DataBundleModule.kt +364 -365
- package/android/src/main/java/com/tagworkssdkv1/OnCmsBannerViewManager.kt +83 -0
- package/android/src/main/java/com/tagworkssdkv1/TagWorks.kt +37 -0
- package/android/src/main/java/com/tagworkssdkv1/TagWorksDeeplinkModule.kt +117 -0
- package/android/src/main/java/com/tagworkssdkv1/TagWorksModule.kt +402 -373
- package/android/src/main/java/com/tagworkssdkv1/TagWorksPopupModule.kt +56 -0
- package/android/src/main/java/com/tagworkssdkv1/TagworksSdkV1Package.kt +7 -2
- package/ios/OnCMSBannerViewManagerBridge.m +20 -0
- package/ios/OnCmsBannerViewManager.swift +134 -0
- package/ios/TagWorksDeeplinkModule.swift +64 -0
- package/ios/TagWorksDeeplinkModuleBridge.m +53 -0
- package/ios/TagWorksModule.swift +68 -18
- package/ios/TagWorksModuleBridge.m +15 -1
- package/ios/TagWorksPopupModule.swift +47 -0
- package/ios/TagWorksPopupModuleBridge.m +15 -0
- package/lib/commonjs/TagWorksDeeplink.js +48 -0
- package/lib/commonjs/TagWorksDeeplink.js.map +1 -0
- package/lib/commonjs/index.js +21 -7
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/TagWorksDeeplink.js +44 -0
- package/lib/module/TagWorksDeeplink.js.map +1 -0
- package/lib/module/index.js +11 -8
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/babel.config.d.ts +2 -0
- package/lib/typescript/commonjs/babel.config.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TagWorksDeeplink.d.ts +23 -0
- package/lib/typescript/commonjs/src/TagWorksDeeplink.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +8 -2
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/babel.config.d.ts +2 -0
- package/lib/typescript/module/babel.config.d.ts.map +1 -0
- package/lib/typescript/module/src/TagWorksDeeplink.d.ts +23 -0
- package/lib/typescript/module/src/TagWorksDeeplink.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +8 -2
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +7 -4
- package/src/TagWorksDeeplink.js +45 -0
- package/src/{index.tsx → index.js} +11 -5
- 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),
|
|
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
|
|
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
|
package/ios/TagWorksModule.swift
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|