React Native
React-Native SDK 为iOS 和 Android使用了一个原生的扩展,但如果必要的话,可回退到纯 JavaScript 版本.
集成SDK
Sentry在程序运行时使用SDK捕获数据。这些都是特定于平台的,让Sentry能够深入了解您的应用程序是如何工作的。
注意
如果你使用的是 expo-cli, 你需要使用另一个SDK。 查看: https://docs.expo.io/versions/latest/guides/using-sentry/ 这个SDK 仅适用弹出(ejected)的项目或者直接使用React Native的项目.
安装 React Native SDK:
npm install @sentry/react-native --save# 或
yarn add @sentry/react-native
Linking
由于我们的SDK还支持本机崩溃, 我们需要link SDK 到你的native 项目.
react-native >= 0.60 :
yarn sentry-wizard -i reactNative -p ios android cd ios
pod install
由于我们的 SDK 支持 auto-linking ,并且iOS 依赖于 CocoaPods, 你需要安安装相关依赖.
react-native < 0.60 ,你需要运行 react-native link.
react-native link @sentry/react-native
link 步骤或 sentry-wizard ,会根据你的项目进行修改.
Sentry Wizard 会全程引导你正确地设置所有的东西。 这个只需要做一次, 创建的文件需要加到你的版本控制里面。
出现了下面的变化:
- 为Android本机奔溃报告添加sentry-java 包
- 为 iOS本机奔溃添加sentry-cocoa 包
- 为 Android开启 Sentry Gradle 编译步骤
- patch _MainApplication.java_ for Android
- 在_index.js/App.js_中配置Sentry 的 DSN
- 存储生成的凭据到 _ios/sentry.properties_ 和_android/sentry.properties_.
从 react-native-sentry 升级
如果你是从早期版本的react-native-sentry升级来的,你需要unlink 该包,确保生成的代码更新到最新版本:
$ react-native unlink react-native-sentry
在package.json中删除 react-native-sentry 后,再按安装说明进行安装.
iOS 特有步骤
当你使用Xcode, 你可以直接 hook 到编译过程中,上传调试符号和 source maps. 如果你使用的是 bitcode, 你需要在构建过程中关闭“上传调试符号” ,然后分别从iTunes上传调试符号连接到Sentry
Android 特有步骤
对应 Android, 我们hook 到 Gradle 的 source map 构建过程中. 当你运行 react-native link, Gradle 文件会自动更新。 当你运行 ./gradlew assembleRelease source maps 自动生成并上传到Sentry.
链接 SDK 到 Sentry
你在sentry中完成设置之后, Sentry 会给你一个DSN 或者 Data Source Name. 它看起来像一个标准的. 它有几部分组成,包括协议, 公钥key, 服务器地址, 和项目标志.
初始化SDK, 你需要调用以下代码:
Showing configuration for
import * as Sentry from '@sentry/react-native';
Sentry.init({
dsn: 'https://<key>@sentry.io/<project>',
});
sentry-wizard 会将它加到你的 App.js
验证您的设置
我们故意抛出一个错误:
throw new Error("My first Sentry error!");
你可以触发一个 native crash:
Sentry.nativeCrash();
捕捉错误
大多数情况下, 你可以通过captureException()自动捕获错误 .
try {
aFunctionThatMightFail();
} catch (err) {
Sentry.captureException(err);
}
设置Release / Dist
Sentry.setRelease('release');Sentry.setDist('dist');
由于 SDK 是统一的, 所有在JavaScript 中可用的函数,在这个SDK中也可用, 例如: