/nativescript-sentry

Sentry java/cocoa for nativescript

Primary LanguageTypeScriptApache License 2.0Apache-2.0

Sentry.io for NativeScript

npm npm

NativeScript plugin that uses sentry-android and sentry-cocoa to catch native errors/stack traces and send them to a sentry server.


7️⃣ – This is the documentation of v2 which is compatible with NativeScript 7
🚧 – Currently in alpha state, use with caution!
6️⃣ – If you are using NativeScript 6, use a v1 release.


Installation

ns plugin add nativescript-sentry

Configuration

Android

Add the following line to your AndroidManifest.xml within the <application>-tag:

<meta-data android:name="io.sentry.dsn" android:value="__YOUR_DSN_HERE__" />

Without Angular

import { Sentry } from 'nativescript-sentry';
const dsn = 'https://<key>:<secret>@host/<project>';
Sentry.init(dsn);

With Angular

import { SentryModule } from 'nativescript-sentry/angular';

NgModule({
  // ...
  imports: [
    SentryModule.forRoot({
      dsn: 'https://<key>:<secret>@host/<project>',
      discardUncaughtJsExceptions: true
    })
  ]
  // ...
});

Note: this plugin adds a custom ErrorHandler to your angular app

Usage

Capture an exception

Sentry.captureException(exeption: Error, options?: ExceptionOptions);
export interface ExceptionOptions {
  // Object of additional Key/value pairs which generate breakdowns charts and search filters in Sentry.
  tags?: object;

  // Object of unstructured data which is stored with events.
  extra?: object;
}

Example:

try {
  throw new Error('Whoops!');
} catch (error) {
  Sentry.captureException(error, {});
}

Capture a message

Sentry.captureMessage(message: string, options?: MessageOptions)
export interface MessageOptions {
  level?: Level;

  // Object of additional Key/value pairs which generate breakdowns charts and search filters.
  tags?: object;

  // Object of unstructured data which is stored with events.
  extra?: object;
}

export enum Level {
  Fatal = 'fatal',
  Error = 'error',
  Warning = 'warning',
  Info = 'info',
  Debug = 'debug'
}

Capture navigation breadcrumb

Sentry.captureBreadcrumb(breadcrumb: BreadCrumb)
export interface BreadCrumb {
  message: string;
  category: string;
  level: Level;
}

Set user

Sentry.setContextUser(user: SentryUser)
export interface SentryUser {
  id: string;
  email?: string;
  username?: string;
}

Set tags

Sentry.setContextTags(tags: object)

Set extra information

Sentry.setContextExtra(extra: object)

Clear context (user, tags, extra information)

Sentry.clearContext();

Troubleshooting and important remarks

Native Exceptions / Crashes

If you have a native exception and the app exits, the plugin will save the log and send it in the next app startup, this is how the native plugins are implemented and it is expected behavior.

Android SLF4J Log Error

Sentry has an optional dependency on SLF4J on Android, which when not present will log an error about it not being in the application.

System.err: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
System.err: SLF4J: Defaulting to no-operation (NOP) logger implementation
System.err: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

To get rid of this log warning you can add a dependency to your app's app.gradle file located in App_Resources/Android/app.gradle to include:

compile 'org.slf4j:slf4j-nop:1.7.25'

in the dependencies. See the demo app.

Demo Apps

To run and test the demo apps you need to replace the placeholder __YOUR_DSN_HERE__ by your own DSN in the following files:

  • demo/App_Resources/Android/src/main/AndroidManifest.xml
  • demo/app/app.ts
  • demo-ng/App_Resources/Android/src/main/AndroidManifest.xml
  • demo-ng/src/app.module.ts

Changelog

2.0.0-alpha.1 – (10.09.2020)

  • update Android SDK
  • update for NativeScript 7
  • add workflows for demo apps

Thanks to @bradmartin!

1.10.3 – (10.09.2020)

  • Release new version under original name on npmjs.org

1.10.2 – (17.04.2020)

  • Fix GitHub Workflow to use existing publishing scripts

1.10.1 – (17.04.2020)

  • Set up GitHub Workflow for npm publising

1.10.0 – (15.04.2020)

  • Bumps to latest native SDK releases
  • Stringifies data before writing it to Extras (Android)

Package was forked from the unmaintained package danielgek/nativescript-sentry. Access to original npm package has been transfered. Many thanks to @danielgek for his original work on this plugin!


1.8.0 – (02.02.2019)

  • bumps to latest native SDK releases
  • implements improved data converter(#22)
  • adds data to SentryUser

Thanks to @bradmartin and @jerbob92!

1.6.1 – (28.11.2018)

  • back to native approach thanks to @bradmartin
  • update dependencies
  • update test app
  • working native breadcrums for ios
  • fix dsn init thanks to @kvnvelasco

1.5.0 – (11.12.2017)

BREAKING CHANGES

  • capture() method was deprecated in favor of captureMessage/captureException

Features

  • Moving to an hybrid approach with both clients (web/native)
  • breadcrumbs
  • tags
  • user info
  • set tags and extra for each event

1.3.0 – (28.08.2017)

  • fix Aot compilation for angular apps
  • fix typos thanks to @muratcorlu

1.2.0 – (02.08.2017)

  • update demos dependencies
  • update ios and android native dependencies
  • fix ios event capture

1.1.0 – (24.07.2017)

  • fix stringify
  • fix angular error handler

Credits

  • @danielgek: for being the original author of this plugin danielgek/nativescript-sentry
  • @hypery2k: for his nativescript-fabric (helped the original author a lot!)