如何在 Flutter 中启用/禁用 Firebase Crashlytics
Posted
技术标签:
【中文标题】如何在 Flutter 中启用/禁用 Firebase Crashlytics【英文标题】:How to enable/disable Firebase Crashlytics in Flutter 【发布时间】:2020-10-04 16:30:35 【问题描述】:我正在尝试在我的 Flutter 应用中实现选择加入机制,用户可以选择启用/禁用将 Crashlytics 数据从他们的设备发送到我的 Firebase 控制台。
阅读这篇文章https://firebase.google.com/docs/crashlytics/customize-crash-reports?platform=android#enable-reporting,我发现您最初可以通过AndroidManifest 文件禁用它,并且可以通过以下代码在运行时禁用它:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
但是,我很难找到类似的 dart 代码来访问类似的功能。
注意:顺便说一下,我正在使用 Flutter 的 firebase_crashlytics 插件。
【问题讨论】:
【参考方案1】:首先,您需要一个类似全局变量的东西,例如enableCrashlytics
来指示是否应将此崩溃发送到 Firebase。然后在FlutterError.onError
中使用该变量,如下所示:
FlutterError.onError = (details)
if(enableCrashlytics)
enableCrashlytic = false;
Crashlytics.instance.recordFlutterError(details);
else
//Do nothing
;
【讨论】:
谢谢!!!这是一些很棒的见解。只是为了确认一下,我可以在 AndroidManifest 文件中默认启用 Crashlytics,任何应该发送到控制台的 Flutter 错误都应该通过这个条件来判断它是否可以发送,对吗?另外,这与 runZoned 的 onError 参数有什么不同吗? 其实我认为你根本不需要遵循指令here。只需遵循firebase_crashlytic
插件的集成说明,它应该是自动记录崩溃就好了。关于onError
in runZoned
:您还应该在runZoned
中捕获错误,这是捕获由异步执行代码引起的所有错误的地方。您可以启用/禁用 Firebase 报告,就像我发布的代码 sn-p 一样。
我对您为 runZoned 提供的语法进行了一些小的修改。似乎进展顺利!再次感谢,因为这个,我的项目实际上陷入了低谷。你是救生员:)【参考方案2】:
调用setCrashlyticsCollectionEnabled
方法来切换Crashlytics 收集状态。
例如,要确保在您的应用处于调试模式时将其禁用,您可以执行以下操作:
if (kDebugMode)
// Force disable Crashlytics collection while doing every day development.
// Temporarily toggle this to true if you want to test crash reporting in your app.
await FirebaseCrashlytics.instance
.setCrashlyticsCollectionEnabled(false);
else
// Handle Crashlytics enabled status when not in Debug,
// e.g. allow your users to opt-in to crash reporting.
完整示例
// Toggle this for testing Crashlytics in your app locally.
const _kTestingCrashlytics = true;
void main() async
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runZonedGuarded(()
runApp(MyApp());
, FirebaseCrashlytics.instance.recordError);
class _MyAppState extends State<MyApp>
Future<void> _initializeFlutterFireFuture;
// Define an async function to initialize FlutterFire
Future<void> _initializeFlutterFire() async
// Wait for Firebase to initialize
if (_kTestingCrashlytics)
// Force enable crashlytics collection enabled if we're testing it.
await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
else
// Else only enable it in non-debug builds.
// You could additionally extend this to allow users to opt-in.
await FirebaseCrashlytics.instance
.setCrashlyticsCollectionEnabled(!kDebugMode);
// Pass all uncaught errors to Crashlytics.
Function originalOnError = FlutterError.onError;
FlutterError.onError = (FlutterErrorDetails errorDetails) async
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
// Forward to original handler.
originalOnError(errorDetails);
;
@override
void initState()
super.initState();
_initializeFlutterFireFuture = _initializeFlutterFire();
【讨论】:
以上是关于如何在 Flutter 中启用/禁用 Firebase Crashlytics的主要内容,如果未能解决你的问题,请参考以下文章
在 Audio_Service Flutter 中启用或禁用锁屏艺术
我该如何解决这个问题:Android Studio - Flutter - Dart - firebase [关闭]
Flutter :启用文本字段时,背景图像向上移动。 “resizeToAvoidBottomInset”禁用滚动。我哪里错了?