@igaworks/adbrix-react-native-sdk 1.0.3 → 1.0.4
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/CHANGELOG.md +56 -26
- package/adbrix-react-native-sdk.podspec +1 -1
- package/android/build.gradle +1 -1
- package/package.json +1 -1
- package/example/.bundle/config +0 -2
- package/example/.watchmanconfig +0 -1
- package/example/Gemfile +0 -10
- package/example/README.md +0 -106
- package/example/android/README.md +0 -24
- package/example/android/app/build.gradle +0 -128
- package/example/android/app/debug.keystore +0 -0
- package/example/android/app/proguard-rules.pro +0 -10
- package/example/android/app/src/debug/AndroidManifest.xml +0 -9
- package/example/android/app/src/main/AndroidManifest.xml +0 -34
- package/example/android/app/src/main/ic_launcher-playstore.png +0 -0
- package/example/android/app/src/main/java/igaworks/adbrixreactnativesdk/example/MainActivity.kt +0 -28
- package/example/android/app/src/main/java/igaworks/adbrixreactnativesdk/example/MainApplication.kt +0 -44
- package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -37
- package/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -5
- package/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -5
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- package/example/android/app/src/main/res/values/ic_launcher_background.xml +0 -4
- package/example/android/app/src/main/res/values/strings.xml +0 -3
- package/example/android/app/src/main/res/values/styles.xml +0 -9
- package/example/android/build.gradle +0 -21
- package/example/android/gradle.properties +0 -39
- package/example/android/settings.gradle +0 -6
- package/example/app.json +0 -4
- package/example/babel.config.js +0 -4
- package/example/index.js +0 -5
- package/example/ios/.xcode.env +0 -11
- package/example/ios/AdbrixReactNativeSdkExample/AppDelegate.swift +0 -53
- package/example/ios/AdbrixReactNativeSdkExample/Images.xcassets/AppIcon.appiconset/Contents.json +0 -53
- package/example/ios/AdbrixReactNativeSdkExample/Images.xcassets/Contents.json +0 -6
- package/example/ios/AdbrixReactNativeSdkExample/Info.plist +0 -62
- package/example/ios/AdbrixReactNativeSdkExample/LaunchScreen.storyboard +0 -47
- package/example/ios/AdbrixReactNativeSdkExample/PrivacyInfo.xcprivacy +0 -37
- package/example/ios/AdbrixReactNativeSdkExample.xcodeproj/project.pbxproj +0 -488
- package/example/ios/AdbrixReactNativeSdkExample.xcodeproj/xcshareddata/xcschemes/AdbrixReactNativeSdkExample.xcscheme +0 -88
- package/example/ios/AdbrixReactNativeSdkExample.xcworkspace/contents.xcworkspacedata +0 -10
- package/example/ios/Podfile +0 -35
- package/example/ios/Podfile.lock +0 -1821
- package/example/jest.config.js +0 -3
- package/example/metro.config.js +0 -27
- package/example/package.json +0 -33
- package/example/react-native.config.js +0 -21
- package/example/src/App.tsx +0 -755
package/example/src/App.tsx
DELETED
|
@@ -1,755 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
StyleSheet,
|
|
4
|
-
View,
|
|
5
|
-
Text,
|
|
6
|
-
TouchableOpacity,
|
|
7
|
-
Alert,
|
|
8
|
-
ScrollView,
|
|
9
|
-
Platform,
|
|
10
|
-
Linking,
|
|
11
|
-
SafeAreaView
|
|
12
|
-
} from 'react-native';
|
|
13
|
-
import Adbrix, {
|
|
14
|
-
ABEvent,
|
|
15
|
-
ABCurrency,
|
|
16
|
-
ABPaymentMethod,
|
|
17
|
-
ABConfig,
|
|
18
|
-
ABAndroidLogLevel,
|
|
19
|
-
ABInviteChannel,
|
|
20
|
-
ABSharingChannel,
|
|
21
|
-
ABSignUpChannel,
|
|
22
|
-
ABProperty,
|
|
23
|
-
ABItem
|
|
24
|
-
} from '@igaworks/adbrix-react-native-sdk';
|
|
25
|
-
|
|
26
|
-
export default function App() {
|
|
27
|
-
const [deepLink, setDeepLink] = useState<string | null>(null);
|
|
28
|
-
|
|
29
|
-
useEffect(() => {
|
|
30
|
-
init();
|
|
31
|
-
|
|
32
|
-
// 딥링크 리스너 설정
|
|
33
|
-
const handleDeepLink = (url: string) => {
|
|
34
|
-
console.log("🔗 [React Native] 딥링크 수신:", url);
|
|
35
|
-
if (url.startsWith('abx2jimmy://')) {
|
|
36
|
-
setDeepLink(url);
|
|
37
|
-
showDeepLinkAlert(url + " (React Native)");
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// 앱이 실행 중일 때 딥링크 처리
|
|
42
|
-
const linkingListener = Linking.addEventListener('url', (event) => {
|
|
43
|
-
handleDeepLink(event.url + ' this is linkingListener');
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
Linking.getInitialURL().then((url) => {
|
|
47
|
-
if (url) {
|
|
48
|
-
handleDeepLink(url + ' this is iniitial');
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
return () => {
|
|
53
|
-
linkingListener.remove();
|
|
54
|
-
};
|
|
55
|
-
}, []);
|
|
56
|
-
|
|
57
|
-
const init = async () => {
|
|
58
|
-
sdkInit();
|
|
59
|
-
blockDeferredDeepLinkLaunch();
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const sdkInit = () => {
|
|
63
|
-
const config = {
|
|
64
|
-
[ABConfig.IOS_LOG_ENABLE]: true,
|
|
65
|
-
[ABConfig.ANDROID_LOG_ENABLE]: true,
|
|
66
|
-
[ABConfig.ANDROID_LOG_LEVEL]: ABAndroidLogLevel.VERBOSE,
|
|
67
|
-
[ABConfig.ANDROID_COLLECT_GOOGLE_ADVERTISING_ID]: true,
|
|
68
|
-
// [ABConfig.IOS_TRACKING_TIMEOUT]: ABiOSTrackingTimeout.TIMEOUT_60
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
Adbrix.initWithConfig({
|
|
72
|
-
applicationKey: "{YOUR_APPLICATION_KEY}",
|
|
73
|
-
secretKey: "{YOUR_SECRET_KEY}",
|
|
74
|
-
config: config,
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const blockDeferredDeepLinkLaunch = async () => {
|
|
79
|
-
try {
|
|
80
|
-
const callback = await Adbrix.blockDeferredDeepLinkLaunch();
|
|
81
|
-
if (callback) {
|
|
82
|
-
const deepLinkUrl = callback.deepLink;
|
|
83
|
-
const deepLinkResult = callback.result;
|
|
84
|
-
setDeepLink(deepLinkUrl);
|
|
85
|
-
showDeepLinkAlert(deepLinkUrl + " deferred! "+ deepLinkResult);
|
|
86
|
-
}
|
|
87
|
-
} catch (error) {
|
|
88
|
-
console.error("error in blockDeferredDeepLinkLaunch:", error);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const showDeepLinkAlert = (deepLinkUrl: string) => {
|
|
93
|
-
Alert.alert(
|
|
94
|
-
'딥링크 수신',
|
|
95
|
-
`수신된 딥링크: ${deepLinkUrl}`,
|
|
96
|
-
[{ text: '확인', style: 'default' }]
|
|
97
|
-
);
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const requestTrackingAuthorization = async () => {
|
|
101
|
-
if (Platform.OS === 'ios') {
|
|
102
|
-
// React Native에서는 react-native-permissions를 사용하거나
|
|
103
|
-
// 직접 ATT 권한을 요청하는 네이티브 모듈을 구현해야 합니다.
|
|
104
|
-
// 여기서는 간단히 허용되었다고 가정하고 호출합니다.
|
|
105
|
-
Alert.alert(
|
|
106
|
-
'ATT 권한 요청',
|
|
107
|
-
'iOS에서 앱 추적 투명성 권한을 요청합니다.',
|
|
108
|
-
[
|
|
109
|
-
{
|
|
110
|
-
text: '허용',
|
|
111
|
-
onPress: () => Adbrix.attAuthorized(true)
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
text: '거부',
|
|
115
|
-
onPress: () => Adbrix.attAuthorized(false)
|
|
116
|
-
}
|
|
117
|
-
]
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
// Event Handler Functions
|
|
123
|
-
const handleLogin = () => {
|
|
124
|
-
Adbrix.logEvent({ eventName: ABEvent.LOGIN });
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
const handleLogout = () => {
|
|
128
|
-
Adbrix.logEvent({ eventName: ABEvent.LOGOUT });
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
const handleSignUp = () => {
|
|
132
|
-
const properties = ABProperty
|
|
133
|
-
.signChannel(ABSignUpChannel.KAKAO)
|
|
134
|
-
.build();
|
|
135
|
-
|
|
136
|
-
Adbrix.logEvent({
|
|
137
|
-
eventName: ABEvent.SIGN_UP,
|
|
138
|
-
properties: properties
|
|
139
|
-
});
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
const handleAppUpdate = () => {
|
|
143
|
-
const properties = ABProperty
|
|
144
|
-
.prevVer('1.0.0')
|
|
145
|
-
.currVer('1.0.1')
|
|
146
|
-
.build();
|
|
147
|
-
|
|
148
|
-
Adbrix.logEvent({
|
|
149
|
-
eventName: ABEvent.APP_UPDATE,
|
|
150
|
-
properties: properties
|
|
151
|
-
});
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const handleInvite = () => {
|
|
155
|
-
const properties = ABProperty
|
|
156
|
-
.inviteChannel(ABInviteChannel.KAKAO)
|
|
157
|
-
.build();
|
|
158
|
-
|
|
159
|
-
Adbrix.logEvent({
|
|
160
|
-
eventName: ABEvent.INVITE,
|
|
161
|
-
properties: properties
|
|
162
|
-
});
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
const handleUseCredit = () => {
|
|
166
|
-
Adbrix.logEvent({ eventName: ABEvent.USE_CREDIT });
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
const handlePurchase = () => {
|
|
170
|
-
// 기존 방식 대신 빌더 패턴 사용
|
|
171
|
-
const item = ABItem()
|
|
172
|
-
.productId('상품번호')
|
|
173
|
-
.productName('상품이름')
|
|
174
|
-
.category1('식품')
|
|
175
|
-
.category2('과자')
|
|
176
|
-
.price(5000.0)
|
|
177
|
-
.discount(0.0)
|
|
178
|
-
.quantity(1)
|
|
179
|
-
.currency(ABCurrency.KRW)
|
|
180
|
-
.customString('custom_string', '단건테스트')
|
|
181
|
-
.customLong('custom_long', 100)
|
|
182
|
-
.customDouble('custom_double', 100.0)
|
|
183
|
-
.customBool('custom_bool', true)
|
|
184
|
-
.build();
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const item2 = ABItem()
|
|
188
|
-
.productId('상품번호3')
|
|
189
|
-
.productName('상품이름3')
|
|
190
|
-
.category1('식품')
|
|
191
|
-
.category2('간식')
|
|
192
|
-
.price(2000.0)
|
|
193
|
-
.discount(0.0)
|
|
194
|
-
.quantity(3)
|
|
195
|
-
.currency(ABCurrency.KRW)
|
|
196
|
-
.customString('custom_string', '단건테스트')
|
|
197
|
-
.customLong('custom_long', 100)
|
|
198
|
-
.customDouble('custom_double', 100.0)
|
|
199
|
-
.customBool('custom_bool', true)
|
|
200
|
-
.build();
|
|
201
|
-
|
|
202
|
-
const item3 = ABItem()
|
|
203
|
-
.productId('상품번호3')
|
|
204
|
-
.productName('상품이름3')
|
|
205
|
-
.category1('식품')
|
|
206
|
-
.category2('간식')
|
|
207
|
-
.price(2000.0)
|
|
208
|
-
.discount(0.0)
|
|
209
|
-
.quantity(3)
|
|
210
|
-
.currency(ABCurrency.KRW)
|
|
211
|
-
.build();
|
|
212
|
-
|
|
213
|
-
const properties = ABProperty
|
|
214
|
-
.items([item, item2, item3])
|
|
215
|
-
.orderId('상품번호')
|
|
216
|
-
.paymentMethod(ABPaymentMethod.BANK_TRANSFER)
|
|
217
|
-
.orderSales(20000.0)
|
|
218
|
-
.deliveryCharge(3000.0)
|
|
219
|
-
.build();
|
|
220
|
-
|
|
221
|
-
Adbrix.logEvent({ eventName: ABEvent.PURCHASE, properties: properties });
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const handleViewHome = () => {
|
|
226
|
-
Adbrix.logEvent({ eventName: ABEvent.VIEW_HOME });
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
const handleCategoryView = () => {
|
|
231
|
-
const item = ABItem()
|
|
232
|
-
.productId('상품번호')
|
|
233
|
-
.productName('상품이름')
|
|
234
|
-
.category1('식품')
|
|
235
|
-
.category2('과자')
|
|
236
|
-
.price(5000.0)
|
|
237
|
-
.discount(0.0)
|
|
238
|
-
.quantity(1)
|
|
239
|
-
.currency(ABCurrency.KRW)
|
|
240
|
-
.build();
|
|
241
|
-
|
|
242
|
-
const properties = ABProperty
|
|
243
|
-
.items([item])
|
|
244
|
-
.category1('식품')
|
|
245
|
-
.category2('과자')
|
|
246
|
-
.build();
|
|
247
|
-
|
|
248
|
-
Adbrix.logEvent({
|
|
249
|
-
eventName: ABEvent.CATEGORY_VIEW,
|
|
250
|
-
properties: properties
|
|
251
|
-
});
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const handleProductView = () => {
|
|
255
|
-
const item = ABItem()
|
|
256
|
-
.productId('상품번호')
|
|
257
|
-
.productName('상품이름')
|
|
258
|
-
.category1('식품')
|
|
259
|
-
.category2('과자')
|
|
260
|
-
.price(5000.0)
|
|
261
|
-
.discount(0.0)
|
|
262
|
-
.quantity(1)
|
|
263
|
-
.currency(ABCurrency.KRW)
|
|
264
|
-
.build();
|
|
265
|
-
|
|
266
|
-
const properties = ABProperty
|
|
267
|
-
.items([item])
|
|
268
|
-
.build();
|
|
269
|
-
|
|
270
|
-
Adbrix.logEvent({
|
|
271
|
-
eventName: ABEvent.PRODUCT_VIEW,
|
|
272
|
-
properties: properties
|
|
273
|
-
});
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
const handleAddToCart = () => {
|
|
277
|
-
const item = ABItem()
|
|
278
|
-
.productId('상품번호')
|
|
279
|
-
.productName('상품이름')
|
|
280
|
-
.category1('식품')
|
|
281
|
-
.category2('과자')
|
|
282
|
-
.price(5000.0)
|
|
283
|
-
.discount(0.0)
|
|
284
|
-
.quantity(1)
|
|
285
|
-
.build();
|
|
286
|
-
|
|
287
|
-
const properties = ABProperty
|
|
288
|
-
.items([item])
|
|
289
|
-
.build();
|
|
290
|
-
|
|
291
|
-
Adbrix.logEvent({
|
|
292
|
-
eventName: ABEvent.ADD_TO_CART,
|
|
293
|
-
properties: properties
|
|
294
|
-
});
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
const handleAddToWishlist = () => {
|
|
298
|
-
const item = ABItem()
|
|
299
|
-
.productId('상품번호')
|
|
300
|
-
.productName('상품이름')
|
|
301
|
-
.category1('식품')
|
|
302
|
-
.category2('과자')
|
|
303
|
-
.price(5000.0)
|
|
304
|
-
.discount(0.0)
|
|
305
|
-
.quantity(1)
|
|
306
|
-
.build();
|
|
307
|
-
|
|
308
|
-
const properties = ABProperty
|
|
309
|
-
.items([item])
|
|
310
|
-
.build();
|
|
311
|
-
|
|
312
|
-
Adbrix.logEvent({
|
|
313
|
-
eventName: ABEvent.ADD_TO_WISHLIST,
|
|
314
|
-
properties: properties
|
|
315
|
-
});
|
|
316
|
-
};
|
|
317
|
-
|
|
318
|
-
const handleReviewOrder = () => {
|
|
319
|
-
const item = ABItem()
|
|
320
|
-
.productId('상품번호')
|
|
321
|
-
.productName('상품이름')
|
|
322
|
-
.category1('식품')
|
|
323
|
-
.category2('과자')
|
|
324
|
-
.price(5000.0)
|
|
325
|
-
.discount(0.0)
|
|
326
|
-
.quantity(1)
|
|
327
|
-
.currency(ABCurrency.KRW)
|
|
328
|
-
.build();
|
|
329
|
-
|
|
330
|
-
const properties = ABProperty
|
|
331
|
-
.items([item])
|
|
332
|
-
.orderId('상품번호')
|
|
333
|
-
.deliveryCharge(3000.0)
|
|
334
|
-
.discount(0.0)
|
|
335
|
-
.build();
|
|
336
|
-
|
|
337
|
-
Adbrix.logEvent({
|
|
338
|
-
eventName: ABEvent.REVIEW_ORDER,
|
|
339
|
-
properties: properties
|
|
340
|
-
});
|
|
341
|
-
};
|
|
342
|
-
|
|
343
|
-
const handleRefund = () => {
|
|
344
|
-
const item = ABItem()
|
|
345
|
-
.productId('상품번호')
|
|
346
|
-
.productName('상품이름')
|
|
347
|
-
.category1('식품')
|
|
348
|
-
.category2('과자')
|
|
349
|
-
.price(5000.0)
|
|
350
|
-
.discount(0.0)
|
|
351
|
-
.quantity(1)
|
|
352
|
-
.build();
|
|
353
|
-
|
|
354
|
-
const properties = ABProperty
|
|
355
|
-
.items([item])
|
|
356
|
-
.orderId('주문번호')
|
|
357
|
-
.penaltyCharge(0.0)
|
|
358
|
-
.build();
|
|
359
|
-
|
|
360
|
-
Adbrix.logEvent({
|
|
361
|
-
eventName: ABEvent.REFUND,
|
|
362
|
-
properties: properties
|
|
363
|
-
});
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
const handleSearch = () => {
|
|
367
|
-
const item = ABItem()
|
|
368
|
-
.productId('상품번호')
|
|
369
|
-
.productName('상품이름')
|
|
370
|
-
.category1('식품')
|
|
371
|
-
.category2('과자')
|
|
372
|
-
.price(5000.0)
|
|
373
|
-
.discount(0.0)
|
|
374
|
-
.quantity(1)
|
|
375
|
-
.build();
|
|
376
|
-
|
|
377
|
-
const properties = ABProperty
|
|
378
|
-
.items([item])
|
|
379
|
-
.keyword('삼겹살')
|
|
380
|
-
.build();
|
|
381
|
-
|
|
382
|
-
Adbrix.logEvent({
|
|
383
|
-
eventName: ABEvent.SEARCH,
|
|
384
|
-
properties: properties
|
|
385
|
-
});
|
|
386
|
-
};
|
|
387
|
-
|
|
388
|
-
const handleShare = () => {
|
|
389
|
-
const item = ABItem()
|
|
390
|
-
.productId('상품번호')
|
|
391
|
-
.productName('상품이름')
|
|
392
|
-
.category1('식품')
|
|
393
|
-
.category2('과자')
|
|
394
|
-
.price(5000.0)
|
|
395
|
-
.discount(0.0)
|
|
396
|
-
.quantity(1)
|
|
397
|
-
.currency(ABCurrency.KRW)
|
|
398
|
-
.build();
|
|
399
|
-
|
|
400
|
-
const properties = ABProperty
|
|
401
|
-
.items([item])
|
|
402
|
-
.sharingChannel(ABSharingChannel.FACEBOOK)
|
|
403
|
-
.build();
|
|
404
|
-
|
|
405
|
-
Adbrix.logEvent({
|
|
406
|
-
eventName: ABEvent.SHARE,
|
|
407
|
-
properties: properties
|
|
408
|
-
});
|
|
409
|
-
};
|
|
410
|
-
|
|
411
|
-
const handleListView = () => {
|
|
412
|
-
const item = ABItem()
|
|
413
|
-
.productId('상품번호')
|
|
414
|
-
.productName('상품이름')
|
|
415
|
-
.category1('식품')
|
|
416
|
-
.category2('과자')
|
|
417
|
-
.price(5000.0)
|
|
418
|
-
.discount(0.0)
|
|
419
|
-
.quantity(1)
|
|
420
|
-
.build();
|
|
421
|
-
|
|
422
|
-
const properties = ABProperty
|
|
423
|
-
.items([item])
|
|
424
|
-
.build();
|
|
425
|
-
|
|
426
|
-
Adbrix.logEvent({
|
|
427
|
-
eventName: ABEvent.LIST_VIEW,
|
|
428
|
-
properties: properties
|
|
429
|
-
});
|
|
430
|
-
};
|
|
431
|
-
|
|
432
|
-
const handleCartView = () => {
|
|
433
|
-
const item = ABItem()
|
|
434
|
-
.productId('상품번호')
|
|
435
|
-
.productName('상품이름')
|
|
436
|
-
.category1('식품')
|
|
437
|
-
.category2('과자')
|
|
438
|
-
.price(5000.0)
|
|
439
|
-
.discount(0.0)
|
|
440
|
-
.quantity(1)
|
|
441
|
-
.build();
|
|
442
|
-
|
|
443
|
-
const properties = ABProperty
|
|
444
|
-
.items([item])
|
|
445
|
-
.build();
|
|
446
|
-
|
|
447
|
-
Adbrix.logEvent({
|
|
448
|
-
eventName: ABEvent.CART_VIEW,
|
|
449
|
-
properties: properties
|
|
450
|
-
});
|
|
451
|
-
};
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
const handlePaymentInfoAdded = () => {
|
|
455
|
-
Adbrix.logEvent({ eventName: ABEvent.PAYMENT_INFO_ADDED });
|
|
456
|
-
};
|
|
457
|
-
|
|
458
|
-
const handleTutorialCompleted = () => {
|
|
459
|
-
const properties = ABProperty
|
|
460
|
-
.isSkip(true)
|
|
461
|
-
.build();
|
|
462
|
-
|
|
463
|
-
Adbrix.logEvent({
|
|
464
|
-
eventName: ABEvent.TUTORIAL_COMPLETED,
|
|
465
|
-
properties: properties
|
|
466
|
-
});
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
const handleCharacterCreated = () => {
|
|
470
|
-
Adbrix.logEvent({ eventName: ABEvent.CHARACTER_CREATED });
|
|
471
|
-
};
|
|
472
|
-
|
|
473
|
-
const handleStageCleared = () => {
|
|
474
|
-
const properties = ABProperty
|
|
475
|
-
.stage('STAGE_NAME')
|
|
476
|
-
.build();
|
|
477
|
-
|
|
478
|
-
Adbrix.logEvent({
|
|
479
|
-
eventName: ABEvent.STAGE_CLEARED,
|
|
480
|
-
properties: properties
|
|
481
|
-
});
|
|
482
|
-
};
|
|
483
|
-
|
|
484
|
-
const handleLevelAchieved = () => {
|
|
485
|
-
const properties = ABProperty
|
|
486
|
-
.level(100)
|
|
487
|
-
.build();
|
|
488
|
-
|
|
489
|
-
Adbrix.logEvent({
|
|
490
|
-
eventName: ABEvent.LEVEL_ACHIEVED,
|
|
491
|
-
properties: properties
|
|
492
|
-
});
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
const handleCustomEvent = () => {
|
|
496
|
-
const properties = ABProperty
|
|
497
|
-
.customBool('is_logined', true)
|
|
498
|
-
.customString('username', 'hello')
|
|
499
|
-
.customLong('visit_count', 1000)
|
|
500
|
-
.build();
|
|
501
|
-
|
|
502
|
-
Adbrix.logEvent({
|
|
503
|
-
eventName: 'custom_event_1',
|
|
504
|
-
properties: properties
|
|
505
|
-
});
|
|
506
|
-
};
|
|
507
|
-
|
|
508
|
-
const handleEnableSDK = () => {
|
|
509
|
-
Adbrix.enableSDK();
|
|
510
|
-
};
|
|
511
|
-
|
|
512
|
-
const handleDisableSDK = () => {
|
|
513
|
-
Adbrix.disableSDK();
|
|
514
|
-
};
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
// 단건 아이템 테스트 함수
|
|
518
|
-
const handleSingleItemTest = () => {
|
|
519
|
-
// 단일 아이템 생성
|
|
520
|
-
const singleItem = ABItem()
|
|
521
|
-
.productId('single_product')
|
|
522
|
-
.productName('단일상품')
|
|
523
|
-
.price(50000)
|
|
524
|
-
.quantity(1)
|
|
525
|
-
.category1('테스트')
|
|
526
|
-
.customString('test_field', '단건테스트')
|
|
527
|
-
.build();
|
|
528
|
-
|
|
529
|
-
// 단건 아이템을 Properties에 전달 (배열이 아님!)
|
|
530
|
-
const singleItemProperties = ABProperty
|
|
531
|
-
.items(singleItem) // 배열이 아닌 단건 객체 전달
|
|
532
|
-
.orderId('SINGLE_ORDER_001')
|
|
533
|
-
.orderSales(50000)
|
|
534
|
-
.build();
|
|
535
|
-
|
|
536
|
-
Adbrix.logEvent({
|
|
537
|
-
eventName: ABEvent.PRODUCT_VIEW,
|
|
538
|
-
properties: singleItemProperties
|
|
539
|
-
});
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
return (
|
|
544
|
-
<SafeAreaView style={styles.safeArea}>
|
|
545
|
-
<ScrollView style={styles.container}>
|
|
546
|
-
<View style={styles.header}>
|
|
547
|
-
<Text style={styles.title}>Adbrix Demo</Text>
|
|
548
|
-
{deepLink && (
|
|
549
|
-
<Text style={styles.deepLinkText}>
|
|
550
|
-
마지막 딥링크: {deepLink}
|
|
551
|
-
</Text>
|
|
552
|
-
)}
|
|
553
|
-
</View>
|
|
554
|
-
|
|
555
|
-
{/* ATT 섹션 */}
|
|
556
|
-
<Text style={styles.sectionTitle}>ATT</Text>
|
|
557
|
-
<TouchableOpacity style={styles.button} onPress={requestTrackingAuthorization}>
|
|
558
|
-
<Text style={styles.buttonText}>requestTrackingAuthorization</Text>
|
|
559
|
-
</TouchableOpacity>
|
|
560
|
-
|
|
561
|
-
{/* LogEvent 섹션 */}
|
|
562
|
-
<Text style={styles.sectionTitle}>LogEvent</Text>
|
|
563
|
-
|
|
564
|
-
{/* UserAnalytics */}
|
|
565
|
-
<Text style={styles.subSectionTitle}>UserAnalytics</Text>
|
|
566
|
-
<TouchableOpacity style={styles.button} onPress={handleLogin}>
|
|
567
|
-
<Text style={styles.buttonText}>Login</Text>
|
|
568
|
-
</TouchableOpacity>
|
|
569
|
-
|
|
570
|
-
<TouchableOpacity style={styles.button} onPress={handleLogout}>
|
|
571
|
-
<Text style={styles.buttonText}>Logout</Text>
|
|
572
|
-
</TouchableOpacity>
|
|
573
|
-
|
|
574
|
-
{/* Common */}
|
|
575
|
-
<Text style={styles.subSectionTitle}>Common</Text>
|
|
576
|
-
<TouchableOpacity style={styles.button} onPress={handleSignUp}>
|
|
577
|
-
<Text style={styles.buttonText}>Sign Up</Text>
|
|
578
|
-
</TouchableOpacity>
|
|
579
|
-
|
|
580
|
-
<TouchableOpacity style={styles.button} onPress={handlePurchase}>
|
|
581
|
-
<Text style={styles.buttonText}>Purchase</Text>
|
|
582
|
-
</TouchableOpacity>
|
|
583
|
-
|
|
584
|
-
<TouchableOpacity style={styles.button} onPress={handleSingleItemTest}>
|
|
585
|
-
<Text style={styles.buttonText}>Single Item Test</Text>
|
|
586
|
-
</TouchableOpacity>
|
|
587
|
-
|
|
588
|
-
<TouchableOpacity style={styles.button} onPress={handleInvite}>
|
|
589
|
-
<Text style={styles.buttonText}>Invite</Text>
|
|
590
|
-
</TouchableOpacity>
|
|
591
|
-
|
|
592
|
-
<TouchableOpacity style={styles.button} onPress={handleUseCredit}>
|
|
593
|
-
<Text style={styles.buttonText}>UseCredit</Text>
|
|
594
|
-
</TouchableOpacity>
|
|
595
|
-
|
|
596
|
-
<TouchableOpacity style={styles.button} onPress={handleAppUpdate}>
|
|
597
|
-
<Text style={styles.buttonText}>AppUpdate</Text>
|
|
598
|
-
</TouchableOpacity>
|
|
599
|
-
|
|
600
|
-
{/* Commerce */}
|
|
601
|
-
<Text style={styles.subSectionTitle}>Commerce</Text>
|
|
602
|
-
<TouchableOpacity style={styles.button} onPress={handleViewHome}>
|
|
603
|
-
<Text style={styles.buttonText}>View Home</Text>
|
|
604
|
-
</TouchableOpacity>
|
|
605
|
-
|
|
606
|
-
<TouchableOpacity style={styles.button} onPress={handleProductView}>
|
|
607
|
-
<Text style={styles.buttonText}>Product View</Text>
|
|
608
|
-
</TouchableOpacity>
|
|
609
|
-
|
|
610
|
-
<TouchableOpacity style={styles.button} onPress={handleAddToCart}>
|
|
611
|
-
<Text style={styles.buttonText}>Add To Cart</Text>
|
|
612
|
-
</TouchableOpacity>
|
|
613
|
-
|
|
614
|
-
<TouchableOpacity style={styles.button} onPress={handleAddToWishlist}>
|
|
615
|
-
<Text style={styles.buttonText}>Add To Wishlist</Text>
|
|
616
|
-
</TouchableOpacity>
|
|
617
|
-
|
|
618
|
-
<TouchableOpacity style={styles.button} onPress={handleRefund}>
|
|
619
|
-
<Text style={styles.buttonText}>Refund</Text>
|
|
620
|
-
</TouchableOpacity>
|
|
621
|
-
|
|
622
|
-
<TouchableOpacity style={styles.button} onPress={handleSearch}>
|
|
623
|
-
<Text style={styles.buttonText}>Search</Text>
|
|
624
|
-
</TouchableOpacity>
|
|
625
|
-
|
|
626
|
-
<TouchableOpacity style={styles.button} onPress={handleListView}>
|
|
627
|
-
<Text style={styles.buttonText}>List View</Text>
|
|
628
|
-
</TouchableOpacity>
|
|
629
|
-
|
|
630
|
-
<TouchableOpacity style={styles.button} onPress={handleCartView}>
|
|
631
|
-
<Text style={styles.buttonText}>Cart View</Text>
|
|
632
|
-
</TouchableOpacity>
|
|
633
|
-
|
|
634
|
-
<TouchableOpacity style={styles.button} onPress={handleReviewOrder}>
|
|
635
|
-
<Text style={styles.buttonText}>ReviewOrder</Text>
|
|
636
|
-
</TouchableOpacity>
|
|
637
|
-
|
|
638
|
-
<TouchableOpacity style={styles.button} onPress={handleShare}>
|
|
639
|
-
<Text style={styles.buttonText}>Share</Text>
|
|
640
|
-
</TouchableOpacity>
|
|
641
|
-
|
|
642
|
-
<TouchableOpacity style={styles.button} onPress={handlePaymentInfoAdded}>
|
|
643
|
-
<Text style={styles.buttonText}>Payment Info Added</Text>
|
|
644
|
-
</TouchableOpacity>
|
|
645
|
-
|
|
646
|
-
<TouchableOpacity style={styles.button} onPress={handleCategoryView}>
|
|
647
|
-
<Text style={styles.buttonText}>CategoryView</Text>
|
|
648
|
-
</TouchableOpacity>
|
|
649
|
-
|
|
650
|
-
{/* Game */}
|
|
651
|
-
<Text style={styles.subSectionTitle}>Game</Text>
|
|
652
|
-
<TouchableOpacity style={styles.button} onPress={handleLevelAchieved}>
|
|
653
|
-
<Text style={styles.buttonText}>LevelArchived</Text>
|
|
654
|
-
</TouchableOpacity>
|
|
655
|
-
|
|
656
|
-
<TouchableOpacity style={styles.button} onPress={handleTutorialCompleted}>
|
|
657
|
-
<Text style={styles.buttonText}>TutorialCompleted</Text>
|
|
658
|
-
</TouchableOpacity>
|
|
659
|
-
|
|
660
|
-
<TouchableOpacity style={styles.button} onPress={handleCharacterCreated}>
|
|
661
|
-
<Text style={styles.buttonText}>CharacterCreated</Text>
|
|
662
|
-
</TouchableOpacity>
|
|
663
|
-
|
|
664
|
-
<TouchableOpacity style={styles.button} onPress={handleStageCleared}>
|
|
665
|
-
<Text style={styles.buttonText}>StageCleared</Text>
|
|
666
|
-
</TouchableOpacity>
|
|
667
|
-
|
|
668
|
-
{/* CustomEvent */}
|
|
669
|
-
<Text style={styles.subSectionTitle}>CustomEvent</Text>
|
|
670
|
-
<TouchableOpacity style={styles.button} onPress={handleCustomEvent}>
|
|
671
|
-
<Text style={styles.buttonText}>Custom Event</Text>
|
|
672
|
-
</TouchableOpacity>
|
|
673
|
-
|
|
674
|
-
{/* Dfinery */}
|
|
675
|
-
<Text style={styles.subSectionTitle}>Dfinery</Text>
|
|
676
|
-
<TouchableOpacity style={styles.button} onPress={handleEnableSDK}>
|
|
677
|
-
<Text style={styles.buttonText}>enableSDK</Text>
|
|
678
|
-
</TouchableOpacity>
|
|
679
|
-
|
|
680
|
-
<TouchableOpacity style={styles.button} onPress={handleDisableSDK}>
|
|
681
|
-
<Text style={styles.buttonText}>disableSDK</Text>
|
|
682
|
-
</TouchableOpacity>
|
|
683
|
-
|
|
684
|
-
<View style={styles.footer} />
|
|
685
|
-
</ScrollView>
|
|
686
|
-
</SafeAreaView>
|
|
687
|
-
);
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
const styles = StyleSheet.create({
|
|
691
|
-
safeArea: {
|
|
692
|
-
flex: 1,
|
|
693
|
-
backgroundColor: '#2196F3',
|
|
694
|
-
},
|
|
695
|
-
container: {
|
|
696
|
-
flex: 1,
|
|
697
|
-
backgroundColor: '#f5f5f5',
|
|
698
|
-
},
|
|
699
|
-
header: {
|
|
700
|
-
backgroundColor: '#2196F3',
|
|
701
|
-
padding: 12,
|
|
702
|
-
alignItems: 'center',
|
|
703
|
-
},
|
|
704
|
-
title: {
|
|
705
|
-
fontSize: 20,
|
|
706
|
-
fontWeight: 'bold',
|
|
707
|
-
color: '#ffffff',
|
|
708
|
-
marginBottom: 4,
|
|
709
|
-
},
|
|
710
|
-
deepLinkText: {
|
|
711
|
-
fontSize: 10,
|
|
712
|
-
color: '#ffffff',
|
|
713
|
-
textAlign: 'center',
|
|
714
|
-
},
|
|
715
|
-
sectionTitle: {
|
|
716
|
-
fontSize: 16,
|
|
717
|
-
fontWeight: 'bold',
|
|
718
|
-
color: '#333',
|
|
719
|
-
marginTop: 12,
|
|
720
|
-
marginBottom: 6,
|
|
721
|
-
marginHorizontal: 12,
|
|
722
|
-
},
|
|
723
|
-
subSectionTitle: {
|
|
724
|
-
fontSize: 14,
|
|
725
|
-
fontWeight: '600',
|
|
726
|
-
color: '#555',
|
|
727
|
-
marginTop: 8,
|
|
728
|
-
marginBottom: 4,
|
|
729
|
-
marginHorizontal: 12,
|
|
730
|
-
},
|
|
731
|
-
button: {
|
|
732
|
-
backgroundColor: '#2196F3',
|
|
733
|
-
margin: 4,
|
|
734
|
-
marginHorizontal: 12,
|
|
735
|
-
padding: 10,
|
|
736
|
-
borderRadius: 6,
|
|
737
|
-
elevation: 1,
|
|
738
|
-
shadowColor: '#000',
|
|
739
|
-
shadowOffset: {
|
|
740
|
-
width: 0,
|
|
741
|
-
height: 1,
|
|
742
|
-
},
|
|
743
|
-
shadowOpacity: 0.18,
|
|
744
|
-
shadowRadius: 1.0,
|
|
745
|
-
},
|
|
746
|
-
buttonText: {
|
|
747
|
-
color: '#ffffff',
|
|
748
|
-
fontSize: 13,
|
|
749
|
-
fontWeight: '500',
|
|
750
|
-
textAlign: 'center',
|
|
751
|
-
},
|
|
752
|
-
footer: {
|
|
753
|
-
height: 12,
|
|
754
|
-
},
|
|
755
|
-
});
|