Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 46b89d8

Browse files
Expose the Crashlytics 'crash()' function #1215
1 parent 80ded2e commit 46b89d8

File tree

9 files changed

+155
-14
lines changed

9 files changed

+155
-14
lines changed

demo/app/main-page.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,7 @@
218218
<Label row="45" colSpan="2" text="Firebase Crash Reporing / Crashlytics" class="subtitle"/>
219219

220220
<Button row="46" col="0" text="log message" tap="{{ doLogMessage }}" class="button button-crash"/>
221-
<iOS>
222-
<Button row="46" col="1" text="force crash :)" tap="{{ doForceCrashIOS }}" class="button button-crash"/>
223-
</iOS>
224-
<Android>
225-
<Button row="46" col="1" text="force crash :)" tap="{{ doForceCrashAndroid }}" class="button button-crash"/>
226-
</Android>
221+
<Button row="46" col="1" text="force crash :)" tap="{{ doCrash }}" class="button button-crash"/>
227222
<Button row="47" col="0" text="log message crashlytics" tap="{{ doLogMessageCrashlytics }}" class="button button-crash"/>
228223
<Button row="47" col="1" text="set string crashlytics" tap="{{ doSetCrashlyticString }}" class="button button-crash"/>
229224
<Button row="48" col="0" text="set bool crashlytics" tap="{{ doSetCrashlyticBool }}" class="button button-crash"/>

demo/app/main-view-model.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1895,12 +1895,9 @@ export class HelloWorldModel extends Observable {
18951895
);
18961896
}
18971897

1898-
public doForceCrashIOS(): void {
1899-
Crashlytics.sharedInstance().crash();
1900-
}
1901-
1902-
public doForceCrashAndroid(): void {
1903-
throw new java.lang.Exception("Forced an exception.");
1898+
public doCrash(): void {
1899+
console.log("Gonna crash on demand");
1900+
firebaseCrashlytics.crash();
19041901
}
19051902

19061903
public doLogMessageCrashlytics(): void {

demo/app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"android": {
2929
"v8Flags": "--expose_gc"
3030
},
31-
"discardUncaughtJsExceptions": true,
31+
"discardUncaughtJsExceptions": false,
3232
"devDependencies": {
3333
"nativescript-dev-typescript": "^0.3.0"
3434
},

docs/CRASHREPORTING.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ if (isAndroid) {
4444
Set a value that will be logged with an error and showing in the Firebase console on the 'Keys' tab of the error details.
4545

4646
```typescript
47-
import { crashlytics } from "nativescript-plugin-firebase"; // and do: crashlytics.sendCrashLog
47+
import { crashlytics } from "nativescript-plugin-firebase";
4848

4949
crashlytics.setString("test_key", "test_value");
5050
crashlytics.setBool("test_key_bool", true);
@@ -54,3 +54,14 @@ crashlytics.setFloat("test_key", 54646.45);
5454

5555
crashlytics.setUserId("user#42");
5656
```
57+
58+
### `crash`
59+
For easier testing, version 8.2.0 exposed this `crash()` function of the native Firebase Crashlytics SDKs:
60+
61+
```typescript
62+
import { crashlytics } from "nativescript-plugin-firebase";
63+
64+
crashlytics.crash();
65+
```
66+
67+
This should crash your app. 😱

src/crashlytics/crashlytics.android.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ export function setUserId(id: string): void {
5252
}
5353
}
5454

55+
export function crash(): void {
56+
if (isCrashlyticsAvailable()) {
57+
com.crashlytics.android.Crashlytics.crash();
58+
}
59+
}
60+
5561
function isCrashlyticsAvailable(): boolean {
5662
if (typeof (com.crashlytics) === "undefined" || typeof (com.crashlytics.android.Crashlytics) === "undefined") {
5763
console.log("Add 'crashlytics: true' to firebase.nativescript.json and remove the platforms folder");

src/crashlytics/crashlytics.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ export declare function setInt(key: string, value: number): void;
1717
export declare function setDouble(key: string, value: number): void;
1818

1919
export declare function setUserId(userId: string): void;
20+
21+
export declare function crash(): void;

src/crashlytics/crashlytics.ios.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ export function setUserId(id: string): void {
5050
}
5151
}
5252

53+
export function crash(): void {
54+
if (isCrashlyticsAvailable()) {
55+
Crashlytics.sharedInstance().crash();
56+
}
57+
}
58+
5359
function isCrashlyticsAvailable(): boolean {
5460
if (typeof (Crashlytics) === "undefined") {
5561
console.log("Add 'crashlytics: true' to firebase.nativescript.json and remove the platforms folder");
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
declare module native { export class Array<T> { constructor(); length: number; [index: number]: T; } }
2+
3+
import globalAndroid = android;
4+
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/// <reference path="android-declarations.d.ts"/>
2+
3+
declare module com {
4+
export module crashlytics {
5+
export module android {
6+
export class BuildConfig {
7+
public static class: java.lang.Class<com.crashlytics.android.BuildConfig>;
8+
public static DEBUG: boolean;
9+
public static APPLICATION_ID: string;
10+
public static BUILD_TYPE: string;
11+
public static FLAVOR: string;
12+
public static VERSION_CODE: number;
13+
public static VERSION_NAME: string;
14+
public static ARTIFACT_ID: string;
15+
public static BUILD_NUMBER: string;
16+
public static GOOGLE_PLAY_SDK_VERSION_STRING: string;
17+
public static GROUP: string;
18+
public constructor();
19+
}
20+
}
21+
}
22+
}
23+
24+
declare module com {
25+
export module crashlytics {
26+
export module android {
27+
export class Crashlytics extends io.fabric.sdk.android.Kit<java.lang.Void> implements io.fabric.sdk.android.KitGroup {
28+
public static class: java.lang.Class<com.crashlytics.android.Crashlytics>;
29+
public static TAG: string;
30+
public answers: com.crashlytics.android.answers.Answers;
31+
public beta: com.crashlytics.android.beta.Beta;
32+
public core: com.crashlytics.android.core.CrashlyticsCore;
33+
public kits: java.util.Collection<any>;
34+
public static getPinningInfoProvider(): com.crashlytics.android.core.PinningInfoProvider;
35+
public static setUserIdentifier(param0: string): void;
36+
public static setPinningInfoProvider(param0: com.crashlytics.android.core.PinningInfoProvider): void;
37+
public static setFloat(param0: string, param1: number): void;
38+
public constructor();
39+
public getDebugMode(): boolean;
40+
public static setInt(param0: string, param1: number): void;
41+
public getKits(): java.util.Collection<any>;
42+
public static log(param0: string): void;
43+
public static setUserEmail(param0: string): void;
44+
public setListener(param0: com.crashlytics.android.core.CrashlyticsListener): void;
45+
public setDebugMode(param0: boolean): void;
46+
public crash(): void;
47+
public static setUserName(param0: string): void;
48+
public static setDouble(param0: string, param1: number): void;
49+
public static setBool(param0: string, param1: boolean): void;
50+
public verifyPinning(param0: java.net.URL): boolean;
51+
public static getInstance(): com.crashlytics.android.Crashlytics;
52+
public getVersion(): string;
53+
public static setString(param0: string, param1: string): void;
54+
public static logException(param0: java.lang.Throwable): void;
55+
public doInBackground(): java.lang.Void;
56+
public getIdentifier(): string;
57+
public static setLong(param0: string, param1: number): void;
58+
public static log(param0: number, param1: string, param2: string): void;
59+
}
60+
export module Crashlytics {
61+
export class Builder {
62+
public static class: java.lang.Class<com.crashlytics.android.Crashlytics.Builder>;
63+
public constructor();
64+
public answers(param0: com.crashlytics.android.answers.Answers): com.crashlytics.android.Crashlytics.Builder;
65+
public build(): com.crashlytics.android.Crashlytics;
66+
public delay(param0: number): com.crashlytics.android.Crashlytics.Builder;
67+
public beta(param0: com.crashlytics.android.beta.Beta): com.crashlytics.android.Crashlytics.Builder;
68+
public listener(param0: com.crashlytics.android.core.CrashlyticsListener): com.crashlytics.android.Crashlytics.Builder;
69+
public core(param0: com.crashlytics.android.core.CrashlyticsCore): com.crashlytics.android.Crashlytics.Builder;
70+
public disabled(param0: boolean): com.crashlytics.android.Crashlytics.Builder;
71+
public pinningInfo(param0: com.crashlytics.android.core.PinningInfoProvider): com.crashlytics.android.Crashlytics.Builder;
72+
}
73+
}
74+
}
75+
}
76+
}
77+
78+
declare module com {
79+
export module crashlytics {
80+
export module android {
81+
export class CrashlyticsInitProvider {
82+
public static class: java.lang.Class<com.crashlytics.android.CrashlyticsInitProvider>;
83+
public getType(param0: globalAndroid.net.Uri): string;
84+
public insert(param0: globalAndroid.net.Uri, param1: globalAndroid.content.ContentValues): globalAndroid.net.Uri;
85+
public update(param0: globalAndroid.net.Uri, param1: globalAndroid.content.ContentValues, param2: string, param3: native.Array<string>): number;
86+
public delete(param0: globalAndroid.net.Uri, param1: string, param2: native.Array<string>): number;
87+
public query(param0: globalAndroid.net.Uri, param1: native.Array<string>, param2: string, param3: native.Array<string>, param4: string): globalAndroid.database.Cursor;
88+
public onCreate(): boolean;
89+
public constructor();
90+
}
91+
export module CrashlyticsInitProvider {
92+
export class EnabledCheckStrategy {
93+
public static class: java.lang.Class<com.crashlytics.android.CrashlyticsInitProvider.EnabledCheckStrategy>;
94+
/**
95+
* Constructs a new instance of the com.crashlytics.android.CrashlyticsInitProvider$EnabledCheckStrategy interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
96+
*/
97+
public constructor(implementation: {
98+
isCrashlyticsEnabled(param0: globalAndroid.content.Context): boolean;
99+
});
100+
public constructor();
101+
public isCrashlyticsEnabled(param0: globalAndroid.content.Context): boolean;
102+
}
103+
}
104+
}
105+
}
106+
}
107+
108+
declare module com {
109+
export module crashlytics {
110+
export module android {
111+
export class ManifestEnabledCheckStrategy extends com.crashlytics.android.CrashlyticsInitProvider.EnabledCheckStrategy {
112+
public static class: java.lang.Class<com.crashlytics.android.ManifestEnabledCheckStrategy>;
113+
public isCrashlyticsEnabled(param0: globalAndroid.content.Context): boolean;
114+
}
115+
}
116+
}
117+
}
118+
119+
//Generics information:
120+

0 commit comments

Comments
 (0)