Android Sentry 系列技术贴,第二个模块结合业务需求

2023-07-10  本文已影响0人  来10分钟波比

根据业务需求自行配置

SentryAndroid.init(ApplicationSingleton.getInstance.getApplication(), new Sentry.OptionsConfiguration() {

@Override

                    public void configure(@NotNull SentryAndroidOptions options) {

                        options.setDsn("根据自己的项目配置Dsn");

                        // 启用后,堆栈跟踪会自动附加到所有记录的消息中。堆栈跟踪始终附加到异常;但是,设置此选项后,堆栈跟踪也会随消息一起发送。例如,此选项意味着堆栈跟踪显示在所有日志消息旁边。

                        //这个选项是on默认的。

                        //Sentry 中的分组对于有堆栈跟踪和没有堆栈跟踪的事件是不同的。因此,当您为某些事件启用或禁用此标志时,您将获得新的组。

                        // options.setAttachStacktrace(true);

                        // 此参数控制集成是否应捕获 HTTP 请求主体。它可以设置为以下值之一:

                        //

                        //never: 永远不会发送请求体。

                        //small:只会捕获小的请求体。small 的截止值取决于 SDK(通常为 4KB)。

                        //medium:将捕获中小型请求(通常为 10KB)。

                        //always: SDK 会一直抓取请求体,只要Sentry 能理解它。

                        options.setMaxRequestBodySize(SentryOptions.RequestSize.ALWAYS);

                        // 将此布尔值设置为false禁用发送客户端报告。客户端报告是一种协议功能,可让客户端向 Sentry 发送有关其自身的状态报告。它们目前主要用于为从未发送过的事件发出结果。

                        // 一定要关闭!!!.和爽哥对过,如果打开会把自己的信息发送给sentry,涉及到我们的数据安全问题以及,信息跨境问题.

                        options.setSendClientReports(false);

                        // 自动添加面包屑

                        options.enableAllAutoBreadcrumbs(true);

                        // 全面展示时间

                        //(6.14.0 版新增)

                        //Time to full display 通过为 Activity 的每次启动添加一个跨度,可以深入了解您的 Activity 启动和加载其所有内容需要多长时间。SDK 将跨度操作ui.load.full-display和跨度描述设置为 Activity 的名称后跟full display,例如,MainActivity full display。

                        //Span 在每个 Activity 启动时开始,定义为第一个 Activity 的应用程序启动,以及onPause每个后续 Activity 启动的前一个 Activity 的方法。

                        //Time to full display 默认情况下是禁用的,但您可以通过设置启用它:

                        options.setEnableTimeToFullDisplayTracing(true);

                        // 为用户交互启用自动面包屑(点击、滑动、滚动)

                        options.setEnableUserInteractionTracing(true);

                        // 发生错误时截取应用程序的屏幕截图并将其作为附件包含在内。在我们的屏幕截图文档中了解有关使用屏幕截图丰富事件的更多信息。

                        // https://docs.sentry.io/platforms/android/enriching-events/screenshots/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

                        options.setAttachScreenshot(true);

                        // 发生错误时呈现应用程序整个视图层次结构的 JSON 表示并将其作为附件包含在内。在我们的视图层次结构文档中了解有关使用视图层次结构丰富事件的更多信息。

                        // https://docs.sentry.io/platforms/android/enriching-events/viewhierarchy/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

                        options.setAttachViewHierarchy(true);

                        // ANR 的监控开关

                        options.setAnrEnabled(true);

                        // 配置错误事件的采样率,范围为0.0到1.0。默认值是1.0表示发送 100% 的错误事件。如果设置为0.1只有 10% 的错误事件将被发送。事件是随机选择的。

                        // https://docs.sentry.io/platforms/android/configuration/sampling/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

                        // 可以根据不同业务需求来调整采样率,比如在语音房页面采样率为1.0.在修改用户资料页面采样率为0.1

                        options.setSampleRate(1.0);

                        // 在开始交易时启用分析,在生产环境中调整

                        options.setProfilesSampleRate(1.0);

                        // 一个介于 0 和 1 之间的数字,控制将给定交易发送到 Sentry 的百分比机会。(0 代表 0%,而 1 代表 100%。)同样适用于应用程序中创建的所有交易。tracesSampler必须定义这个或才能启用 追踪记录请求期间发生的事件的过程,通常跨多个服务。.

                        options.setTracesSampleRate(1.0);

                        // 指定在报告 ANR 之前线程应该被阻塞多长时间

                        options.setAnrTimeoutIntervalMillis(3000);

                        //会话

                        //会话表示用户和应用程序之间的交互。会话包含一个时间戳、一个状态(会话是否正常或崩溃),并且始终与发布相关联。大多数哨兵 SDK 可以自动管理会话。

                        //要从健康数据中获益,您必须至少使用 2.1.0 版本的 Android SDK,并在 SDK 的初始化选项中启用发布健康指标的收集。默认情况下,在我们的 Android 3.0 及更高版本中会捕获发布运行状况,除非您在 SDK 的初始化选项中特别禁用收集它。

                        //默认情况下,一旦应用程序在后台运行超过 30 秒,会话就会终止。您可以使用名为 的选项更改超时sessionTrackingIntervalMillis。它需要以毫秒为单位的数量。例如,将其配置为 60 秒:

                        options.setSessionTrackingIntervalMillis(60000);

                        // 设置为 时true,SDK 将向 Sentry 发送会话事件。所有浏览器 SDK 都支持这一点,每次页面加载和页面导航到 Sentry 都会发出一个会话。在移动 SDK 中,当应用进入后台超过 30 秒时,会话将结束。

                        options.setEnableAutoSessionTracking(true);

                        // 打开或关闭调试模式。如果启用调试,如果发送事件出现问题,SDK 将尝试打印出有用的调试信息。默认值为始终false。通常不建议在生产中打开它,尽管打开debug模式不会引起任何安全问题。

                        options.setDebug(DebugLog.logIsOpen);

                        // 启用debug模式使 SDK 生成尽可能多的诊断数据。但是,如果您希望降低 Sentry SDK 诊断日志的详细程度,请配置此选项以设置适当的级别:

                        //

                        //debug: default最详细的模式

                        //info:信息性消息

                        //warning: 警告某些事情可能不对

                        //error: 只打印SDK内部错误

                        //fatal: 只打印严重错误

                        options.setDiagnosticLevel(SentryLevel.DEBUG);

                        // 设置环境。此字符串是自由格式的,默认情况下未设置。一个版本可以与多个环境相关联,以在 UI 中将它们分开(想想stagingvsprod或类似的)。

                        options.setEnvironment(Constant.getAppEnvEnum().getBuildTypePrefix());

                        // https://docs.sentry.io/product/security/mobile-privacy/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

//                        如果启用此标志,则活动集成会添加某些个人身份信息 (PII)。默认情况下,不发送此类数据。

//                        如果您在移动应用程序中使用 Sentry,请阅读我们关于移动数据隐私的常见问题解答,以帮助了解 Apple App Store 和 Google Play 应用程序隐私详细信息。

//                        这个选项是off默认的。如果您启用此选项,请务必使用我们的敏感数据管理功能手动删除您不想发送的内容。https://docs.sentry.io/platforms/android/data-management/sensitive-data/

                        options.setSendDefaultPii(true);

                        // Activity 的检测一旦启用,就会为每次启动的 Activity 捕获事务。SDK将Transaction名称设置为Activity的名称,例如 ,MainActivity将Transaction操作设置为ui.load。

                        //事务在onCreate调用每个 Activity 的方法之前开始。

                        //默认情况下启用 Activity 的检测,

                        // 事务在每个 Activity 的onResume方法执行后完成。 交易自动完成,但您可以通过设置禁用它

                        options.setEnableActivityLifecycleTracingAutoFinish(true);

                        // 开启ActivityLifecycle Tracing

                        options.setEnableAutoActivityLifecycleTracing(true);

                        // 开启ActivityLifecycle面包屑

                        options.setEnableActivityLifecycleBreadcrumbs(true);

                        //

                        options.addIntegration(new FragmentLifecycleIntegration(ApplicationSingleton.getInstance.getApplication(), true, true));

                        // 此函数使用特定于 SDK 的消息或错误事件对象调用,并可以返回修改后的事件对象,或null跳过报告事件。例如,这可用于在发送前手动剥离 PII。

                        options.setBeforeSend(new SentryOptions.BeforeSendCallback() {

@Override

                            public @Nullable SentryEventexecute(@NotNull SentryEvent event, @NotNull Hint hint) {

// 这个方法是在主线程中执行

                                return event;

                            }

});

                        // 该函数使用 SDK 特定的交易事件对象调用,可以返回修改后的交易事件对象,或者null跳过事件上报。一种可能使用的方法是在发送之前手动剥离 PII。

                        options.setBeforeSendTransaction(new SentryOptions.BeforeSendTransactionCallback() {

@Override

                            public @Nullable SentryTransactionexecute(@org.jetbrains.annotations.NotNull SentryTransaction transaction, @org.jetbrains.annotations.NotNull Hint hint) {

return transaction;

                            }

});

                        // 在将面包屑添加到范围之前,使用特定于 SDK 的面包屑对象调用此函数。当函数没有返回任何内容时,面包屑将被删除。要传递面包屑,请返回第一个参数,其中包含面包屑对象。回调通常会获得第二个参数(称为“提示”),其中包含创建面包屑的原始对象,以进一步自定义面包屑的外观。

                        options.setBeforeBreadcrumb(new SentryOptions.BeforeBreadcrumbCallback() {

@Override

                            public @Nullable Breadcrumbexecute(@org.jetbrains.annotations.NotNull Breadcrumb breadcrumb, @org.jetbrains.annotations.NotNull Hint hint) {

return breadcrumb;

                            }

});

                        // 自定义上下文允许您将任意数据附加到事件。通常,此上下文在其生命周期中捕获的任何问题之间共享。您无法搜索这些,但可以在问题页面上查看它们:附加自定义数据的最佳做法是通过结构化上下文。上下文必须始终是字典或映射,其值可以是任意的。然后,使用setContext并给上下文一个唯一的名称:

                        Sentry.configureScope(new ScopeCallback() {

@Override

                            public void run(@org.jetbrains.annotations.NotNull Scope scope) {

}

});

                    }

});

设置用户信息

User user =new User();

user.setId(“”);

user.setName(“”);

Sentry.setUser(user);

设置Tag

Sentry.setTag(key, value);

配置网络拦截器

OkHttpClient.Builder builder =new OkHttpClient().newBuilder().pingInterval(5, TimeUnit.SECONDS).connectTimeout(30, TimeUnit.SECONDS)// 链接服务器超时时间.addInterceptor(new SentryOkHttpInterceptor());// 写入超时时间

上一篇下一篇

猜你喜欢

热点阅读