tagworks-sdk-v1-react 1.1.3 → 1.1.5
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 +430 -12
- package/android/build.gradle +2 -1
- package/android/src/main/java/com/tagworkssdkv1/DataBundleModule.kt +75 -23
- package/android/src/main/java/com/tagworkssdkv1/TagWorksModule.kt +39 -33
- package/android/src/main/java/com/tagworkssdkv1/TagworksSdkV1Package.kt +3 -1
- package/ios/TagWorksModule.swift +5 -2
- package/ios/TagWorksModuleBridge.m +1 -1
- package/lib/commonjs/index.js +2 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +2 -20
- package/src/index.tsx +3 -2
package/README.md
CHANGED
|
@@ -1,33 +1,451 @@
|
|
|
1
|
-
|
|
1
|
+
<img src="https://capsule-render.vercel.app/api?type=Waving&color=A2A4A2&height=150§ion=header&text=TagWorks-SDK-React-Native&fontSize=45" />
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
2
8
|
|
|
3
9
|
TagWorks SDK React Native Library
|
|
4
10
|
|
|
5
|
-
##
|
|
11
|
+
## 목차
|
|
12
|
+
- [Installation](#installation)
|
|
13
|
+
- [1. npm을 통한 설치](#1-npm을-통한-설치)
|
|
14
|
+
- [2. 직접 설치](#2-직접-설치)
|
|
15
|
+
- [SDK 초기화](#sdk-초기화)
|
|
16
|
+
- [클래스 선언](#클래스-선언)
|
|
17
|
+
- [초기화](#초기화)
|
|
18
|
+
- [사용자 설정](#사용자-설정)
|
|
19
|
+
- [데이터 구성](#데이터-구성)
|
|
20
|
+
- [Dimension](#dimension)
|
|
21
|
+
- [공용 Dimension](#공용-dimension)
|
|
22
|
+
- [DataBundleModule](#databundlemodule)
|
|
23
|
+
- [DataBundleModule 클래스의 key 값으로 사용 가능한 파라미터](#databundlemodule-클래스의-key-값으로-사용-가능한-파라미터)
|
|
24
|
+
- [EVENT\_TAG\_NAME 에 대응하는 값으로 사용할 수 있는 Standard 이벤트](#event_tag_name-에-대응하는-값으로-사용할-수-있는-standard-이벤트)
|
|
25
|
+
- [DataBundleModule 초기화](#databundlemodule-초기화)
|
|
26
|
+
- [DataBundleModule 파라미터 설정](#databundlemodule-파라미터-설정)
|
|
27
|
+
- [DataBundleModule 개별 디멘젼 설정](#databundlemodule-개별-디멘젼-설정)
|
|
28
|
+
- [로그 전송](#로그-전송)
|
|
29
|
+
- [Web View 연동](#web-view-연동)
|
|
30
|
+
- [딥링크 (유입 경로 추적)](#딥링크-유입-경로-추적)
|
|
31
|
+
- [License](#license)
|
|
32
|
+
|
|
33
|
+
<br>
|
|
34
|
+
<br>
|
|
35
|
+
|
|
36
|
+
## Requirements
|
|
37
|
+
|
|
38
|
+
- 최소 iOS 지원 버전 : 15.1
|
|
39
|
+
- 최소 Android Sdk 버전 : 21
|
|
40
|
+
- 최소 Jdk 버전 : 11
|
|
41
|
+
- Kotlin 버전 : 1.7.0
|
|
42
|
+
- Build Gradle 버전 : 7.5
|
|
43
|
+
|
|
44
|
+
<br>
|
|
45
|
+
<br>
|
|
46
|
+
|
|
47
|
+
# Installation
|
|
48
|
+
|
|
49
|
+
## 1. npm을 통한 설치
|
|
50
|
+
|
|
51
|
+
- 해당 프로젝트의 루트 디렉토리에 설치
|
|
6
52
|
|
|
7
53
|
```sh
|
|
8
|
-
npm install tagworks-sdk-v1
|
|
54
|
+
npm install tagworks-sdk-v1-react
|
|
9
55
|
```
|
|
10
56
|
|
|
11
|
-
|
|
57
|
+
- iOS Dependency 설치
|
|
58
|
+
|
|
59
|
+
iOS 폴더로 이동 후 podfile을 통해 Dependency 설치
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
cd ios
|
|
63
|
+
pod install
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- Android Dependency 설치
|
|
67
|
+
|
|
68
|
+
Android Dependency는 Gradle을 통해 자동으로 설치되나, Dependency 연결을 위해 android 폴더 내부의 app/build.gradle 파일 내부 repositories에 maven 경로 추가
|
|
69
|
+
|
|
70
|
+
```groovy
|
|
71
|
+
repositories {
|
|
72
|
+
...
|
|
73
|
+
mavenCentral()
|
|
74
|
+
maven { url "https://support.obzen.com/nexus/repository/releases/" }
|
|
75
|
+
}
|
|
76
|
+
```
|
|
12
77
|
|
|
78
|
+
<br>
|
|
13
79
|
|
|
80
|
+
## 2. 직접 설치
|
|
81
|
+
|
|
82
|
+
별도의 iOS/Android 플랫폼별 SDK 설치 가이드 참조 (개발팀 문의)
|
|
83
|
+
|
|
84
|
+
<br>
|
|
85
|
+
<br>
|
|
86
|
+
|
|
87
|
+
# SDK 초기화
|
|
88
|
+
|
|
89
|
+
## 클래스 선언
|
|
90
|
+
NativeModules 를 이용하여, TagWorks SDK 사용을 위한 클래스 선언
|
|
91
|
+
|
|
92
|
+
> **JavaScript**
|
|
14
93
|
```js
|
|
15
|
-
import {
|
|
94
|
+
import { NativeModules } from 'react-native';
|
|
95
|
+
...
|
|
96
|
+
const { TagWorksModule, DataBundleModule, StandardEventModule } = NativeModules;
|
|
97
|
+
```
|
|
98
|
+
<br>
|
|
99
|
+
|
|
16
100
|
|
|
17
|
-
|
|
101
|
+
## 초기화
|
|
18
102
|
|
|
19
|
-
|
|
103
|
+
- TagWorks SDK 인스턴스를 초기화 하기 이전에 SDK 설정값들을 지정합니다.
|
|
104
|
+
|
|
105
|
+
| 옵션 | 타입 | 기본값 | 설명 |
|
|
106
|
+
| ------------------ | ------- | ------ | ---------------------------------------------------------------------------- |
|
|
107
|
+
| siteId | string | null | 행동 정보 수집 대상 사이트 식별자 |
|
|
108
|
+
| baseUrl | string | null | 행동 정보 데이터 수집 서버 url 주소 |
|
|
109
|
+
| isUseIntervals | boolean | false | interval 사용 여부, false 일 경우 dispatchInterval 값이 무시되고 항상 즉시 발송된다. |
|
|
110
|
+
| dispatchInterval | long | 3 | 행동 정보 데이터 발송 주기 (초단위, <b>최소 3초, 최대 10초 설정) |
|
|
111
|
+
| sessionTimeOut | long | 5 | 행동 정보 데이터 수집 서버의 연결 대기 시간 (초단위, <b>최소 3초, 최대 60초 설정) |
|
|
112
|
+
| isManualDispatch | boolean | false | 행동 정보 데이터 수동 발송 여부 |
|
|
113
|
+
| appVersion | string | null | Application 버전 정보, 설정하지 않을 경우 내부 Application 버전 정보 전송 |
|
|
114
|
+
| appName | string | null | Application 이름, 설정하지 않을 경우 내부 Application 이름 전송 |
|
|
115
|
+
|
|
116
|
+
- **siteId** 및 **baseUrl** 을 설정하지 않는 경우 SDK 초기화 과정에서 오류가 발생합니다.
|
|
117
|
+
- **isUseIntervals** 값을 false로 설정할 경우에는 dispatchInterval 값이 무시되고 항상 즉시 발송됩니다. <br>true로 설정할 경우에는 dispatchInterval 값에 지정된 초를 주기로 데이터를 발송합니다.
|
|
118
|
+
- **dispatchInterval** 은 큐에 저장된 행동 정보 데이터를 지정한 초만큼 주기로 발송하기 때문에, 지정한 시간 사이에 어플리케이션이 종료되는 경우 발송 할 수 없으니 적절한 시간으로 지정해야 합니다.
|
|
119
|
+
- manualDispatch 값을 true 로 설정한 경우에는, 명시적으로 dispatch() 함수를 호출해야만 이벤트가 발송됩니다.
|
|
120
|
+
- TagWorks SDK 인스턴스를 초기화 하기 위해서는 TagWorksModule 클래스를 이용합니다.
|
|
121
|
+
- TagWorks SDK 인스턴스는 **싱글톤 클래스**로 유지 되기 때문에 최초 초기화 한번으로 전역에서 호출 가능합니다.
|
|
122
|
+
<br>
|
|
123
|
+
|
|
124
|
+
> **JavaScript**
|
|
125
|
+
```js
|
|
126
|
+
TagWorksModule.initializeTagWorks(
|
|
127
|
+
'발급받은 사이트 ID', // siteId
|
|
128
|
+
'서버 URL', // baseUrl
|
|
129
|
+
false, // isUseIntervals
|
|
130
|
+
3, // dispatchInterval
|
|
131
|
+
5, // sessionTimeOut
|
|
132
|
+
false, // isManualDispatch
|
|
133
|
+
null, // appVersion
|
|
134
|
+
null, // appName
|
|
135
|
+
);
|
|
20
136
|
```
|
|
21
137
|
|
|
138
|
+
<br/>
|
|
139
|
+
|
|
140
|
+
## 사용자 설정
|
|
141
|
+
|
|
142
|
+
- TagWorks SDK 초기화 이후 TagWorksModule 클래스를 통해 행동 데이터 수집 대상이 되는 사용자를 설정하고 수집 여부를 지정합니다.
|
|
143
|
+
|
|
144
|
+
| 옵션 | 타입 | 기본값 | 설명 |
|
|
145
|
+
| ---------- | ------- | --------------- | ------------------------------------------------------------------------- |
|
|
146
|
+
| userId | string | null | 수집 대상 고객 식별자 (사용자 계정) |
|
|
147
|
+
| optOut | boolean | false | 행동 정보 데이터 수집 여부 (true로 지정하면 수집하지 않음) |
|
|
148
|
+
| logLevel | int | 4 | 출력할 SDK 로그 레벨 설정 (2: VERBOSE, 3: DEBUG, 4: INFO, 5: WARN, 6: ERROR) |
|
|
22
149
|
|
|
23
|
-
|
|
150
|
+
<br/>
|
|
151
|
+
|
|
152
|
+
> **JavaScript**
|
|
153
|
+
```js
|
|
154
|
+
// SDK 디버그 용도 로그 출력
|
|
155
|
+
TagWorksModule.setLogLevel(3);
|
|
156
|
+
|
|
157
|
+
// 고객이 설정한 개인정보 수집 여부에 따라 수집 여부 지정
|
|
158
|
+
// 로그인을 완료한 사용자의 개인정보 수집여부를 판단하여 행동데이터의 수집 여부를 지정합니다.
|
|
159
|
+
// 이벤트 전송 제어 용도로도 사용 가능합니다.
|
|
160
|
+
TagWorksModule.setOptOut(false);
|
|
161
|
+
|
|
162
|
+
// 수집 대상자 고객 식별자 지정
|
|
163
|
+
// 고객 로그인 완료에 따라 수집 대상자 고객 식별자를 지정합니다.
|
|
164
|
+
TagWorksModule.setUserId(loginId);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
<br>
|
|
168
|
+
<br>
|
|
169
|
+
|
|
170
|
+
# 데이터 구성
|
|
171
|
+
서버로 전송할 이벤트 정의 데이터를 구성합니다.
|
|
172
|
+
|
|
173
|
+
## Dimension
|
|
174
|
+
|
|
175
|
+
- 디멘젼은 Tagworks SDK를 통해 로그 발송 시 사용자 행동 정보를 수집하는 데이터 정보입니다.
|
|
176
|
+
- <span style="color: #6ba455">공용 디멘젼</span>은 한번 설정하면 일반 디멘젼과 함께 로그 발송 시 전달이 되며, TagWorks SDK 인스턴스에 할당이 되어 삭제를 하지 않는 한 계속 정보를 가지고 있습니다.
|
|
177
|
+
- <span style="color: #6ba455">일반 디멘젼</span>은 로그 발송 시 파라미터로 전달이 되는 DataBundle 객체에 담기는 행동 정보로, 일반적으로 지역 변수로 처리 시 로그 전송 후 정보가 초기화되어 사라집니다.
|
|
178
|
+
- 로그 전송 시 <span style="color: #6ba455">항상 전달이 되어야 하는 정보들은 보통 공용 디멘젼에 할당을 하여 사용하며, 일회성으로 사용하는 정보들은 일반 디멘젼 사용 하시는 것을 권고</span>드립니다.
|
|
179
|
+
- 해당 디멘젼 관련 내용은 iOS/Android 동일합니다.
|
|
180
|
+
- 문자형과 숫자형 두 개의 타입 중 원하는 타입을 선택하여 사용할 수 있습니다. (숫자형은 수치데이터 정보를 이용한 통계 목적으로 사용 가능)
|
|
181
|
+
- key & value 형태로 값을 지정할 수 있으며, key 부분에는 <span style="color: #6ba455">숫자형 index</span>를 사용합니다.
|
|
182
|
+
- 입력하는 index 값은 TagManager 제품에서 정의된 값으로 프로젝트 진행시 전달받을 수 있습니다.
|
|
183
|
+
- index는 문자형과 숫자형에서 중복이 될 수는 있지만, 각각 타입에서 index가 중복으로 사용되면 기존 index에 값이 할당되니 유의하시기 바랍니다.
|
|
184
|
+
|
|
185
|
+
<br/>
|
|
186
|
+
|
|
187
|
+
## 공용 Dimension
|
|
188
|
+
|
|
189
|
+
- 공용 Dimension은 수집 로그 전송 시 공통적으로 전송해야 할 데이터를 설정하는 용도로 사용합니다.
|
|
190
|
+
- 공용 Dimension에서 사용된 index에 다른 Dimension을 덮어쓰지 않는 이상 한 번 설정된 공용 Dimension은 계속 유지됩니다.
|
|
191
|
+
- setCommonDimension() 함수를 사용하여 공용 Dimension 항목을 계속 추가할 수 있습니다.
|
|
192
|
+
- getCommonDimension() 함수를 사용하여 공용 Dimension 항목들을 가져올 수 있습니다.
|
|
193
|
+
|
|
194
|
+
<br/>
|
|
195
|
+
|
|
196
|
+
> **TypeScript**
|
|
197
|
+
```js
|
|
198
|
+
//
|
|
199
|
+
// Set
|
|
200
|
+
//
|
|
201
|
+
|
|
202
|
+
// Dimension - String Type
|
|
203
|
+
TagWorksModule.setCommonDimensionWithString(1, "계좌조회");
|
|
204
|
+
|
|
205
|
+
// Dimension - Numeric Type (Double형)
|
|
206
|
+
TagWorksModule.setCommonDimensionWithDouble(2, 30000.0);
|
|
207
|
+
```
|
|
208
|
+
```js
|
|
209
|
+
//
|
|
210
|
+
// Get
|
|
211
|
+
//
|
|
212
|
+
|
|
213
|
+
// 타입별로 index 키를 가지고 해당 값을 리턴
|
|
214
|
+
// - return : String or Double
|
|
215
|
+
TagWorksModule.getDimensionWithString(1, (value: any) => {
|
|
216
|
+
console.log(value);
|
|
217
|
+
});
|
|
218
|
+
TagWorksModule.getDimensionWithDouble(2, (value: any) => {
|
|
219
|
+
console.log(value);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// GeneralType(String)과 FactType(Double) 별로 리턴
|
|
223
|
+
// - return : JSONString
|
|
224
|
+
TagWorksModule.getCommonDimensions((jsonString: any) => {
|
|
225
|
+
console.log('Received CommonDimensions String:', jsonString);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// 공용 Dimension 정보를 가지고 있는 Array의 Index 순으로 리턴
|
|
229
|
+
// - return : JSONString
|
|
230
|
+
TagWorksModule.getCommonDimensionsOfArrayIndex((jsonString: any) => {
|
|
231
|
+
// JSON 문자열을 객체로 파싱
|
|
232
|
+
const parsedData = JSON.parse(jsonString);
|
|
233
|
+
console.log('Received Dimensions ArrayIndex String:', parsedData);
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
```js
|
|
237
|
+
//
|
|
238
|
+
// Delete
|
|
239
|
+
//
|
|
240
|
+
|
|
241
|
+
// 타입별 index 키를 가지고 삭제
|
|
242
|
+
TagWorksModule.removeDimensionInGeneralType(1);
|
|
243
|
+
TagWorksModule.removeDimensionInFactType(2);
|
|
244
|
+
|
|
245
|
+
// 공용 Dimension 정보를 가지고 있는 Array의 Index를 이용해 삭제
|
|
246
|
+
TagWorksModule.removeCommonDimensionWithArrayIndex(0);
|
|
247
|
+
|
|
248
|
+
// 모든 공용 Dimension을 삭제
|
|
249
|
+
TagWorksModule.removeAllDimension();
|
|
250
|
+
```
|
|
24
251
|
|
|
25
|
-
|
|
252
|
+
<br/>
|
|
253
|
+
|
|
254
|
+
## DataBundleModule
|
|
255
|
+
- 이벤트 전송을 하기 위해 필요한 정보들을 담는 클래스로 기본 파라미터 및 Dimension 정보를 쉽게 관리할 수 있습니다.
|
|
256
|
+
- DataBundle 객체는 key와 value의 집합으로 구성됩니다.
|
|
257
|
+
- 이벤트 이름 Key에 대응하는 값으로는 기본 Standard 이벤트 값을 사용하거나, 사용자 정의 String 값을 직접 입력할 수 있습니다.
|
|
258
|
+
- <mark>기본적으로 EVENT_TAG_NAME 값을 설정하지 않는 경우, 로그 전송이 이루어지지 않습니다.</mark>
|
|
259
|
+
- setDimension 메소드를 이용하여 Dimension 객체를 DataBundle 내부에 추가하여 사용할 수 있습니다.
|
|
260
|
+
|
|
261
|
+
<br/>
|
|
262
|
+
|
|
263
|
+
### DataBundleModule 클래스의 key 값으로 사용 가능한 파라미터
|
|
264
|
+
|
|
265
|
+
| 파라미터 (키) | 타입 | 설명 |
|
|
266
|
+
| -------------------------------| ------ | --------------------------------------- |
|
|
267
|
+
| EVENT_TAG_NAME | string | 이벤트 이름 |
|
|
268
|
+
| EVENT_TAG_PARAM_TITLE | string | 화면 타이틀 |
|
|
269
|
+
| EVENT_TAG_PARAM_PAGE_PATH | string | 화면 경로 |
|
|
270
|
+
| EVENT_TAG_PARAM_KEYWORD | string | 검색어 |
|
|
271
|
+
| EVENT_TAG_PARAM_CUSTOM_PATH | string | 사용자 정의 경로 - 추가 분석을 위한 경로 |
|
|
272
|
+
|
|
273
|
+
<br/>
|
|
274
|
+
|
|
275
|
+
### <span style="color: #6ba455">EVENT_TAG_NAME</span> 에 대응하는 값으로 사용할 수 있는 Standard 이벤트
|
|
276
|
+
|
|
277
|
+
| EVENT_TAG_NAME | 설명 |
|
|
278
|
+
| -------------- | -------------------- |
|
|
279
|
+
| PAGE_VIEW | 페이지뷰 이벤트 |
|
|
280
|
+
| CLICK | 클릭 이벤트 |
|
|
281
|
+
| SCROLL | 화면 스크롤 이벤트 |
|
|
282
|
+
| DOWNLOAD | 파일 다운로드 이벤트 |
|
|
283
|
+
| OUT_LINK | 링크 이동 이벤트 |
|
|
284
|
+
| SEARCH | 검색 이벤트 |
|
|
285
|
+
| ERROR | 오류 발생 이벤트 |
|
|
286
|
+
| REFERRER | 유입 경로 이벤트 |
|
|
287
|
+
|
|
288
|
+
<br/>
|
|
289
|
+
|
|
290
|
+
### DataBundleModule 초기화
|
|
291
|
+
|
|
292
|
+
> **JavaScript**
|
|
293
|
+
|
|
294
|
+
```js
|
|
295
|
+
// DataBundleModule을 사용하기 위해 필요한 초기화
|
|
296
|
+
DataBundleModule.initialize();
|
|
297
|
+
|
|
298
|
+
// JSON String을 이용해 초기화
|
|
299
|
+
// 기존의 DdataBundleModule의 설정 값을 JSON String으로 저장 후 해당 String을 이용해 빠르게 초기화 할때 사용
|
|
300
|
+
DataBundleModule.initDataBundle(bundleString);
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### DataBundleModule 파라미터 설정
|
|
304
|
+
|
|
305
|
+
> **JavaScript**
|
|
306
|
+
|
|
307
|
+
```js
|
|
308
|
+
// 이벤트 이름 - Standard 이벤트 or 사용자 정의 이벤트명
|
|
309
|
+
DataBundleModule.putString(DataBundleModule.EVENT_TAG_NAME, StandardEventModule.PAGE_VIEW);
|
|
310
|
+
// 화면(뷰) 타이틀
|
|
311
|
+
DataBundleModule.putString(DataBundleModule.EVENT_TAG_PARAM_TITLE, "계좌조회");
|
|
312
|
+
// 화면 경로
|
|
313
|
+
DataBundleModule.putString(DataBundleModule.EVENT_TAG_PARAM_PAGE_PATH, "home/bank/계좌관리");
|
|
314
|
+
// 검색어
|
|
315
|
+
DataBundleModule.putString(DataBundleModule.EVENT_TAG_PARAM_KEYWORD, "search keywork!");
|
|
316
|
+
// 사용자 정의 url
|
|
317
|
+
DataBundleModule.putString(DataBundleModule.EVENT_TAG_PARAM_CUSTOM_PATH, "/bank/Account");
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### DataBundleModule 개별 디멘젼 설정
|
|
321
|
+
|
|
322
|
+
> **TypeScript**
|
|
323
|
+
```js
|
|
324
|
+
//
|
|
325
|
+
// Set
|
|
326
|
+
//
|
|
327
|
+
|
|
328
|
+
// Dimension - String Type
|
|
329
|
+
DataBundleModule.putDimensionWithString(11, "나의계좌");
|
|
330
|
+
|
|
331
|
+
// Dimension - Numeric Type (Double형)
|
|
332
|
+
DataBundleModule.putDimensionWithDouble(12, 10000);
|
|
333
|
+
```
|
|
334
|
+
```js
|
|
335
|
+
//
|
|
336
|
+
// Get
|
|
337
|
+
//
|
|
338
|
+
|
|
339
|
+
// 타입별로 index 키를 가지고 해당 값을 리턴
|
|
340
|
+
// - return : String or Double
|
|
341
|
+
DataBundleModule.getDimensionWithString(1, (value: any) => {
|
|
342
|
+
console.log(value);
|
|
343
|
+
});
|
|
344
|
+
DataBundleModule.getDimensionWithDouble(2, (value: any) => {
|
|
345
|
+
console.log(value);
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
// GeneralType(String)과 FactType(Double) 별로 리턴
|
|
349
|
+
// - return : JSONString
|
|
350
|
+
DataBundleModule.getDimensions((jsonString: any) => {
|
|
351
|
+
console.log('Received Dimensions String:', jsonString);
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
// 개별 Dimension 정보를 가지고 있는 Array의 Index 순으로 리턴
|
|
355
|
+
// - return : JSONString
|
|
356
|
+
DataBundleModule.getDimensionsOfArrayIndex((jsonString: any) => {
|
|
357
|
+
// JSON 문자열을 객체로 파싱
|
|
358
|
+
const parsedData = JSON.parse(jsonString);
|
|
359
|
+
console.log('Received Dimensions ArrayIndex String:', parsedData);
|
|
360
|
+
});
|
|
361
|
+
```
|
|
362
|
+
```js
|
|
363
|
+
//
|
|
364
|
+
// Delete
|
|
365
|
+
//
|
|
366
|
+
|
|
367
|
+
// 타입별 index 키를 가지고 삭제
|
|
368
|
+
DataBundleModule.removeDimensionInGeneralType(11);
|
|
369
|
+
DataBundleModule.removeDimensionInFactType(22);
|
|
370
|
+
|
|
371
|
+
// 개별 Dimension 정보를 가지고 있는 Array의 Index를 이용해 삭제
|
|
372
|
+
DataBundleModule.removeDimensionWithArrayIndex(0);
|
|
373
|
+
|
|
374
|
+
// 모든 개별 Dimension을 삭제
|
|
375
|
+
DataBundleModule.removeAllDimension();
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
<br>
|
|
379
|
+
<br>
|
|
380
|
+
|
|
381
|
+
# 로그 전송
|
|
382
|
+
|
|
383
|
+
- logEvent() 함수를 호출하여 로그를 전송합니다.
|
|
384
|
+
- 로그 타입에는 페이지뷰, 유저 이벤트 두 가지 타입이 존재합니다.
|
|
385
|
+
- 로그 타입이 TagWorks.EVENT_TYPE_PAGE 인 경우
|
|
386
|
+
- `EVENT_TAG_NAME 값이 StandardEvent.PAGE_VIEW 인 경우, EVENT_TAG_PARAM_PAGE_PATH 값은 필수 파라미터입니다.`
|
|
387
|
+
- 로그 타입이 TagWorks.EVENT_TYPE_USER_EVENT 인 경우
|
|
388
|
+
- `EVENT_TAG_NAME 값이 StandardEvent.SEARCH 인 경우, EVENT_TAG_PARAM_KEYWORD 값은 필수 파라미터입니다.`
|
|
389
|
+
- 앞서 설정한 DataBundleModule 로부터 설정 상태를 JSON String으로 받아와 파라미터로 전송
|
|
390
|
+
|
|
391
|
+
<br>
|
|
392
|
+
|
|
393
|
+
>**TypeScript**
|
|
394
|
+
```js
|
|
395
|
+
DataBundleModule.getDataBundle((bundleString: any) => {
|
|
396
|
+
console.log('Received Dictionary String:', bundleString);
|
|
397
|
+
|
|
398
|
+
TagWorksModule.logEvent(TagWorksModule.EVENT_TYPE_PAGE, bundleString, (result: any) => {
|
|
399
|
+
console.log(result)
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
<br>
|
|
405
|
+
<br>
|
|
406
|
+
|
|
407
|
+
# Web View 연동
|
|
408
|
+
|
|
409
|
+
- Web / App 연동을 위한 interface 를 제공합니다.
|
|
410
|
+
- 앱에서 Tag Manager Code Snippet 이 포함된 웹뷰를 실행하면, 웹뷰에서 발생된 이벤트는 SDK를 통하여 앱으로 전송됩니다.
|
|
411
|
+
- WebView의 onMessage 내부에 TagWorksModule의 webInterfaceDidReceive() 함수 호출이 필요합니다.
|
|
412
|
+
- 로그인 시 사용자 맵핑을 위해 로그인 시점에 userId 설정하는 부분과 App에서 설정한 Dimension 값을 WebView에서 사용하기 위해 쿠키를<br>
|
|
413
|
+
설정하는 부분에 있어 부분적인 대응 개발이 필요할 수 있습니다.
|
|
414
|
+
|
|
415
|
+
>**TypeScript**
|
|
416
|
+
```js
|
|
417
|
+
<WebView
|
|
418
|
+
...
|
|
419
|
+
onMessage={(event: any) => {
|
|
420
|
+
const message = event.nativeEvent.data;
|
|
421
|
+
console.log("Received message: ", message);
|
|
422
|
+
TagWorksModule.webInterfaceDidReceive(message);
|
|
423
|
+
}}
|
|
424
|
+
/>
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
<br>
|
|
428
|
+
<br>
|
|
429
|
+
|
|
430
|
+
# 딥링크 (유입 경로 추적)
|
|
431
|
+
|
|
432
|
+
- Referrer 정보가 포함되어 있는 URL로 부터 앱이 실행이 된 경우, 해당 Referrer 정보를 서버로 수집이 가능합니다.
|
|
433
|
+
- 앱에서 해당 URL 정보를 받아오는 함수 내부에 다음과 같은 TagWorksModule 인터페이스를 호출합니다.
|
|
434
|
+
|
|
435
|
+
<br>
|
|
436
|
+
|
|
437
|
+
>**TypeScript**
|
|
438
|
+
```js
|
|
439
|
+
TagWorksModule.sendReferrerEventWithOpenUrlString(<referrerURL>);
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
<br>
|
|
443
|
+
<br>
|
|
26
444
|
|
|
27
|
-
|
|
445
|
+
# License
|
|
28
446
|
|
|
29
|
-
|
|
447
|
+
Apache 2.0
|
|
30
448
|
|
|
31
449
|
---
|
|
32
450
|
|
|
33
|
-
Made with [
|
|
451
|
+
Made with [Obzen Inc.](https://www.obzen.com)
|
package/android/build.gradle
CHANGED
|
@@ -98,7 +98,8 @@ dependencies {
|
|
|
98
98
|
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
99
99
|
//noinspection GradleDynamicVersion
|
|
100
100
|
implementation "com.facebook.react:react-native:+"
|
|
101
|
+
// implementation "com.facebook.react:react-android:0.71.0"
|
|
101
102
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
102
|
-
implementation
|
|
103
|
+
implementation "com.obzen.tagworks:tagworks-v1-kotlin:1.1.18"
|
|
103
104
|
}
|
|
104
105
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.
|
|
1
|
+
package com.tagworks_sdk_react
|
|
2
2
|
|
|
3
3
|
import android.util.Log
|
|
4
4
|
import com.facebook.react.bridge.Arguments
|
|
@@ -24,14 +24,64 @@ class DataBundleModule(context: ReactApplicationContext):ReactContextBaseJavaMod
|
|
|
24
24
|
/**
|
|
25
25
|
* DataBundle 초기화 함수
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
27
|
@ReactMethod
|
|
30
|
-
fun
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
override fun initialize() {
|
|
29
|
+
super.initialize()
|
|
30
|
+
eventData.dataBundle.clear()
|
|
31
|
+
eventData.dimensions.clear()
|
|
33
32
|
}
|
|
34
33
|
|
|
34
|
+
@ReactMethod
|
|
35
|
+
fun initDataBundle(jsonString: String?) {
|
|
36
|
+
initialize()
|
|
37
|
+
Logger.d(TAG, "DataBundle initialize from : $jsonString")
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
val jsonObject = JSONObject(jsonString)
|
|
41
|
+
|
|
42
|
+
val dataDictionary = jsonObject.optJSONObject("dataDictionary")
|
|
43
|
+
if (dataDictionary != null) {
|
|
44
|
+
val keys = dataDictionary.keys()
|
|
45
|
+
while (keys.hasNext()) {
|
|
46
|
+
val key = keys.next()
|
|
47
|
+
val value = dataDictionary.getString(key)
|
|
48
|
+
eventData.dataBundle.putString(key,value)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
val eventDimensions = jsonObject.optJSONArray("eventDimensions")
|
|
53
|
+
if (eventDimensions != null) {
|
|
54
|
+
for (i in 0 until eventDimensions.length()) {
|
|
55
|
+
val dimensionObject = eventDimensions.getJSONObject(i)
|
|
56
|
+
|
|
57
|
+
val general = dimensionObject.optJSONObject("General")
|
|
58
|
+
if (general != null) {
|
|
59
|
+
val keys = general.keys()
|
|
60
|
+
while (keys.hasNext()) {
|
|
61
|
+
val key = keys.next()
|
|
62
|
+
val value = general.getString(key)
|
|
63
|
+
eventData.setDimension(key.toInt(),value)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
val fact = dimensionObject.optJSONObject("Fact")
|
|
68
|
+
if (fact != null) {
|
|
69
|
+
val keys = fact.keys()
|
|
70
|
+
while (keys.hasNext()) {
|
|
71
|
+
val key = keys.next()
|
|
72
|
+
val value = fact.getString(key)
|
|
73
|
+
eventData.setDimension(key.toInt(), value.toDouble())
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}catch (e: Exception) {
|
|
80
|
+
e.printStackTrace()
|
|
81
|
+
println("Error parsing JSON: ${e.message}")
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
35
85
|
/**
|
|
36
86
|
* DataBundle putString() 함수 - 개별
|
|
37
87
|
*/
|
|
@@ -87,34 +137,36 @@ class DataBundleModule(context: ReactApplicationContext):ReactContextBaseJavaMod
|
|
|
87
137
|
fun getDimensions(callback: Callback) {
|
|
88
138
|
try {
|
|
89
139
|
|
|
90
|
-
val
|
|
91
|
-
val
|
|
140
|
+
val generalDimensions = JSONObject()
|
|
141
|
+
val factDimensions = JSONObject()
|
|
92
142
|
|
|
93
143
|
eventData.dimensions.forEach { dimension ->
|
|
94
144
|
when (dimension.type) {
|
|
95
|
-
DimensionType.GENERAL_TYPE ->
|
|
96
|
-
DimensionType.FACT_TYPE ->
|
|
145
|
+
DimensionType.GENERAL_TYPE -> generalDimensions.put(dimension.index.toString(),dimension.value)
|
|
146
|
+
DimensionType.FACT_TYPE -> factDimensions.put(dimension.index.toString(),dimension.numValue)
|
|
97
147
|
}
|
|
98
148
|
}
|
|
99
149
|
|
|
100
|
-
val generalWrapper =
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
val factWrapper = Arguments.createMap()
|
|
104
|
-
factWrapper.putMap("Fact",factMap)
|
|
150
|
+
val generalWrapper = JSONObject().apply {
|
|
151
|
+
put("General", generalDimensions)
|
|
152
|
+
}
|
|
105
153
|
|
|
106
|
-
val
|
|
107
|
-
|
|
108
|
-
|
|
154
|
+
val factWrapper = JSONObject().apply {
|
|
155
|
+
put("Fact", factDimensions)
|
|
156
|
+
}
|
|
109
157
|
|
|
158
|
+
val dimensionsArray = JSONArray().apply {
|
|
159
|
+
put(generalWrapper)
|
|
160
|
+
put(factWrapper)
|
|
161
|
+
}
|
|
110
162
|
|
|
111
|
-
val result =
|
|
112
|
-
|
|
163
|
+
val result = JSONObject().apply {
|
|
164
|
+
put("Dimensions", dimensionsArray)
|
|
165
|
+
}
|
|
113
166
|
|
|
114
|
-
|
|
115
|
-
callback.invoke(
|
|
167
|
+
val jsonString = result.toString(4)
|
|
168
|
+
callback.invoke(jsonString)
|
|
116
169
|
} catch (e: Exception) {
|
|
117
|
-
// 오류 처리
|
|
118
170
|
e.printStackTrace()
|
|
119
171
|
callback.invoke(null)
|
|
120
172
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.
|
|
1
|
+
package com.tagworks_sdk_react
|
|
2
2
|
|
|
3
3
|
import android.util.Log
|
|
4
4
|
import com.facebook.react.bridge.Arguments
|
|
@@ -45,7 +45,7 @@ class TagWorksModule(reactContext: ReactApplicationContext):ReactContextBaseJava
|
|
|
45
45
|
.setSiteId(siteId)
|
|
46
46
|
.setBaseUrl(baseUrl)
|
|
47
47
|
.setDispatchInterval(dispatchInterval.toLong())
|
|
48
|
-
.setSessionTimeOut(sessionTimeout.toLong())
|
|
48
|
+
.setSessionTimeOut(sessionTimeout.toLong() * 1000)
|
|
49
49
|
.setAppVersion(appVersion)
|
|
50
50
|
.setAppName(appName)
|
|
51
51
|
.setManualDispatch(isManualDispatch)
|
|
@@ -128,31 +128,36 @@ class TagWorksModule(reactContext: ReactApplicationContext):ReactContextBaseJava
|
|
|
128
128
|
try {
|
|
129
129
|
val commonDimensions = TagWorks.getInstance().getDimensions()
|
|
130
130
|
|
|
131
|
-
val
|
|
132
|
-
val
|
|
131
|
+
val generalDimensions = JSONObject()
|
|
132
|
+
val factDimensions = JSONObject()
|
|
133
133
|
|
|
134
134
|
commonDimensions.forEach { dimension ->
|
|
135
135
|
when (dimension.type) {
|
|
136
|
-
DimensionType.GENERAL_TYPE ->
|
|
137
|
-
DimensionType.FACT_TYPE ->
|
|
136
|
+
DimensionType.GENERAL_TYPE -> generalDimensions.put(dimension.index.toString(),dimension.value)
|
|
137
|
+
DimensionType.FACT_TYPE -> factDimensions.put(dimension.index.toString(),dimension.numValue)
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
val generalWrapper =
|
|
142
|
-
|
|
141
|
+
val generalWrapper = JSONObject().apply {
|
|
142
|
+
put("General", generalDimensions)
|
|
143
|
+
}
|
|
143
144
|
|
|
144
|
-
val factWrapper =
|
|
145
|
-
|
|
145
|
+
val factWrapper = JSONObject().apply {
|
|
146
|
+
put("Fact", factDimensions)
|
|
147
|
+
}
|
|
146
148
|
|
|
147
|
-
val dimensionsArray =
|
|
148
|
-
|
|
149
|
-
|
|
149
|
+
val dimensionsArray = JSONArray().apply {
|
|
150
|
+
put(generalWrapper)
|
|
151
|
+
put(factWrapper)
|
|
152
|
+
}
|
|
150
153
|
|
|
154
|
+
val result = JSONObject().apply {
|
|
155
|
+
put("Dimensions", dimensionsArray)
|
|
156
|
+
}
|
|
151
157
|
|
|
152
|
-
val
|
|
153
|
-
result.putArray("Dimensions", dimensionsArray)
|
|
158
|
+
val jsonString = result.toString(4)
|
|
154
159
|
|
|
155
|
-
callback.invoke(
|
|
160
|
+
callback.invoke(jsonString)
|
|
156
161
|
} catch (e: Exception) {
|
|
157
162
|
// 오류 처리
|
|
158
163
|
e.printStackTrace()
|
|
@@ -275,31 +280,32 @@ class TagWorksModule(reactContext: ReactApplicationContext):ReactContextBaseJava
|
|
|
275
280
|
@ReactMethod
|
|
276
281
|
fun webInterfaceDidReceive(jsonEventString: String) {
|
|
277
282
|
d(MessageHandlerName,jsonEventString)
|
|
278
|
-
Log.d("TAG", "TagWorksWebEvent: ${jsonEventString}")
|
|
279
283
|
try {
|
|
280
|
-
d(name, jsonEventString)
|
|
281
284
|
val jsonObj = JSONObject(jsonEventString)
|
|
282
285
|
|
|
283
|
-
val
|
|
284
|
-
|
|
285
|
-
val urlref = if (jsonObj.isNull("urlref")) null else jsonObj.getString("urlref")
|
|
286
|
-
var eventCategory = if (jsonObj.isNull("e_c")) null else jsonObj.getString("e_c")
|
|
286
|
+
val sender = if (jsonObj.isNull("e_a")) null else jsonObj.getString("e_a")
|
|
287
|
+
if ( sender == "obzen") {
|
|
287
288
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
289
|
+
val idSite = if (jsonObj.isNull("idsite")) null else jsonObj.getString("idsite")
|
|
290
|
+
val url = if (jsonObj.isNull("url")) null else jsonObj.getString("url")
|
|
291
|
+
val urlref = if (jsonObj.isNull("urlref")) null else jsonObj.getString("urlref")
|
|
292
|
+
var eventCategory = if (jsonObj.isNull("e_c")) null else jsonObj.getString("e_c")
|
|
292
293
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
if (eventCategory != null) {
|
|
295
|
+
eventCategory =
|
|
296
|
+
eventCategory.replace("{{vstor_id}}", TagWorks.getInstance().getVisitorId())
|
|
297
|
+
}
|
|
296
298
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
299
|
+
if (idSite != null && idSite != TagWorks.getInstance().getSiteId()) {
|
|
300
|
+
Logger.i(MessageHandlerName, "WebView siteid is not equal App siteid!!")
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
TagWorks.getInstance().webInterfaceLogEventPush(
|
|
304
|
+
idSite, url, urlref, eventCategory
|
|
305
|
+
)
|
|
306
|
+
}
|
|
300
307
|
|
|
301
308
|
} catch (t: Throwable) {
|
|
302
|
-
Logger.e(MessageHandlerName,t.message);
|
|
303
309
|
Logger.e(MessageHandlerName, "Could not parse malformed JSON: \"$jsonEventString\"");
|
|
304
310
|
}
|
|
305
311
|
}
|
|
@@ -4,12 +4,14 @@ import com.facebook.react.ReactPackage
|
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
6
|
import com.facebook.react.uimanager.ViewManager
|
|
7
|
+
import com.tagworks_sdk_react.DataBundleModule
|
|
8
|
+
import com.tagworks_sdk_react.TagWorksModule
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
class TagworksSdkV1Package : ReactPackage {
|
|
10
12
|
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
11
13
|
// return listOf(TagworksSdkV1Module(reactContext))
|
|
12
|
-
return listOf(TagworksSdkV1Module, DataBundleModule(reactContext), TagWorksModule(reactContext), StandardEventModule(reactContext))
|
|
14
|
+
return listOf(TagworksSdkV1Module(reactContext), DataBundleModule(reactContext), TagWorksModule(reactContext), StandardEventModule(reactContext))
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
package/ios/TagWorksModule.swift
CHANGED
|
@@ -36,7 +36,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
36
36
|
isUseIntervals: Bool,
|
|
37
37
|
dispatchInterval: TimeInterval,
|
|
38
38
|
sessionTimeOut: TimeInterval = 5.0,
|
|
39
|
-
|
|
39
|
+
isManualDispatch: Bool = false,
|
|
40
40
|
// userAgent: String? = nil,
|
|
41
41
|
appVersion: String? = nil,
|
|
42
42
|
appName: String? = nil) {
|
|
@@ -48,6 +48,7 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
48
48
|
sessionTimeOut: sessionTimeOut,
|
|
49
49
|
// userAgent: userAgent,
|
|
50
50
|
userAgent: nil,
|
|
51
|
+
isManualDispatch: isManualDispatch,
|
|
51
52
|
appVersion: appVersion,
|
|
52
53
|
appName: appName)
|
|
53
54
|
}
|
|
@@ -247,7 +248,9 @@ class TagWorksModule: NSObject, RCTBridgeModule {
|
|
|
247
248
|
do {
|
|
248
249
|
// Data를 Dictionary로 변환
|
|
249
250
|
if let dictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
|
|
250
|
-
|
|
251
|
+
if dictionary["e_a"] as! String == "obzen" {
|
|
252
|
+
TagWorks.sharedInstance.webViewInterface.webInterfaceDidReceiveDictionary(dictionary)
|
|
253
|
+
}
|
|
251
254
|
}
|
|
252
255
|
} catch {
|
|
253
256
|
print("JSON 변환 오류: \(error)")
|
|
@@ -15,7 +15,7 @@ RCT_EXTERN_METHOD(initializeTagWorks:(NSString *)siteId
|
|
|
15
15
|
isUseIntervals:(BOOL)isUseIntervals
|
|
16
16
|
dispatchInterval:(NSTimeInterval)dispatchInterval
|
|
17
17
|
sessionTimeOut:(NSTimeInterval)sessionTimeOut
|
|
18
|
-
|
|
18
|
+
isManualDispatch:(BOOL)isManualDispatch
|
|
19
19
|
// userAgent:(NSString *)userAgent
|
|
20
20
|
appVersion:(NSString *)appVersion
|
|
21
21
|
appName:(NSString *)appName)
|
package/lib/commonjs/index.js
CHANGED
|
@@ -23,10 +23,11 @@ var _reactNative = require("react-native");
|
|
|
23
23
|
// },
|
|
24
24
|
// }
|
|
25
25
|
// );
|
|
26
|
-
//
|
|
26
|
+
//
|
|
27
27
|
// export function multiply(a: number, b: number): Promise<number> {
|
|
28
28
|
// return TagworksSdkV1.multiply(a, b);
|
|
29
29
|
// }
|
|
30
|
+
|
|
30
31
|
const {
|
|
31
32
|
TagWorksModule,
|
|
32
33
|
DataBundleModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","TagWorksModule","DataBundleModule","StandardEventModule","NativeModules","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AADA;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
|
|
1
|
+
{"version":3,"names":["_reactNative","require","TagWorksModule","DataBundleModule","StandardEventModule","NativeModules","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AADA;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EAAEC,cAAc;EAAEC,gBAAgB;EAAEC;AAAoB,CAAC,GAAGC,0BAAa;AAACC,OAAA,CAAAF,mBAAA,GAAAA,mBAAA;AAAAE,OAAA,CAAAH,gBAAA,GAAAA,gBAAA;AAAAG,OAAA,CAAAJ,cAAA,GAAAA,cAAA","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -19,10 +19,11 @@ import { NativeModules } from 'react-native';
|
|
|
19
19
|
// },
|
|
20
20
|
// }
|
|
21
21
|
// );
|
|
22
|
-
//
|
|
22
|
+
//
|
|
23
23
|
// export function multiply(a: number, b: number): Promise<number> {
|
|
24
24
|
// return TagworksSdkV1.multiply(a, b);
|
|
25
25
|
// }
|
|
26
|
+
|
|
26
27
|
const {
|
|
27
28
|
TagWorksModule,
|
|
28
29
|
DataBundleModule,
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","TagWorksModule","DataBundleModule","StandardEventModule"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,aAAa,QAAQ,cAAc;;AAE5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
|
|
1
|
+
{"version":3,"names":["NativeModules","TagWorksModule","DataBundleModule","StandardEventModule"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,aAAa,QAAQ,cAAc;;AAE5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EAAEC,cAAc;EAAEC,gBAAgB;EAAEC;AAAoB,CAAC,GAAGH,aAAa;AAC/E,SAASC,cAAc,EAAEC,gBAAgB,EAAEC,mBAAmB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAwBA,QAAA,MAAQ,cAAc,OAAE,gBAAgB,OAAE,mBAAmB,KAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAwBA,QAAA,MAAQ,cAAc,OAAE,gBAAgB,OAAE,mBAAmB,KAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tagworks-sdk-v1-react",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "TagWorks SDK React Native Library",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
6
|
"main": "./lib/commonjs/index.js",
|
|
@@ -64,14 +64,11 @@
|
|
|
64
64
|
"registry": "https://registry.npmjs.org/"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@commitlint/config-conventional": "^17.0.2",
|
|
68
|
-
"@evilmartians/lefthook": "^1.5.0",
|
|
69
67
|
"@react-native-community/cli": "15.0.1",
|
|
70
68
|
"@react-native/eslint-config": "^0.73.1",
|
|
71
69
|
"@release-it/conventional-changelog": "^9.0.2",
|
|
72
70
|
"@types/jest": "^29.5.5",
|
|
73
71
|
"@types/react": "^18.2.44",
|
|
74
|
-
"commitlint": "^17.0.2",
|
|
75
72
|
"del-cli": "^5.1.0",
|
|
76
73
|
"eslint": "^8.51.0",
|
|
77
74
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -103,11 +100,6 @@
|
|
|
103
100
|
"<rootDir>/lib/"
|
|
104
101
|
]
|
|
105
102
|
},
|
|
106
|
-
"commitlint": {
|
|
107
|
-
"extends": [
|
|
108
|
-
"@commitlint/config-conventional"
|
|
109
|
-
]
|
|
110
|
-
},
|
|
111
103
|
"release-it": {
|
|
112
104
|
"git": {
|
|
113
105
|
"commitMessage": "chore: release ${version}",
|
|
@@ -132,17 +124,7 @@
|
|
|
132
124
|
"prettier"
|
|
133
125
|
],
|
|
134
126
|
"rules": {
|
|
135
|
-
"react/react-in-jsx-scope": "off"
|
|
136
|
-
"prettier/prettier": [
|
|
137
|
-
"error",
|
|
138
|
-
{
|
|
139
|
-
"quoteProps": "consistent",
|
|
140
|
-
"singleQuote": true,
|
|
141
|
-
"tabWidth": 2,
|
|
142
|
-
"trailingComma": "es5",
|
|
143
|
-
"useTabs": false
|
|
144
|
-
}
|
|
145
|
-
]
|
|
127
|
+
"react/react-in-jsx-scope": "off"
|
|
146
128
|
}
|
|
147
129
|
},
|
|
148
130
|
"eslintIgnore": [
|
package/src/index.tsx
CHANGED
|
@@ -17,9 +17,10 @@ import { NativeModules } from 'react-native';
|
|
|
17
17
|
// },
|
|
18
18
|
// }
|
|
19
19
|
// );
|
|
20
|
-
//
|
|
20
|
+
//
|
|
21
21
|
// export function multiply(a: number, b: number): Promise<number> {
|
|
22
22
|
// return TagworksSdkV1.multiply(a, b);
|
|
23
23
|
// }
|
|
24
|
+
|
|
24
25
|
const { TagWorksModule, DataBundleModule, StandardEventModule } = NativeModules;
|
|
25
|
-
export { TagWorksModule, DataBundleModule, StandardEventModule };
|
|
26
|
+
export { TagWorksModule, DataBundleModule, StandardEventModule };
|