-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathindex.js
278 lines (255 loc) · 7.78 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
import {NativeModules, Platform} from 'react-native';
const JAnalyticsModule = NativeModules.JAnalyticsModule;
const noop = () => {
};
export const setJSExceptionHandler = (customHandler = noop, allowedInDevMode = false) => {
if (typeof allowedInDevMode !== "boolean" || typeof customHandler !== "function") {
return;
}
const allowed = allowedInDevMode ? true : !__DEV__;
if (allowed) {
// 设置错误处理函数
global.ErrorUtils.setGlobalHandler(customHandler);
// 改写 console.error,保证报错能被 ErrorUtils 捕获并调用错误处理函数处理
console.error = (message, error) => global.ErrorUtils.reportError(error);
}
};
// export const getJSExceptionHandler = () => global.ErrorUtils.getGlobalHandler();
// export default {
// setJSExceptionHandler,
// getJSExceptionHandler,
// };
export default class JAnalytics {
/**
* 初始化插件
*
* @param {object} params = {
* appKey?: String //极光控制台上注册的应用 appKey
* }
*
* NOTE:
* 当前版本 appKey 可以不传,iOS 中 params 中没有找到 appKey 字段
* 会在 JiGuangConfig.plist 中获取 appKey 这个字段
*/
static init(params) {
if (Platform.OS == "android") {
JAnalyticsModule.init();
} else {
JAnalyticsModule.setup(params);
}
}
/**
* 设置是否打印sdk产生的Debug级log信息, 默认为NO(不打印log)
*
* @param {object} params = {
* enable: Boolean //
* }
*/
static setLoggerEnable(enable) {
if (Platform.OS == "android") {
JAnalyticsModule.setDebugMode(enable)
} else {
JAnalyticsModule.setDebug(enable);
}
}
/**
* 开启Crash日志收集,默认是关闭状态.
*/
static crashLogON() {
if (Platform.OS == "android") {
JAnalyticsModule.initCrashHandler();
} else {
JAnalyticsModule.crashLogON();
}
}
/**
* 开始记录页面停留
*
* @param {object} params = {
* pageName: Stirng // 页面名称,用于标识页面
* }
*
*/
static startLogPageView(params) {
if (Platform.OS == "android") {
JAnalyticsModule.onPageStart(params);
} else {
JAnalyticsModule.startLogPageView(params);
}
}
/**
* 停止记录页面停留
*
* @param {object} params = {
* pageName: Stirng // 页面名称,用于标识页面
* }
*/
static stopLogPageView(params) {
if (Platform.OS == "android") {
JAnalyticsModule.onPageEnd(params);
} else {
JAnalyticsModule.stopLogPageView(params);
}
}
/**
* 上报事件
* 除了 extra 其他都是必填
* @param {object} event 可以为如下 5 种事件
*
* loginEvent = {
* type: 'login', // 必填
* extra: Object, // 附加键值对,格式 {String: String}
* method: String, // 填自己的登录方法
* success: Boolean
* }
*
* registerEvent = {
* type: 'register', // 必填
* extra: Object, // 附加键值对,格式 {String: String}
* method: String, // 填自己的登录方法
* success: Boolean
* }
*
* purchaseEvent = {
* type: 'purchase', // 必填
* extra: Object, // 附加键值对,格式 {String: String}
* goodsType: String,
* goodsId: String,
* goodsName: String,
* success: Boolen,
* price: float,
* currency: String, // CNY, USD
* count: int
* }
*
* browseEvent = {
* type: 'browse',
* id: String,
* extra: Object, // 附加键值对,格式 {String: String}
* name: String,
* contentType: String,
* duration: float
* }
*
* countEvent = {
* type: 'count',
* extra: Object, // 附加键值对,格式 {String: String}
* id: String
* }
*
* calculateEvent = {
* type: 'calculate',
* extra: Object, // 附加键值对,格式 {String: String}
* id: String,
* value: double
* }
*/
static postEvent(event) {
if (Platform.OS == "android") {
JAnalyticsModule.onEvent(event);
} else {
JAnalyticsModule.eventRecord(event);
}
}
/**
* 设置统计上报的自动周期,未调用前默认即时上报
*
* @param {object} params = {
* period: Number //周期,单位秒,最小10秒,最大1天,超出范围会打印调用失败日志。传0表示统计数据即时上报
* }
*/
static setAnalyticsReportPeriod(params) {
if (Platform.OS == "android") {
JAnalyticsModule.setAnalyticsReportPeriod(params);
}else {
JAnalyticsModule.setFrequency(params);
}
}
/**
* 设置用户信息
* @param {Object} params = {
* accountID: String, // 账号ID
* name: String, // 姓名
* creationTime: Number, // 账号创建时间
* sex: Number, // 性别
* paid: Number, // 是否付费
* birthdate: String, // 出生年月
* phone: String, // 手机号码
* email: String, // 电子邮件
* weiboID: String, // 新浪微博ID
* wechatID: String, // 微信ID
* qqID: String, // QQ ID
* extras: object // Optional. 扩展参数,附加键值对,格式 {String: String}
* }
* @param {Function} success = () => {}
* @param {Function} fail = () => {}
*/
static identifyAccount(params, success, fail) {
JAnalyticsModule.identifyAccount(params, success, fail);
}
//解绑账户
static detachAccount(success, fail) {
JAnalyticsModule.detachAccount(success, fail);
}
//******************************************android Only******************************************
static crashLogOFF() {
if (Platform.OS == "android") {
JAnalyticsModule.stopCrashHandler();
}
}
/**
* Android Only
* 动态配置channel,优先级比AndroidManifest里配置的高,需要在初始化方法 setup 前调用
*
* @param {object} params = {
* channel: String //希望配置的channel
* }
*/
static setChannel(params) {
JAnalyticsModule.setChannel(params);
}
//******************************************iOS Only******************************************
/**
* 上报位置信息 iOS Only
*
* @param {object} params = {
* latitude: float // 经度
* longitude: float // 纬度
* }
*/
static uploadLocation(params) {
if (Platform.OS == "ios") {
JAnalyticsModule.setLatitude(params);
}
}
/**
* 手动将捕获到的错误日志交给原生层上报(仅ios)
*
* @param {object} params = {
* name: string //error.name
* message: string //error.message
* }
*/
static collectRNCrash(params) {
if (Platform.OS === "ios") {
JAnalyticsModule.collectCrash(params);
}
}
/**
* 开启js错误错误日志采集上报(仅ios)
*
* 如果开发者没有手动捕获错误日志,则使用此api即可
*
*/
static rnCrashLogON() {
if (Platform.OS === "ios") {
setJSExceptionHandler((e, isFatal) => {
var param = {
name: e.name + "",
message: e.message + ""
}
JAnalyticsModule.collectCrash(param)
}, true);
}
}
}