react-native-gleapsdk 6.4.4 → 6.4.8
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/LICENSE +2 -20
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/reactnativegleapsdk/GleapsdkModule.java +283 -202
- package/android/src/main/java/com/reactnativegleapsdk/NoUiThreadException.java +7 -0
- package/ios/Gleapsdk.m +24 -8
- package/ios/Gleapsdk.xcodeproj/project.xcworkspace/xcuserdata/lukasboehler.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/package.json +1 -1
- package/react-native-gleapsdk.podspec +1 -1
- package/src/index.tsx +5 -0
package/LICENSE
CHANGED
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
Copyright (C) 2020 by Gleap GmbH. Permission is hereby granted to use this framework as is, modification are not allowed. All rights reserved.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
3
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. FURTHER RESELLING OF THE SDK OR IT'S CODE IS ONLY GRANTED WITH A WRITTEN PERMISSION BY GLEAP GMBH.
|
package/android/build.gradle
CHANGED
|
@@ -56,5 +56,5 @@ dependencies {
|
|
|
56
56
|
//noinspection GradleDynamicVersion
|
|
57
57
|
implementation "com.facebook.react:react-native:+" // From node_modules
|
|
58
58
|
// https://mvnrepository.com/artifact/io.gleap/gleap-android-sdk
|
|
59
|
-
implementation group: 'io.gleap', name: 'gleap-android-sdk', version: '6.4.
|
|
59
|
+
implementation group: 'io.gleap', name: 'gleap-android-sdk', version: '6.4.12'
|
|
60
60
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
package com.reactnativegleapsdk;
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
import android.app.Activity;
|
|
5
4
|
import android.os.Build;
|
|
6
5
|
import android.os.Handler;
|
|
@@ -9,8 +8,10 @@ import androidx.annotation.NonNull;
|
|
|
9
8
|
import androidx.annotation.RequiresApi;
|
|
10
9
|
|
|
11
10
|
import com.facebook.react.ReactApplication;
|
|
11
|
+
import com.facebook.react.ReactInstanceManager;
|
|
12
12
|
import com.facebook.react.bridge.LifecycleEventListener;
|
|
13
13
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
14
|
+
import com.facebook.react.bridge.ReactContext;
|
|
14
15
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
15
16
|
import com.facebook.react.bridge.ReactMethod;
|
|
16
17
|
import com.facebook.react.bridge.ReadableArray;
|
|
@@ -27,6 +28,7 @@ import java.io.FileOutputStream;
|
|
|
27
28
|
import java.io.OutputStream;
|
|
28
29
|
import java.util.ArrayList;
|
|
29
30
|
import java.util.Base64;
|
|
31
|
+
import java.util.logging.Logger;
|
|
30
32
|
import java.util.regex.Matcher;
|
|
31
33
|
import java.util.regex.Pattern;
|
|
32
34
|
|
|
@@ -36,6 +38,7 @@ import io.gleap.CustomActionCallback;
|
|
|
36
38
|
import io.gleap.FeedbackSentCallback;
|
|
37
39
|
import io.gleap.FeedbackSentWithDataCallback;
|
|
38
40
|
import io.gleap.FeedbackWillBeSentCallback;
|
|
41
|
+
import io.gleap.GetActivityCallback;
|
|
39
42
|
import io.gleap.Gleap;
|
|
40
43
|
import io.gleap.GleapActivationMethod;
|
|
41
44
|
import io.gleap.GleapUserProperties;
|
|
@@ -47,10 +50,18 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
47
50
|
private boolean isSilentBugReport = false;
|
|
48
51
|
private boolean invalidated = false;
|
|
49
52
|
|
|
50
|
-
public GleapsdkModule(ReactApplicationContext
|
|
51
|
-
super(
|
|
53
|
+
public GleapsdkModule(ReactApplicationContext context) {
|
|
54
|
+
super(context);
|
|
55
|
+
Gleap.getInstance().setGetActivityCallback(new GetActivityCallback() {
|
|
56
|
+
@Override
|
|
57
|
+
public Activity getActivity() {
|
|
58
|
+
return context.getCurrentActivity();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
52
62
|
}
|
|
53
63
|
|
|
64
|
+
|
|
54
65
|
@Override
|
|
55
66
|
@NonNull
|
|
56
67
|
public String getName() {
|
|
@@ -64,86 +75,91 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
64
75
|
*/
|
|
65
76
|
@ReactMethod
|
|
66
77
|
public void initialize(String sdkKey) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
try {
|
|
79
|
+
getActivitySafe().runOnUiThread(
|
|
80
|
+
new Runnable() {
|
|
81
|
+
@Override
|
|
82
|
+
public void run() {
|
|
83
|
+
try {
|
|
84
|
+
Activity activity = getReactApplicationContext()
|
|
85
|
+
.getCurrentActivity();
|
|
86
|
+
if (activity != null && !invalidated) {
|
|
87
|
+
Gleap.getInstance().setApplicationType(APPLICATIONTYPE.REACTNATIVE);
|
|
88
|
+
Gleap.getInstance().setFeedbackWillBeSentCallback(new FeedbackWillBeSentCallback() {
|
|
89
|
+
@Override
|
|
90
|
+
public void flowInvoced() {
|
|
91
|
+
if (!invalidated) {
|
|
92
|
+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
93
|
+
.emit("feedbackWillBeSent", null);
|
|
94
|
+
}
|
|
81
95
|
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
Gleap.initialize(sdkKey, activity.getApplication());
|
|
99
|
+
Gleap.getInstance().setConfigLoadedCallback(new ConfigLoadedCallback() {
|
|
100
|
+
@Override
|
|
101
|
+
public void configLoaded(JSONObject jsonObject) {
|
|
102
|
+
if (!invalidated) {
|
|
103
|
+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
104
|
+
.emit("configLoaded", jsonObject.toString());
|
|
105
|
+
}
|
|
91
106
|
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
Gleap.getInstance().registerCustomAction(new CustomActionCallback() {
|
|
110
|
+
@Override
|
|
111
|
+
public void invoke(String message) {
|
|
112
|
+
JSONObject obj = new JSONObject();
|
|
113
|
+
try {
|
|
114
|
+
obj.put("name", message);
|
|
115
|
+
} catch (JSONException e) {
|
|
116
|
+
e.printStackTrace();
|
|
117
|
+
}
|
|
118
|
+
if (!invalidated) {
|
|
119
|
+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
120
|
+
.emit("customActionTriggered", obj.toString());
|
|
121
|
+
}
|
|
103
122
|
}
|
|
104
|
-
|
|
105
|
-
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
Gleap.getInstance().setFeedbackSentWithDataCallback(new FeedbackSentWithDataCallback() {
|
|
126
|
+
@Override
|
|
127
|
+
public void close(JSONObject jsonObject) {
|
|
128
|
+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
129
|
+
.emit("feedbackSent", jsonObject.toString());
|
|
130
|
+
new java.util.Timer().schedule(
|
|
131
|
+
new java.util.TimerTask() {
|
|
132
|
+
@Override
|
|
133
|
+
public void run() {
|
|
134
|
+
showDevMenu();
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
500);
|
|
106
138
|
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
Gleap.getInstance().setFeedbackSentCallback(new FeedbackSentCallback() {
|
|
127
|
-
@Override
|
|
128
|
-
public void close() {
|
|
129
|
-
new java.util.Timer().schedule(
|
|
130
|
-
new java.util.TimerTask() {
|
|
131
|
-
@Override
|
|
132
|
-
public void run() {
|
|
133
|
-
showDevMenu();
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
500
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
Gleap.getInstance().setFeedbackSentCallback(new FeedbackSentCallback() {
|
|
142
|
+
@Override
|
|
143
|
+
public void close() {
|
|
144
|
+
new java.util.Timer().schedule(
|
|
145
|
+
new java.util.TimerTask() {
|
|
146
|
+
@Override
|
|
147
|
+
public void run() {
|
|
148
|
+
showDevMenu();
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
500);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
} catch (Exception ex) {
|
|
156
|
+
System.out.println(ex);
|
|
140
157
|
}
|
|
141
|
-
} catch (Exception ex) {
|
|
142
|
-
System.out.println(ex);
|
|
143
158
|
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
159
|
+
});
|
|
160
|
+
} catch (NoUiThreadException e) {
|
|
161
|
+
System.err.println(e.getMessage());
|
|
162
|
+
}
|
|
147
163
|
}
|
|
148
164
|
|
|
149
165
|
@ReactMethod
|
|
@@ -161,71 +177,77 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
161
177
|
*/
|
|
162
178
|
@ReactMethod
|
|
163
179
|
public void open() {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
new java.util.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
try {
|
|
181
|
+
getActivitySafe().runOnUiThread(
|
|
182
|
+
new Runnable() {
|
|
183
|
+
@Override
|
|
184
|
+
public void run() {
|
|
185
|
+
try {
|
|
186
|
+
Gleap.getInstance().startFeedbackFlow();
|
|
187
|
+
Gleap.getInstance().setFeedbackSentCallback(new FeedbackSentCallback() {
|
|
188
|
+
@Override
|
|
189
|
+
public void close() {
|
|
190
|
+
new java.util.Timer().schedule(
|
|
191
|
+
new java.util.TimerTask() {
|
|
192
|
+
@Override
|
|
193
|
+
public void run() {
|
|
194
|
+
if (!isSilentBugReport) {
|
|
195
|
+
showDevMenu();
|
|
196
|
+
} else {
|
|
197
|
+
isSilentBugReport = false;
|
|
198
|
+
}
|
|
181
199
|
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
System.out.println(e);
|
|
200
|
+
},
|
|
201
|
+
500);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
} catch (Exception e) {
|
|
205
|
+
System.out.println(e);
|
|
206
|
+
}
|
|
190
207
|
}
|
|
191
|
-
}
|
|
192
|
-
|
|
208
|
+
});
|
|
209
|
+
} catch (NoUiThreadException e) {
|
|
210
|
+
System.err.println(e.getMessage());
|
|
211
|
+
}
|
|
193
212
|
}
|
|
194
213
|
|
|
195
214
|
/**
|
|
196
215
|
* Start bug report manually by calling this function.
|
|
197
216
|
*/
|
|
198
217
|
@ReactMethod
|
|
199
|
-
public void startFeedbackFlow(String feedbackFlow)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
new java.util.
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
218
|
+
public void startFeedbackFlow(String feedbackFlow){
|
|
219
|
+
try {
|
|
220
|
+
getActivitySafe().runOnUiThread(
|
|
221
|
+
new Runnable() {
|
|
222
|
+
@Override
|
|
223
|
+
public void run() {
|
|
224
|
+
try {
|
|
225
|
+
Gleap.getInstance().startFeedbackFlow(feedbackFlow);
|
|
226
|
+
Gleap.getInstance().setFeedbackSentCallback(new FeedbackSentCallback() {
|
|
227
|
+
@Override
|
|
228
|
+
public void close() {
|
|
229
|
+
new java.util.Timer().schedule(
|
|
230
|
+
new java.util.TimerTask() {
|
|
231
|
+
@Override
|
|
232
|
+
public void run() {
|
|
233
|
+
if (!isSilentBugReport) {
|
|
234
|
+
showDevMenu();
|
|
235
|
+
} else {
|
|
236
|
+
isSilentBugReport = false;
|
|
237
|
+
}
|
|
217
238
|
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
System.out.println(e);
|
|
239
|
+
},
|
|
240
|
+
500);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
} catch (Exception e) {
|
|
244
|
+
System.out.println(e);
|
|
245
|
+
}
|
|
226
246
|
}
|
|
227
|
-
}
|
|
228
|
-
|
|
247
|
+
});
|
|
248
|
+
} catch (NoUiThreadException e) {
|
|
249
|
+
System.err.println(e.getMessage());
|
|
250
|
+
}
|
|
229
251
|
}
|
|
230
252
|
|
|
231
253
|
/**
|
|
@@ -234,23 +256,55 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
234
256
|
@ReactMethod
|
|
235
257
|
public void sendSilentBugReport(
|
|
236
258
|
String description,
|
|
237
|
-
String priority
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
259
|
+
String priority) {
|
|
260
|
+
try {
|
|
261
|
+
getActivitySafe().runOnUiThread(
|
|
262
|
+
new Runnable() {
|
|
263
|
+
@Override
|
|
264
|
+
public void run() {
|
|
265
|
+
isSilentBugReport = true;
|
|
266
|
+
Gleap.SEVERITY severity = Gleap.SEVERITY.LOW;
|
|
267
|
+
if (priority == "MEDIUM") {
|
|
268
|
+
severity = Gleap.SEVERITY.MEDIUM;
|
|
269
|
+
}
|
|
270
|
+
if (priority == "HIGH") {
|
|
271
|
+
severity = Gleap.SEVERITY.HIGH;
|
|
272
|
+
}
|
|
273
|
+
Gleap.getInstance().sendSilentBugReport(description, severity);
|
|
247
274
|
}
|
|
248
|
-
|
|
249
|
-
|
|
275
|
+
});
|
|
276
|
+
} catch (NoUiThreadException e) {
|
|
277
|
+
System.err.println(e.getMessage());
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Manually start a silent bug reporting workflow.
|
|
283
|
+
*/
|
|
284
|
+
@ReactMethod
|
|
285
|
+
public void sendSilentBugReportWithType(
|
|
286
|
+
String description,
|
|
287
|
+
String priority,
|
|
288
|
+
String type) {
|
|
289
|
+
try {
|
|
290
|
+
getActivitySafe().runOnUiThread(
|
|
291
|
+
new Runnable() {
|
|
292
|
+
@Override
|
|
293
|
+
public void run() {
|
|
294
|
+
isSilentBugReport = true;
|
|
295
|
+
Gleap.SEVERITY severity = Gleap.SEVERITY.LOW;
|
|
296
|
+
if (priority == "MEDIUM") {
|
|
297
|
+
severity = Gleap.SEVERITY.MEDIUM;
|
|
298
|
+
}
|
|
299
|
+
if (priority == "HIGH") {
|
|
300
|
+
severity = Gleap.SEVERITY.HIGH;
|
|
301
|
+
}
|
|
302
|
+
Gleap.getInstance().sendSilentBugReport(description, severity, type);
|
|
250
303
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
304
|
+
});
|
|
305
|
+
} catch (NoUiThreadException e) {
|
|
306
|
+
System.err.println(e.getMessage());
|
|
307
|
+
}
|
|
254
308
|
}
|
|
255
309
|
|
|
256
310
|
@ReactMethod
|
|
@@ -259,32 +313,40 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
259
313
|
}
|
|
260
314
|
|
|
261
315
|
@ReactMethod
|
|
262
|
-
public void enableDebugConsoleLog() {
|
|
316
|
+
public void enableDebugConsoleLog() {
|
|
317
|
+
}
|
|
263
318
|
|
|
264
319
|
@ReactMethod
|
|
265
320
|
public void identify(String userid, ReadableMap data) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
321
|
+
try {
|
|
322
|
+
getActivitySafe().runOnUiThread(
|
|
323
|
+
new Runnable() {
|
|
324
|
+
@Override
|
|
325
|
+
public void run() {
|
|
326
|
+
JSONObject jsonObject = null;
|
|
327
|
+
String name = "";
|
|
328
|
+
String email = "";
|
|
329
|
+
try {
|
|
330
|
+
jsonObject = GleapUtil.convertMapToJson(data);
|
|
331
|
+
if (jsonObject.has("name")) {
|
|
332
|
+
name = jsonObject.getString("name");
|
|
333
|
+
}
|
|
334
|
+
if (jsonObject.has("email")) {
|
|
335
|
+
email = jsonObject.getString("email");
|
|
336
|
+
}
|
|
337
|
+
} catch (JSONException e) {
|
|
338
|
+
e.printStackTrace();
|
|
277
339
|
}
|
|
278
|
-
|
|
279
|
-
|
|
340
|
+
GleapUserProperties gleapUserSession = new GleapUserProperties(name, email);
|
|
341
|
+
if(Gleap.getInstance() == null) {
|
|
342
|
+
return;
|
|
280
343
|
}
|
|
281
|
-
|
|
282
|
-
e.printStackTrace();
|
|
344
|
+
Gleap.getInstance().identifyUser(userid, gleapUserSession);
|
|
283
345
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
346
|
+
});
|
|
347
|
+
} catch (NoUiThreadException e) {
|
|
348
|
+
System.err.println(e.getMessage());
|
|
349
|
+
}
|
|
288
350
|
}
|
|
289
351
|
|
|
290
352
|
@ReactMethod
|
|
@@ -293,7 +355,8 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
293
355
|
}
|
|
294
356
|
|
|
295
357
|
/**
|
|
296
|
-
* Attaches custom data, which can be viewed in the BugBattle dashboard. New
|
|
358
|
+
* Attaches custom data, which can be viewed in the BugBattle dashboard. New
|
|
359
|
+
* data will be merged with existing custom data.
|
|
297
360
|
*
|
|
298
361
|
* @param customData The data to attach to a bug report.
|
|
299
362
|
* @author BugBattle
|
|
@@ -302,6 +365,9 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
302
365
|
public void attachCustomData(ReadableMap customData) {
|
|
303
366
|
try {
|
|
304
367
|
JSONObject jsonObject = GleapUtil.convertMapToJson(customData);
|
|
368
|
+
if(Gleap.getInstance() == null) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
305
371
|
Gleap.getInstance().appendCustomData(jsonObject);
|
|
306
372
|
} catch (Exception e) {
|
|
307
373
|
System.out.println(e);
|
|
@@ -338,7 +404,8 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
338
404
|
}
|
|
339
405
|
|
|
340
406
|
/**
|
|
341
|
-
* Attaches custom data, which can be viewed in the Gleap dashboard. New data
|
|
407
|
+
* Attaches custom data, which can be viewed in the Gleap dashboard. New data
|
|
408
|
+
* will be merged with existing custom data.
|
|
342
409
|
*
|
|
343
410
|
* @param customData The data to attach to a bug report.
|
|
344
411
|
* @author Gleap
|
|
@@ -365,7 +432,6 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
365
432
|
Gleap.getInstance().setCustomData(key, value);
|
|
366
433
|
}
|
|
367
434
|
|
|
368
|
-
|
|
369
435
|
/**
|
|
370
436
|
* Removes one key from existing custom data.
|
|
371
437
|
*
|
|
@@ -377,7 +443,6 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
377
443
|
Gleap.getInstance().removeCustomDataForKey(key);
|
|
378
444
|
}
|
|
379
445
|
|
|
380
|
-
|
|
381
446
|
/**
|
|
382
447
|
* Sets an array of activation methods.
|
|
383
448
|
*
|
|
@@ -395,10 +460,10 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
395
460
|
internalActivationMethods.add(GleapActivationMethod.SCREENSHOT);
|
|
396
461
|
}
|
|
397
462
|
}
|
|
398
|
-
Gleap.getInstance().setActivationMethods(
|
|
463
|
+
Gleap.getInstance().setActivationMethods(
|
|
464
|
+
internalActivationMethods.toArray(new GleapActivationMethod[internalActivationMethods.size()]));
|
|
399
465
|
}
|
|
400
466
|
|
|
401
|
-
|
|
402
467
|
/**
|
|
403
468
|
* Clears all custom data.
|
|
404
469
|
*/
|
|
@@ -423,7 +488,9 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
423
488
|
if (currentRequest.has("request")) {
|
|
424
489
|
request = (JSONObject) currentRequest.get("request");
|
|
425
490
|
}
|
|
426
|
-
Gleap.getInstance().logNetwork(currentRequest.getString("url"),
|
|
491
|
+
Gleap.getInstance().logNetwork(currentRequest.getString("url"),
|
|
492
|
+
RequestType.valueOf(currentRequest.getString("type")), response.getInt("status"),
|
|
493
|
+
currentRequest.getInt("duration"), request, response);
|
|
427
494
|
}
|
|
428
495
|
|
|
429
496
|
} catch (Exception ex) {
|
|
@@ -460,7 +527,6 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
460
527
|
}
|
|
461
528
|
}
|
|
462
529
|
|
|
463
|
-
|
|
464
530
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
|
465
531
|
@ReactMethod
|
|
466
532
|
/**
|
|
@@ -559,41 +625,48 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
559
625
|
* Show dev menu after shaking the phone.
|
|
560
626
|
*/
|
|
561
627
|
private void showDevMenu() {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
e
|
|
628
|
+
try {
|
|
629
|
+
getActivitySafe().runOnUiThread(
|
|
630
|
+
new Runnable() {
|
|
631
|
+
@Override
|
|
632
|
+
public void run() {
|
|
633
|
+
final ReactApplication application = (ReactApplication) getReactApplicationContext()
|
|
634
|
+
.getCurrentActivity()
|
|
635
|
+
.getApplication();
|
|
636
|
+
Handler mainHandler = new Handler(GleapsdkModule.this.getReactApplicationContext().getMainLooper());
|
|
637
|
+
Runnable myRunnable = new Runnable() {
|
|
638
|
+
@Override
|
|
639
|
+
public void run() {
|
|
640
|
+
try {
|
|
641
|
+
application
|
|
642
|
+
.getReactNativeHost()
|
|
643
|
+
.getReactInstanceManager()
|
|
644
|
+
.getDevSupportManager()
|
|
645
|
+
.showDevOptionsDialog();
|
|
646
|
+
} catch (Exception e) {
|
|
647
|
+
e.printStackTrace();
|
|
648
|
+
}
|
|
581
649
|
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
}
|
|
586
|
-
|
|
650
|
+
};
|
|
651
|
+
mainHandler.post(myRunnable);
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
} catch (NoUiThreadException e) {
|
|
655
|
+
System.err.println(e.getMessage());
|
|
656
|
+
}
|
|
587
657
|
}
|
|
588
658
|
|
|
589
659
|
@Override
|
|
590
|
-
public void onHostResume() {
|
|
660
|
+
public void onHostResume() {
|
|
661
|
+
}
|
|
591
662
|
|
|
592
663
|
@Override
|
|
593
|
-
public void onHostPause() {
|
|
664
|
+
public void onHostPause() {
|
|
665
|
+
}
|
|
594
666
|
|
|
595
667
|
@Override
|
|
596
|
-
public void onHostDestroy() {
|
|
668
|
+
public void onHostDestroy() {
|
|
669
|
+
}
|
|
597
670
|
|
|
598
671
|
@Override
|
|
599
672
|
public void onCatalystInstanceDestroy() {
|
|
@@ -606,4 +679,12 @@ public class GleapsdkModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
606
679
|
invalidated = true;
|
|
607
680
|
super.invalidate();
|
|
608
681
|
}
|
|
682
|
+
|
|
683
|
+
private Activity getActivitySafe() throws NoUiThreadException {
|
|
684
|
+
Activity activity = getCurrentActivity();
|
|
685
|
+
if(activity == null) {
|
|
686
|
+
throw new NoUiThreadException();
|
|
687
|
+
}
|
|
688
|
+
return activity;
|
|
689
|
+
}
|
|
609
690
|
}
|
package/ios/Gleapsdk.m
CHANGED
|
@@ -64,16 +64,18 @@ RCT_EXPORT_METHOD(initialize:(NSString *)token)
|
|
|
64
64
|
}
|
|
65
65
|
}];
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
[
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
[
|
|
67
|
+
if ([Gleap sharedInstance].activationMethods.count == 0) {
|
|
68
|
+
NSMutableArray *activationMethods = [[NSMutableArray alloc] init];
|
|
69
|
+
if ([config objectForKey: @"activationMethodShake"] != nil && [[config objectForKey: @"activationMethodShake"] boolValue] == YES) {
|
|
70
|
+
[activationMethods addObject: @(SHAKE)];
|
|
71
|
+
}
|
|
72
|
+
if ([config objectForKey: @"activationMethodScreenshotGesture"] != nil && [[config objectForKey: @"activationMethodScreenshotGesture"] boolValue] == YES) {
|
|
73
|
+
[activationMethods addObject: @(SCREENSHOT)];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
[[Gleap sharedInstance] setActivationMethods: activationMethods];
|
|
73
77
|
}
|
|
74
78
|
|
|
75
|
-
[[Gleap sharedInstance] setActivationMethods: activationMethods];
|
|
76
|
-
|
|
77
79
|
if (_hasListeners) {
|
|
78
80
|
[self sendEventWithName:@"configLoaded" body: config];
|
|
79
81
|
}
|
|
@@ -140,6 +142,20 @@ RCT_EXPORT_METHOD(sendSilentBugReport:(NSString *)description andSeverity:(NSStr
|
|
|
140
142
|
});
|
|
141
143
|
}
|
|
142
144
|
|
|
145
|
+
RCT_EXPORT_METHOD(sendSilentBugReportWithType:(NSString *)description andSeverity:(NSString *)priority andType:(NSString *)type)
|
|
146
|
+
{
|
|
147
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
148
|
+
GleapBugSeverity prio = MEDIUM;
|
|
149
|
+
if ([priority isEqualToString: @"LOW"]) {
|
|
150
|
+
prio = LOW;
|
|
151
|
+
}
|
|
152
|
+
if ([priority isEqualToString: @"HIGH"]) {
|
|
153
|
+
prio = HIGH;
|
|
154
|
+
}
|
|
155
|
+
[Gleap sendSilentBugReportWith: description andSeverity: prio andType: type];
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
143
159
|
RCT_EXPORT_METHOD(attachNetworkLog:(NSArray *)networkLogs)
|
|
144
160
|
{
|
|
145
161
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["LINKING_ERROR","Platform","select","ios","default","GleapSdk","NativeModules","Gleapsdk","Proxy","get","Error","touched","networkLogger","GleapNetworkIntercepter","startNetworkLogging","start","stopNetworkLogging","setStopped","callbacks","registerListener","eventType","callback","push","registerCustomAction","customActionCallback","notifyCallback","data","length","i","gleapEmitter","NativeEventEmitter","addListener","config","configJSON","Object","JSON","parse","enableNetworkLogs","exp","requests","getRequests","OS","attachNetworkLog","stringify","dataJSON","isJsonString","str","e","name","removeAllAttachments"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,MAAMA,aAAa,GAChB,gFAAD,GACAC,sBAASC,MAAT,CAAgB;AAAEC,EAAAA,GAAG,EAAE,gCAAP;AAAyCC,EAAAA,OAAO,EAAE;AAAlD,CAAhB,CADA,GAEA,sDAFA,GAGA,6CAJF;
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["LINKING_ERROR","Platform","select","ios","default","GleapSdk","NativeModules","Gleapsdk","Proxy","get","Error","touched","networkLogger","GleapNetworkIntercepter","startNetworkLogging","start","stopNetworkLogging","setStopped","callbacks","registerListener","eventType","callback","push","registerCustomAction","customActionCallback","notifyCallback","data","length","i","gleapEmitter","NativeEventEmitter","addListener","config","configJSON","Object","JSON","parse","enableNetworkLogs","exp","requests","getRequests","OS","attachNetworkLog","stringify","dataJSON","isJsonString","str","e","name","removeAllAttachments"],"mappings":"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","sourcesContent":["import { NativeModules, NativeEventEmitter, Platform } from 'react-native';\nimport GleapNetworkIntercepter from './networklogger';\n\nconst LINKING_ERROR =\n `The package 'react-native-gleapsdk' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nexport type GleapUserProperty = {\n email?: string;\n name?: string;\n};\n\ntype GleapActivationMethod = 'SHAKE' | 'SCREENSHOT';\n\ntype GleapSdkType = {\n initialize(token: string): void;\n open(): void;\n startFeedbackFlow(feedbackFlow: string): void;\n sendSilentBugReport(\n description: string,\n severity: 'LOW' | 'MEDIUM' | 'HIGH'\n ): void;\n sendSilentBugReportWithType(\n description: string,\n severity: 'LOW' | 'MEDIUM' | 'HIGH',\n type: string\n ): void;\n identify(userId: string, userProperties: GleapUserProperty): void;\n clearIdentity(): void;\n setApiUrl(apiUrl: string): void;\n setWidgetUrl(widgetUrl: string): void;\n attachCustomData(customData: any): void;\n setCustomData(key: string, value: string): void;\n removeCustomDataForKey(key: string): void;\n clearCustomData(): void;\n registerCustomAction(\n customActionCallback: (data: { name: string }) => void\n ): void;\n registerListener(eventType: string, callback: (data?: any) => void): void;\n setLanguage(language: string): void;\n logEvent(name: string, data: any): void;\n addAttachment(base64file: string, fileName: string): void;\n removeAllAttachments(): void;\n startNetworkLogging(): void;\n stopNetworkLogging(): void;\n enableDebugConsoleLog(): void;\n setActivationMethods(activationMethods: GleapActivationMethod[]): void;\n};\n\nconst GleapSdk = NativeModules.Gleapsdk\n ? NativeModules.Gleapsdk\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nif (GleapSdk && !GleapSdk.touched) {\n const networkLogger = new GleapNetworkIntercepter();\n\n GleapSdk.startNetworkLogging = () => {\n networkLogger.start();\n };\n\n GleapSdk.stopNetworkLogging = () => {\n networkLogger.setStopped(true);\n };\n\n var callbacks: any = {};\n\n GleapSdk.registerListener = (eventType: string, callback: any) => {\n if (!callbacks[eventType]) {\n callbacks[eventType] = [];\n }\n callbacks[eventType].push(callback);\n };\n\n GleapSdk.registerCustomAction = (customActionCallback: any) => {\n GleapSdk.registerListener('customActionTriggered', customActionCallback);\n };\n\n const notifyCallback = function (eventType: string, data?: any) {\n if (callbacks && callbacks[eventType] && callbacks[eventType].length > 0) {\n for (var i = 0; i < callbacks[eventType].length; i++) {\n if (callbacks[eventType][i]) {\n callbacks[eventType][i](data);\n }\n }\n }\n };\n\n const gleapEmitter = new NativeEventEmitter(NativeModules.Gleapsdk);\n\n gleapEmitter.addListener('configLoaded', (config: any) => {\n try {\n const configJSON = config instanceof Object ? config : JSON.parse(config);\n if (configJSON.enableNetworkLogs) {\n GleapSdk.startNetworkLogging();\n }\n notifyCallback('configLoaded', configJSON);\n } catch (exp) {}\n });\n\n gleapEmitter.addListener('feedbackWillBeSent', () => {\n // Push the network log to the native SDK.\n const requests = networkLogger.getRequests();\n if (Platform.OS === 'android') {\n GleapSdk.attachNetworkLog(JSON.stringify(requests));\n } else {\n GleapSdk.attachNetworkLog(JSON.parse(JSON.stringify(requests)));\n }\n\n notifyCallback('feedbackWillBeSent');\n });\n\n gleapEmitter.addListener('feedbackSent', (data) => {\n try {\n const dataJSON = data instanceof Object ? data : JSON.parse(data);\n notifyCallback('feedbackSent', dataJSON);\n } catch (exp) {}\n });\n\n gleapEmitter.addListener('feedbackSendingFailed', () => {\n notifyCallback('feedbackSendingFailed');\n });\n\n function isJsonString(str: string) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n gleapEmitter.addListener('customActionTriggered', (data: any) => {\n try {\n if (isJsonString(data)) {\n data = JSON.parse(data);\n }\n const { name } = data;\n if (name) {\n notifyCallback('customActionTriggered', {\n name,\n });\n }\n } catch (exp) {}\n });\n\n GleapSdk.removeAllAttachments();\n\n GleapSdk.touched = true;\n}\n\nexport default GleapSdk as GleapSdkType;\n"]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["NativeModules","NativeEventEmitter","Platform","GleapNetworkIntercepter","LINKING_ERROR","select","ios","default","GleapSdk","Gleapsdk","Proxy","get","Error","touched","networkLogger","startNetworkLogging","start","stopNetworkLogging","setStopped","callbacks","registerListener","eventType","callback","push","registerCustomAction","customActionCallback","notifyCallback","data","length","i","gleapEmitter","addListener","config","configJSON","Object","JSON","parse","enableNetworkLogs","exp","requests","getRequests","OS","attachNetworkLog","stringify","dataJSON","isJsonString","str","e","name","removeAllAttachments"],"mappings":"AAAA,SAASA,aAAT,EAAwBC,kBAAxB,EAA4CC,QAA5C,QAA4D,cAA5D;AACA,OAAOC,uBAAP,MAAoC,iBAApC;AAEA,MAAMC,aAAa,GAChB,gFAAD,GACAF,QAAQ,CAACG,MAAT,CAAgB;AAAEC,EAAAA,GAAG,EAAE,gCAAP;AAAyCC,EAAAA,OAAO,EAAE;AAAlD,CAAhB,CADA,GAEA,sDAFA,GAGA,6CAJF;
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["NativeModules","NativeEventEmitter","Platform","GleapNetworkIntercepter","LINKING_ERROR","select","ios","default","GleapSdk","Gleapsdk","Proxy","get","Error","touched","networkLogger","startNetworkLogging","start","stopNetworkLogging","setStopped","callbacks","registerListener","eventType","callback","push","registerCustomAction","customActionCallback","notifyCallback","data","length","i","gleapEmitter","addListener","config","configJSON","Object","JSON","parse","enableNetworkLogs","exp","requests","getRequests","OS","attachNetworkLog","stringify","dataJSON","isJsonString","str","e","name","removeAllAttachments"],"mappings":"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","sourcesContent":["import { NativeModules, NativeEventEmitter, Platform } from 'react-native';\nimport GleapNetworkIntercepter from './networklogger';\n\nconst LINKING_ERROR =\n `The package 'react-native-gleapsdk' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nexport type GleapUserProperty = {\n email?: string;\n name?: string;\n};\n\ntype GleapActivationMethod = 'SHAKE' | 'SCREENSHOT';\n\ntype GleapSdkType = {\n initialize(token: string): void;\n open(): void;\n startFeedbackFlow(feedbackFlow: string): void;\n sendSilentBugReport(\n description: string,\n severity: 'LOW' | 'MEDIUM' | 'HIGH'\n ): void;\n sendSilentBugReportWithType(\n description: string,\n severity: 'LOW' | 'MEDIUM' | 'HIGH',\n type: string\n ): void;\n identify(userId: string, userProperties: GleapUserProperty): void;\n clearIdentity(): void;\n setApiUrl(apiUrl: string): void;\n setWidgetUrl(widgetUrl: string): void;\n attachCustomData(customData: any): void;\n setCustomData(key: string, value: string): void;\n removeCustomDataForKey(key: string): void;\n clearCustomData(): void;\n registerCustomAction(\n customActionCallback: (data: { name: string }) => void\n ): void;\n registerListener(eventType: string, callback: (data?: any) => void): void;\n setLanguage(language: string): void;\n logEvent(name: string, data: any): void;\n addAttachment(base64file: string, fileName: string): void;\n removeAllAttachments(): void;\n startNetworkLogging(): void;\n stopNetworkLogging(): void;\n enableDebugConsoleLog(): void;\n setActivationMethods(activationMethods: GleapActivationMethod[]): void;\n};\n\nconst GleapSdk = NativeModules.Gleapsdk\n ? NativeModules.Gleapsdk\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nif (GleapSdk && !GleapSdk.touched) {\n const networkLogger = new GleapNetworkIntercepter();\n\n GleapSdk.startNetworkLogging = () => {\n networkLogger.start();\n };\n\n GleapSdk.stopNetworkLogging = () => {\n networkLogger.setStopped(true);\n };\n\n var callbacks: any = {};\n\n GleapSdk.registerListener = (eventType: string, callback: any) => {\n if (!callbacks[eventType]) {\n callbacks[eventType] = [];\n }\n callbacks[eventType].push(callback);\n };\n\n GleapSdk.registerCustomAction = (customActionCallback: any) => {\n GleapSdk.registerListener('customActionTriggered', customActionCallback);\n };\n\n const notifyCallback = function (eventType: string, data?: any) {\n if (callbacks && callbacks[eventType] && callbacks[eventType].length > 0) {\n for (var i = 0; i < callbacks[eventType].length; i++) {\n if (callbacks[eventType][i]) {\n callbacks[eventType][i](data);\n }\n }\n }\n };\n\n const gleapEmitter = new NativeEventEmitter(NativeModules.Gleapsdk);\n\n gleapEmitter.addListener('configLoaded', (config: any) => {\n try {\n const configJSON = config instanceof Object ? config : JSON.parse(config);\n if (configJSON.enableNetworkLogs) {\n GleapSdk.startNetworkLogging();\n }\n notifyCallback('configLoaded', configJSON);\n } catch (exp) {}\n });\n\n gleapEmitter.addListener('feedbackWillBeSent', () => {\n // Push the network log to the native SDK.\n const requests = networkLogger.getRequests();\n if (Platform.OS === 'android') {\n GleapSdk.attachNetworkLog(JSON.stringify(requests));\n } else {\n GleapSdk.attachNetworkLog(JSON.parse(JSON.stringify(requests)));\n }\n\n notifyCallback('feedbackWillBeSent');\n });\n\n gleapEmitter.addListener('feedbackSent', (data) => {\n try {\n const dataJSON = data instanceof Object ? data : JSON.parse(data);\n notifyCallback('feedbackSent', dataJSON);\n } catch (exp) {}\n });\n\n gleapEmitter.addListener('feedbackSendingFailed', () => {\n notifyCallback('feedbackSendingFailed');\n });\n\n function isJsonString(str: string) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n gleapEmitter.addListener('customActionTriggered', (data: any) => {\n try {\n if (isJsonString(data)) {\n data = JSON.parse(data);\n }\n const { name } = data;\n if (name) {\n notifyCallback('customActionTriggered', {\n name,\n });\n }\n } catch (exp) {}\n });\n\n GleapSdk.removeAllAttachments();\n\n GleapSdk.touched = true;\n}\n\nexport default GleapSdk as GleapSdkType;\n"]}
|
|
@@ -8,6 +8,7 @@ declare type GleapSdkType = {
|
|
|
8
8
|
open(): void;
|
|
9
9
|
startFeedbackFlow(feedbackFlow: string): void;
|
|
10
10
|
sendSilentBugReport(description: string, severity: 'LOW' | 'MEDIUM' | 'HIGH'): void;
|
|
11
|
+
sendSilentBugReportWithType(description: string, severity: 'LOW' | 'MEDIUM' | 'HIGH', type: string): void;
|
|
11
12
|
identify(userId: string, userProperties: GleapUserProperty): void;
|
|
12
13
|
clearIdentity(): void;
|
|
13
14
|
setApiUrl(apiUrl: string): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-gleapsdk",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.8",
|
|
4
4
|
"description": "Know exactly why and how a bug happened. Get reports with screenshots, live action replays and all of the important metadata every time.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
package/src/index.tsx
CHANGED
|
@@ -22,6 +22,11 @@ type GleapSdkType = {
|
|
|
22
22
|
description: string,
|
|
23
23
|
severity: 'LOW' | 'MEDIUM' | 'HIGH'
|
|
24
24
|
): void;
|
|
25
|
+
sendSilentBugReportWithType(
|
|
26
|
+
description: string,
|
|
27
|
+
severity: 'LOW' | 'MEDIUM' | 'HIGH',
|
|
28
|
+
type: string
|
|
29
|
+
): void;
|
|
25
30
|
identify(userId: string, userProperties: GleapUserProperty): void;
|
|
26
31
|
clearIdentity(): void;
|
|
27
32
|
setApiUrl(apiUrl: string): void;
|