-
Notifications
You must be signed in to change notification settings - Fork 26
/
index.js
153 lines (120 loc) · 4.02 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
import {
NativeModules,
} from 'react-native';
const { RNFlurryAnalytics } = NativeModules;
let startSessionIsCalled = false;
const mustCalledPriorStartSession = (methodName) => {
console.error(`FlurryAnalytics.${methodName}: method must be called prior to invoking "startSession"`);
}
export default class FlurryAnalytics {
static startSession(apiKey) {
if (startSessionIsCalled) {
console.error('FlurryAnalytics.startSession: already called');
return;
}
if (!apiKey) {
console.error('FlurryAnalytics.startSession: apiKey(string) is required');
return;
}
RNFlurryAnalytics.startSession(apiKey);
startSessionIsCalled = true;
}
static setAppVersion(version = '1.0') {
if (startSessionIsCalled) {
mustCalledPriorStartSession('setAppVersion');
return;
}
RNFlurryAnalytics.setAppVersion(version);
}
static setDebugLogEnabled(enabled = false) {
if (startSessionIsCalled) {
mustCalledPriorStartSession('setDebugLogEnabled');
return;
}
RNFlurryAnalytics.setDebugLogEnabled(enabled);
}
static setSessionContinueSeconds(seconds = 10) {
if (startSessionIsCalled) {
mustCalledPriorStartSession('setSessionContinueSeconds');
return;
}
if (seconds < 5) {
console.error('FlurryAnalytics.setSessionContinueSeconds: the minimum timeout for a session is 5 seconds');
}
RNFlurryAnalytics.setSessionContinueSeconds(seconds);
}
static setCrashReportingEnabled(enabled = false) {
if (startSessionIsCalled) {
mustCalledPriorStartSession('setCrashReportingEnabled');
return;
}
RNFlurryAnalytics.setCrashReportingEnabled(enabled);
}
/**
* There are three overloads
* - logEvent(eventName)
* - logEvent(eventName, timed)
* - logEvent(eventName, params, timed)
*/
static logEvent(eventName, params, timed) {
if (!eventName || typeof eventName !== 'string') {
console.error(`FlurryAnalytics.logEvent: eventName must be a string. Got ${eventName}`);
return;
}
if (arguments.length === 1) {
RNFlurryAnalytics.logEvent(eventName, false);
}
if (arguments.length === 2) {
if (typeof arguments[1] === 'boolean') {
RNFlurryAnalytics.logEvent(eventName, arguments[1]);
}
if (Object.prototype.toString.call(arguments[1]).includes('Object')) {
RNFlurryAnalytics.logEventWithParameters(eventName, arguments[1], false);
}
}
if (arguments.length === 3) {
RNFlurryAnalytics.logEventWithParameters(eventName, params, timed);
}
}
static endTimedEvent(eventName, params = null) {
if (!eventName || typeof eventName !== 'string') {
console.error(`FlurryAnalytics.endTimedEvent: eventName must be a string. Got ${eventName}`);
return;
}
RNFlurryAnalytics.endTimedEvent(eventName, params);
}
static logPageView() {
RNFlurryAnalytics.logPageView();
}
static setUserId(userId) {
if (!userId || typeof userId !== 'string') {
console.error(`FlurryAnalytics.setUserId: userId must be a string. Got ${userId}`);
return;
}
RNFlurryAnalytics.setUserID(userId);
}
static setUserAge(age) {
if (!age || typeof age !== 'number' || age <= 0) {
console.error(`FlurryAnalytics.setUserAge: age must be a valid positive number. Got ${age}`);
return;
}
RNFlurryAnalytics.setUserAge(age);
}
static setUserGender(gender) {
if (!gender || typeof gender !== 'string' || !['m', 'f'].includes(gender)) {
console.error(`FlurryAnalytics.setUserGender: gender must be on of ['m', 'f']. Got ${gender}`);
return;
}
RNFlurryAnalytics.setUserGender(gender);
}
static mock() {
const methods = Object.getOwnPropertyNames(FlurryAnalytics);
const mockMethod = (methodName) =>
(...args) => console.log(`FlurryAnalytics.${methodName}`, ...args);
methods.forEach((methodName) => {
if (typeof FlurryAnalytics[methodName] === 'function') {
FlurryAnalytics[methodName] = mockMethod(methodName);
}
})
}
}