airbridge-react-native-sdk-restricted 2.5.2
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/.eslintrc.json +44 -0
- package/.gitattributes +1 -0
- package/airbridge-react-native-sdk.podspec +32 -0
- package/android/build/.transforms/08e8d929b7926845ebd25bc2ae9e2874/results.bin +1 -0
- package/android/build/.transforms/08e8d929b7926845ebd25bc2ae9e2874/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/14ea77658b61f201debed3d92aea1c0f/results.bin +1 -0
- package/android/build/.transforms/14ea77658b61f201debed3d92aea1c0f/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/33560bbaf5632b59753ef78fcd7b7f8d/results.bin +1 -0
- package/android/build/.transforms/33560bbaf5632b59753ef78fcd7b7f8d/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/38fa05fa6fd488a5dec6d7bdb333bfd1/results.bin +1 -0
- package/android/build/.transforms/38fa05fa6fd488a5dec6d7bdb333bfd1/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/405120ecc1eb36e3127f0c3846387eb6/results.bin +1 -0
- package/android/build/.transforms/405120ecc1eb36e3127f0c3846387eb6/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/61c549f58a941c195c4ffb5f43fed2ef/results.bin +1 -0
- package/android/build/.transforms/61c549f58a941c195c4ffb5f43fed2ef/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/75c8746e5247a4500eb6ae4ca2ef0a2e/results.bin +1 -0
- package/android/build/.transforms/75c8746e5247a4500eb6ae4ca2ef0a2e/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/85f88a3c5a226a3333c60b94378960e9/results.bin +1 -0
- package/android/build/.transforms/85f88a3c5a226a3333c60b94378960e9/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/8f01556cdda8590f3b7cee54078417e1/results.bin +1 -0
- package/android/build/.transforms/8f01556cdda8590f3b7cee54078417e1/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/905b1aa9b91e69e71e9ed75a0c99581c/results.bin +1 -0
- package/android/build/.transforms/905b1aa9b91e69e71e9ed75a0c99581c/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/983e33cb97b3d1caf80afe6b7ca652b3/results.bin +1 -0
- package/android/build/.transforms/983e33cb97b3d1caf80afe6b7ca652b3/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/b398922a5d6aaf33784a06f933228695/results.bin +1 -0
- package/android/build/.transforms/b398922a5d6aaf33784a06f933228695/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/b4ff5fb2fdb627c9a67ad50ae0347ece/results.bin +1 -0
- package/android/build/.transforms/b4ff5fb2fdb627c9a67ad50ae0347ece/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/d89a0ea59a0fb9c21321de6f1be36c2b/results.bin +1 -0
- package/android/build/.transforms/d89a0ea59a0fb9c21321de6f1be36c2b/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/dca3c4e952522adb6e9c477431cc0881/results.bin +1 -0
- package/android/build/.transforms/dca3c4e952522adb6e9c477431cc0881/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/e6b9f6a4f6dc26d29d4ac4172b428541/results.bin +1 -0
- package/android/build/.transforms/e6b9f6a4f6dc26d29d4ac4172b428541/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/e8ebcf4ab4a209e222c80ef37e9122e2/results.bin +1 -0
- package/android/build/.transforms/e8ebcf4ab4a209e222c80ef37e9122e2/transformed/classes/classes.dex +0 -0
- package/android/build/generated/source/buildConfig/debug/co/ab180/airbridge/reactnative/BuildConfig.java +10 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +10 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +18 -0
- package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +5 -0
- package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +1 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/R.txt +1956 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
- package/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +1 -0
- package/android/build/intermediates/incremental/packageDebugResources/merger.xml +2 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeAttribution.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeDeeplink$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeDeeplink.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeEvent.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgePlacement.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeRN.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeState$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeState.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/BuildConfig.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/ConfigReader$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/ConfigReader$2.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/ConfigReader.class +0 -0
- package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/Get.class +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +2 -0
- package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +15 -0
- package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +10 -0
- package/android/build/intermediates/navigation_json/debug/navigation.json +1 -0
- package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +18 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +1449 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +33 -0
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build.gradle +27 -0
- package/android/copy-config.gradle +18 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/android/gradlew +172 -0
- package/android/gradlew.bat +84 -0
- package/android/src/main/AndroidManifest.xml +8 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeAttribution.java +78 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeDeeplink.java +97 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeEvent.java +76 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgePlacement.java +42 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeRN.java +82 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeState.java +174 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/ConfigReader.java +108 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/Get.java +84 -0
- package/changelog.md +56 -0
- package/index.d.ts +292 -0
- package/index.js +8 -0
- package/ios/AirbridgeRN/ARNConfigReader.h +19 -0
- package/ios/AirbridgeRN/ARNConfigReader.m +79 -0
- package/ios/AirbridgeRN/ARNGet.h +20 -0
- package/ios/AirbridgeRN/ARNGet.m +40 -0
- package/ios/AirbridgeRN/AirbridgeAttribution.h +19 -0
- package/ios/AirbridgeRN/AirbridgeAttribution.m +47 -0
- package/ios/AirbridgeRN/AirbridgeDeeplink.h +20 -0
- package/ios/AirbridgeRN/AirbridgeDeeplink.m +59 -0
- package/ios/AirbridgeRN/AirbridgeEvent.h +17 -0
- package/ios/AirbridgeRN/AirbridgeEvent.m +63 -0
- package/ios/AirbridgeRN/AirbridgePlacement.h +17 -0
- package/ios/AirbridgeRN/AirbridgePlacement.m +38 -0
- package/ios/AirbridgeRN/AirbridgeRN.h +71 -0
- package/ios/AirbridgeRN/AirbridgeRN.m +59 -0
- package/ios/AirbridgeRN/AirbridgeState.h +17 -0
- package/ios/AirbridgeRN/AirbridgeState.m +89 -0
- package/ios/AirbridgeRN.xcodeproj/project.pbxproj +409 -0
- package/ios/copy-config.rb +26 -0
- package/package.json +43 -0
- package/readme.md +11 -0
- package/src/Airbridge.js +82 -0
- package/src/Deeplink.js +75 -0
- package/src/Event.js +38 -0
- package/src/Placement.js +56 -0
- package/src/State.js +167 -0
- package/src/WebInterface.js +135 -0
- package/src/tool/Log.js +40 -0
- package/src/tool/_.js +56 -0
- package/src/type/AirbridgeAttributes.js +16 -0
- package/src/type/AirbridgeCategory.js +18 -0
- package/src/type/AirbridgeProduct.js +13 -0
- package/src/typedef/EventOption.js +9 -0
- package/src/typedef/Product.js +10 -0
- package/src/typedef/User.js +9 -0
package/src/Placement.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
import Log from './tool/Log';
|
|
3
|
+
import _ from './tool/_';
|
|
4
|
+
|
|
5
|
+
const { AirbridgePlacement } = NativeModules;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* class for use SDK's placement function (singleton)
|
|
9
|
+
*/
|
|
10
|
+
class Placement {
|
|
11
|
+
/**
|
|
12
|
+
* @hideconstructor
|
|
13
|
+
*/
|
|
14
|
+
constructor() {}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 1. send +1 click statistics to server<br/>
|
|
18
|
+
* 2. get deeplink and fallback from server<br/>
|
|
19
|
+
* 3. open deeplink. when fail, open fallback<br/>
|
|
20
|
+
* 4. parameter's deeplink, fallback is spare for network-fail
|
|
21
|
+
*
|
|
22
|
+
* @param {string} trackingLink created on dashboard
|
|
23
|
+
*/
|
|
24
|
+
click(trackingLink, deeplink, fallback) {
|
|
25
|
+
Log.info('click tracking link');
|
|
26
|
+
|
|
27
|
+
if (_.isString(trackingLink) === false) {
|
|
28
|
+
Log.unmatchType('trackingLink');
|
|
29
|
+
Log.fail('click tracking link');
|
|
30
|
+
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
AirbridgePlacement.click(trackingLink);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* send +1 impression statistics to server<br/>
|
|
39
|
+
*
|
|
40
|
+
* @param {string} trackingLink created on dashboard
|
|
41
|
+
*/
|
|
42
|
+
impression(trackingLink) {
|
|
43
|
+
Log.info('impression tracking link');
|
|
44
|
+
|
|
45
|
+
if (_.isString(trackingLink) === false) {
|
|
46
|
+
Log.unmatchType('trackingLink');
|
|
47
|
+
Log.fail('impression tracking link');
|
|
48
|
+
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
AirbridgePlacement.impression(trackingLink);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default new Placement();
|
package/src/State.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
2
|
+
import Log from './tool/Log';
|
|
3
|
+
import _ from './tool/_';
|
|
4
|
+
|
|
5
|
+
import './typedef/User';
|
|
6
|
+
|
|
7
|
+
const { AirbridgeState, AirbridgeAttribution } = NativeModules;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @callback AttributionListener
|
|
11
|
+
* @param {object<string, string>} attribution URL of attribution
|
|
12
|
+
* @returns {void}
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* class for manage SDK's state (singleton)
|
|
17
|
+
*/
|
|
18
|
+
class State {
|
|
19
|
+
/**
|
|
20
|
+
* @hideconstructor
|
|
21
|
+
*/
|
|
22
|
+
constructor() {}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* set current user<br/>
|
|
26
|
+
*
|
|
27
|
+
* user.property is null, if input.property is null
|
|
28
|
+
* @param {User} user user infomation
|
|
29
|
+
*/
|
|
30
|
+
setUser(user) {
|
|
31
|
+
Log.info('set user');
|
|
32
|
+
|
|
33
|
+
if (_.isObject(user) === false) {
|
|
34
|
+
Log.unmatchType('user');
|
|
35
|
+
Log.fail('set user');
|
|
36
|
+
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (_.isNullableString(user.ID) === false) {
|
|
41
|
+
user.ID = null;
|
|
42
|
+
}
|
|
43
|
+
if (_.isNullableString(user.email) === false) {
|
|
44
|
+
user.email = null;
|
|
45
|
+
}
|
|
46
|
+
if (_.isNullableString(user.phone) === false) {
|
|
47
|
+
user.phone = null;
|
|
48
|
+
}
|
|
49
|
+
if (_.isNullableObject(user.alias) === false) {
|
|
50
|
+
user.alias = null;
|
|
51
|
+
}
|
|
52
|
+
if (_.isNullableObject(user.attributes) === false) {
|
|
53
|
+
user.attributes = null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
AirbridgeState.setUser(user);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* update current user<br/>
|
|
61
|
+
*
|
|
62
|
+
* user.property not be changed, if input.property is null
|
|
63
|
+
* @param {User} user user infomation
|
|
64
|
+
*/
|
|
65
|
+
updateUser(user) {
|
|
66
|
+
Log.info('update user');
|
|
67
|
+
|
|
68
|
+
if (_.isObject(user) === false) {
|
|
69
|
+
Log.unmatchType('user');
|
|
70
|
+
Log.fail('update user');
|
|
71
|
+
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (_.isNullableString(user.ID) === false) {
|
|
76
|
+
user.ID = null;
|
|
77
|
+
}
|
|
78
|
+
if (_.isNullableString(user.email) === false) {
|
|
79
|
+
user.email = null;
|
|
80
|
+
}
|
|
81
|
+
if (_.isNullableString(user.phone) === false) {
|
|
82
|
+
user.phone = null;
|
|
83
|
+
}
|
|
84
|
+
if (_.isNullableObject(user.alias) === false) {
|
|
85
|
+
user.alias = null;
|
|
86
|
+
}
|
|
87
|
+
if (_.isNullableObject(user.attributes) === false) {
|
|
88
|
+
user.attributes = null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
AirbridgeState.updateUser(user);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* make airbridge start tracking
|
|
96
|
+
*/
|
|
97
|
+
startTracking() {
|
|
98
|
+
Log.info('start tracking');
|
|
99
|
+
|
|
100
|
+
AirbridgeState.startTracking();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* get deviceUUID of Airbridge SDK.
|
|
105
|
+
*
|
|
106
|
+
* @returns {Promise<string>}
|
|
107
|
+
*/
|
|
108
|
+
deviceUUID() {
|
|
109
|
+
return AirbridgeState.deviceUUID();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Set AttributionListener (listen attribution)<br/>
|
|
114
|
+
* @param {AttributionListener} listener callback of attribution
|
|
115
|
+
*/
|
|
116
|
+
setAttributionListener(listener) {
|
|
117
|
+
Log.info('set attribution listener');
|
|
118
|
+
|
|
119
|
+
if (this._attributionListener === undefined) {
|
|
120
|
+
this._attributionListener = listener;
|
|
121
|
+
|
|
122
|
+
this._attributionEmitter = new NativeEventEmitter(AirbridgeAttribution);
|
|
123
|
+
this._attributionEmitter.addListener('airbridge.attribution', attribution => {
|
|
124
|
+
Log.info(`[attribution] ${JSON.stringify(attribution)}`);
|
|
125
|
+
this._attributionListener(attribution);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
AirbridgeAttribution.listen();
|
|
129
|
+
} else {
|
|
130
|
+
this._attributionListener = listener;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Set device alias
|
|
136
|
+
* @param {string} key - device alias key
|
|
137
|
+
* @param {string} value - device alias value
|
|
138
|
+
*/
|
|
139
|
+
setDeviceAlias(key, value) {
|
|
140
|
+
AirbridgeState.setDeviceAlias(key, value);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Remove device alias
|
|
145
|
+
* @param {string} key - callback of attribution
|
|
146
|
+
*/
|
|
147
|
+
removeDeviceAlias(key) {
|
|
148
|
+
AirbridgeState.removeDeviceAlias(key);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* clear device alias
|
|
153
|
+
*/
|
|
154
|
+
clearDeviceAlias() {
|
|
155
|
+
AirbridgeState.clearDeviceAlias();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* register push token
|
|
160
|
+
* @param {string} token - push token
|
|
161
|
+
*/
|
|
162
|
+
registerPushToken(token) {
|
|
163
|
+
AirbridgeState.registerPushToken(token);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export default new State();
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import Log from './tool/Log';
|
|
2
|
+
import _ from './tool/_';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* class for interface of webview
|
|
6
|
+
*/
|
|
7
|
+
class WebInterface {
|
|
8
|
+
/**
|
|
9
|
+
* @hideconstructor
|
|
10
|
+
*/
|
|
11
|
+
constructor(webToken, postCommandFunction, stateInstance, eventInstance) {
|
|
12
|
+
if (_.isString(webToken) === false) {
|
|
13
|
+
Log.fail('webToken is not string');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (_.isFunction(postCommandFunction) === false) {
|
|
18
|
+
Log.fail('postCommandFunction is not function');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const postCommand = postCommandFunction('command');
|
|
23
|
+
|
|
24
|
+
this._stateInstance = stateInstance;
|
|
25
|
+
this._eventInstance = eventInstance;
|
|
26
|
+
|
|
27
|
+
const getScript = function (webToken, postCommand) {
|
|
28
|
+
const jsonSchemaVersion = 4;
|
|
29
|
+
const sdkVersion = '2.5.2';
|
|
30
|
+
|
|
31
|
+
return `
|
|
32
|
+
AirbridgeNative = {};
|
|
33
|
+
AirbridgeNative.postCommand = function (command) {
|
|
34
|
+
${postCommand};
|
|
35
|
+
};
|
|
36
|
+
AirbridgeNative.getWebToken = function () {
|
|
37
|
+
return "${webToken}";
|
|
38
|
+
};
|
|
39
|
+
AirbridgeNative.getJsonSchemaVersion = function () {
|
|
40
|
+
return ${jsonSchemaVersion};
|
|
41
|
+
};
|
|
42
|
+
AirbridgeNative.getSdkVersion = function () {
|
|
43
|
+
return "${sdkVersion}";
|
|
44
|
+
};
|
|
45
|
+
AirbridgeNative.setUser = function (payload) {
|
|
46
|
+
AirbridgeNative.postCommand(JSON.stringify({
|
|
47
|
+
method: "setUser",
|
|
48
|
+
payload: payload
|
|
49
|
+
}));
|
|
50
|
+
};
|
|
51
|
+
AirbridgeNative.clearUser = function () {
|
|
52
|
+
AirbridgeNative.postCommand(JSON.stringify({
|
|
53
|
+
method: "clearUser",
|
|
54
|
+
payload: {}
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
57
|
+
AirbridgeNative.trackEvent = function (payload) {
|
|
58
|
+
AirbridgeNative.postCommand(JSON.stringify({
|
|
59
|
+
method: "trackEvent",
|
|
60
|
+
payload: payload
|
|
61
|
+
}));
|
|
62
|
+
};
|
|
63
|
+
`;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
this.script = getScript(webToken, postCommand);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* handle command from webview
|
|
71
|
+
* @param {String} command command from webview
|
|
72
|
+
*/
|
|
73
|
+
handle(command) {
|
|
74
|
+
const object = JSON.parse(command);
|
|
75
|
+
switch (object.method) {
|
|
76
|
+
case 'setUser': {
|
|
77
|
+
if (_.isObject(object) === false) {
|
|
78
|
+
Log.unmatchType('user');
|
|
79
|
+
Log.fail('set user');
|
|
80
|
+
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const payload = JSON.parse(object.payload);
|
|
85
|
+
const user = {
|
|
86
|
+
id: payload.id,
|
|
87
|
+
email: payload.email,
|
|
88
|
+
phone: payload.phone,
|
|
89
|
+
alias: payload.alias,
|
|
90
|
+
attributes: payload.attributes,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
this._stateInstance.setUser(user);
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case 'clearUser': {
|
|
97
|
+
const user = {
|
|
98
|
+
id: null,
|
|
99
|
+
email: null,
|
|
100
|
+
phone: null,
|
|
101
|
+
alias: null,
|
|
102
|
+
attributes: null,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
this._stateInstance.setUser(user);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'trackEvent': {
|
|
109
|
+
if (_.isObject(object) === false) {
|
|
110
|
+
Log.unmatchType('event');
|
|
111
|
+
Log.fail('track event');
|
|
112
|
+
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const payload = JSON.parse(object.payload);
|
|
117
|
+
const option = {
|
|
118
|
+
action: payload.action,
|
|
119
|
+
label: payload.label,
|
|
120
|
+
value: payload.value,
|
|
121
|
+
customAttributes: payload.custom_attributes,
|
|
122
|
+
semanticAttributes: payload.semantic_attributes,
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
this._eventInstance.trackEvent(payload.category, option);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
default:
|
|
129
|
+
Log.info('webinterface command is not handlable');
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export default WebInterface;
|
package/src/tool/Log.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* class for log
|
|
3
|
+
* @private
|
|
4
|
+
*/
|
|
5
|
+
class Log {
|
|
6
|
+
/**
|
|
7
|
+
* @type {string}
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
10
|
+
static HEADER = '[Airbridge RN]';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* warning unmatch type exist
|
|
14
|
+
* @param {string} name
|
|
15
|
+
* @returns {void}
|
|
16
|
+
*/
|
|
17
|
+
static unmatchType(name) {
|
|
18
|
+
console.warn(`${this.HEADER} ${name} has unmatched type`);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* log infomaton message
|
|
23
|
+
* @param {string} message
|
|
24
|
+
* @returns {void}
|
|
25
|
+
*/
|
|
26
|
+
static info(message) {
|
|
27
|
+
console.info(`${this.HEADER} ${message}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* warning fail to do task in method
|
|
32
|
+
* @param {string} name
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
static fail(name) {
|
|
36
|
+
console.warn(`${this.HEADER} fail to ${name}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default Log;
|
package/src/tool/_.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import isFunction from 'lodash.isfunction';
|
|
2
|
+
import isPlainObject from 'lodash.isplainobject';
|
|
3
|
+
import isString from 'lodash.isstring';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* class for util method
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
9
|
+
class _ {
|
|
10
|
+
/**
|
|
11
|
+
* return true if value is null or plain object
|
|
12
|
+
* @param {any} value
|
|
13
|
+
* @returns {boolean}
|
|
14
|
+
*/
|
|
15
|
+
static isNullableObject(value) {
|
|
16
|
+
return value === null || isPlainObject(value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* return true if value is plain object
|
|
21
|
+
* @param {any} value
|
|
22
|
+
* @returns {boolean}
|
|
23
|
+
*/
|
|
24
|
+
static isObject(value) {
|
|
25
|
+
return isPlainObject(value);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* return true if value is null or string
|
|
30
|
+
* @param {any} value
|
|
31
|
+
* @returns {boolean}
|
|
32
|
+
*/
|
|
33
|
+
static isNullableString(value) {
|
|
34
|
+
return value === null || isString(value);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* return true if value is string
|
|
39
|
+
* @param {any} value
|
|
40
|
+
* @returns {boolean}
|
|
41
|
+
*/
|
|
42
|
+
static isString(value) {
|
|
43
|
+
return isString(value);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* return true if value is function
|
|
48
|
+
* @param {any} value
|
|
49
|
+
* @returns {boolean}
|
|
50
|
+
*/
|
|
51
|
+
static isFunction(value) {
|
|
52
|
+
return isFunction(value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default _;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Common AirbridgeAttribute Keys */
|
|
2
|
+
var AirbridgeAttributes = {
|
|
3
|
+
QUERY: "query",
|
|
4
|
+
PRODUCT_LIST_ID: "productListID",
|
|
5
|
+
CART_ID: "cartID",
|
|
6
|
+
TRANSACTION_ID: "transactionID",
|
|
7
|
+
PRODUCTS: "products",
|
|
8
|
+
IN_APP_PURCHASED: "inAppPurchased",
|
|
9
|
+
CURRENCY: "currency",
|
|
10
|
+
TOTAL_VALUE: "totalValue",
|
|
11
|
+
TOTAL_QUANTITY: "totalQuantity",
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
AirbridgeAttributes,
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Common Airbridge category */
|
|
2
|
+
var AirbridgeCategory = {
|
|
3
|
+
SIGN_UP: "airbridge.user.signup",
|
|
4
|
+
SIGN_IN: "airbridge.user.signin",
|
|
5
|
+
SIGN_OUT: "airbridge.user.signout",
|
|
6
|
+
|
|
7
|
+
HOME_VIEW: "airbridge.ecommerce.home.viewed",
|
|
8
|
+
SEARCH_RESULT_VIEW: "airbridge.ecommerce.searchResults.viewed",
|
|
9
|
+
PRODUCT_LIST_VIEW: "airbridge.ecommerce.productList.viewed",
|
|
10
|
+
PRODUCT_DETAILS_VIEW: "airbridge.ecommerce.product.viewed",
|
|
11
|
+
|
|
12
|
+
ADD_TO_CART: "airbridge.ecommerce.product.addedToCart",
|
|
13
|
+
ORDER_COMPLETED: "airbridge.ecommerce.order.completed"
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
AirbridgeCategory,
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} EventOption
|
|
3
|
+
*
|
|
4
|
+
* @property {string} [action] event group name 1
|
|
5
|
+
* @property {string} [label] event group name 2
|
|
6
|
+
* @property {number} [value] event custom value
|
|
7
|
+
* @property {Object.<string, string>} [customAttributes] event custom attributes
|
|
8
|
+
* @property {Object.<string, *>} [semanticAttributes] event semantic attributes
|
|
9
|
+
*/
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} Product
|
|
3
|
+
*
|
|
4
|
+
* @property {string} [ID] Product's unique identifier
|
|
5
|
+
* @property {string} [name] Product's name
|
|
6
|
+
* @property {string} [currency] currency in <a href='https://en.wikipedia.org/wiki/ISO_4217'>ISO 4217<a/>
|
|
7
|
+
* @property {number} [price] Product's price
|
|
8
|
+
* @property {number} [quantity] Purchased quantity
|
|
9
|
+
* @property {number} [position] Product's index in list
|
|
10
|
+
*/
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} User
|
|
3
|
+
*
|
|
4
|
+
* @property {string} [ID] User's ID (not allow empty string)
|
|
5
|
+
* @property {string} [email] User's Email (not allow empty string)
|
|
6
|
+
* @property {string} [phone] User's Phone Number (not allow empty string)
|
|
7
|
+
* @property {object} [alias] User's Alias
|
|
8
|
+
* @property {object} [attributes] User's Attributes
|
|
9
|
+
*/
|