Firebase Crashlytics/Analytics 不适用于颤振

Posted

技术标签:

【中文标题】Firebase Crashlytics/Analytics 不适用于颤振【英文标题】:Firebase Crashlytics/Analytics not working with flutter 【发布时间】:2021-12-19 07:11:13 【问题描述】:

我在这个类似的主题中看到了几个重复的问题。但这些要么没有答案,要么已经过时。

一个多星期以来,我一直在试图弄清楚我缺少什么,但我无法让 crashlytics 在我的 Flutter 应用中工作。

为了确保默认设置有效,我尝试创建一个演示应用程序并按照FlutterFire 的说明设置 crashlytics。

当我调用方法crash() 进行测试崩溃时。该应用程序按预期崩溃,并提到崩溃日志仅在重新启动应用程序时发送。我再次打开应用程序。但是 firebase 控制台显示循环加载程序正在监听第一次崩溃。 (见鬼!在过去的 10 天里它崩溃了很多次??????)

即使我触发了自定义事件,它也没有显示在分析仪表板中。一些论坛表示,在控制台中更新可能需要长达 24 小时。但即使过了 48 小时也没有出现。

我完全不知道我在分析/崩溃分析设置方面做错了什么。在这里的任何帮助将不胜感激。

这是我的配置:

颤振医生
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.5.1, on Microsoft Windows [Version 10.0.22000.282], locale en-IN)
[✓] android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] VS Code, 64-bit edition (version 1.60.0)
[✓] Connected device (3 available)
android/app/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

...

dependencies 
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation platform('com.google.firebase:firebase-bom:29.0.0')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    implementation 'com.android.support:multidex:2.0.1'


app/build.gradle

buildscript 
    ext.kotlin_version = '1.5.31'
    repositories 
        google()
        mavenCentral()
        jcenter()
    

    dependencies 
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.10'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0'
    


allprojects 
    repositories 
        google()
        mavenCentral()
        jcenter()
    


rootProject.buildDir = '../build'
subprojects 
    project.buildDir = "$rootProject.buildDir/$project.name"
    project.evaluationDependsOn(':app')


task clean(type: Delete) 
    delete rootProject.buildDir

main.dart -(示例仅涉及 Crashlytics)

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';

void main() async 
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(const MyApp());


MyApp -> 按钮监听器
  void _incrementCounter() 
    setState(() 
      _counter++;
      print("Counter incremented");
      FirebaseCrashlytics.instance.log("Counter incremented to : $_counter");
      FirebaseCrashlytics.instance.crash();
    );
  
调试控制台输出

我仍然看到控制台中记录了异常。但这就是我怀疑配置是否正确的地方!

我看到两个例外!一个用于测试崩溃,另一个来自FirebaseCrashlytics 本身,表示它无法处理异常。我希望这就是日志没有上传到 Firebase 控制台的原因。

测试崩溃是否会出现这两个异常?


021-11-05 12:12:56.032 2055-2116/com.example.yetanotherdemo I/ResourceExtractor: Found extracted resources res_timestamp-1-1636094238693
2021-11-05 12:12:56.070 2055-2109/com.example.yetanotherdemo I/FA: App measurement initialized, version: 46000
2021-11-05 12:12:56.070 2055-2109/com.example.yetanotherdemo I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
2021-11-05 12:12:56.071 2055-2109/com.example.yetanotherdemo I/FA: To enable faster debug mode event logging run:
      adb shell setprop debug.firebase.analytics.app com.example.yetanotherdemo
2021-11-05 12:12:56.113 2055-2055/com.example.yetanotherdemo I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2021-11-05 12:12:56.220 2055-2055/com.example.yetanotherdemo W/FlutterActivityAndFragmentDelegate: A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
2021-11-05 12:12:56.334 2055-2109/com.example.yetanotherdemo I/FA: Tag Manager is not found and thus will not be used
2021-11-05 12:12:56.347 2055-2055/com.example.yetanotherdemo W/Activity: AppLock checkAppLockState locked:false verifying:false pkgName = com.example.yetanotherdemo isInMultiWindowMode:false showWhenLocked:false
2021-11-05 12:12:56.405 2055-2155/com.example.yetanotherdemo I/OpenGLRenderer: Initialized EGL, version 1.4
2021-11-05 12:12:56.615 2055-2160/com.example.yetanotherdemo I/flutter: Observatory listening on http://127.0.0.1:36753/BoWqFw1T8V8=/
2021-11-05 12:12:57.106 2055-2055/com.example.yetanotherdemo I/Choreographer: Skipped 44 frames!  The application may be doing too much work on its main thread.
2021-11-05 12:12:57.166 2055-2055/com.example.yetanotherdemo I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
2021-11-05 12:13:00.942 2055-2065/com.example.yetanotherdemo I/zygote: Do partial code cache collection, code=28KB, data=28KB
2021-11-05 12:13:00.942 2055-2065/com.example.yetanotherdemo I/zygote: After code cache collection, code=28KB, data=28KB
2021-11-05 12:13:00.942 2055-2065/com.example.yetanotherdemo I/zygote: Increasing code cache capacity to 128KB
2021-11-05 12:16:08.586 2055-2118/com.example.yetanotherdemo I/flutter: Counter incremented
2021-11-05 12:16:08.647 2055-2055/com.example.yetanotherdemo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.yetanotherdemo, PID: 2055
    io.flutter.plugins.firebase.crashlytics.FirebaseCrashlyticsTestCrash: This is a test crash caused by calling .crash() in Dart.
        at io.flutter.plugins.firebase.crashlytics.FlutterFirebaseCrashlyticsPlugin.lambda$crash$1(FlutterFirebaseCrashlyticsPlugin.java:77)
        at io.flutter.plugins.firebase.crashlytics.-$$Lambda$FlutterFirebaseCrashlyticsPlugin$S7-ndFU6gs1AKgZZJXppPdTcLo8.run(Unknown Source:0)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:7025)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
2021-11-05 12:16:12.652 2055-2055/com.example.yetanotherdemo E/FirebaseCrashlytics: Error handling uncaught exception
    java.util.concurrent.TimeoutException
        at com.google.firebase.crashlytics.internal.common.Utils.awaitEvenIfOnMainThread(Utils.java:138)
        at com.google.firebase.crashlytics.internal.common.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:233)
        at com.google.firebase.crashlytics.internal.common.CrashlyticsController$1.onUncaughtException(CrashlyticsController.java:155)
        at com.google.firebase.crashlytics.internal.common.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:55)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)
        at java.lang.Thread.dispatchUncaughtException(Thread.java:1955)

【问题讨论】:

您是在模拟器还是真实设备上工作和测试?如果您正在使用模拟器,您可以在真实设备上尝试您的“默认设置应用程序”吗? 我正在真实设备上进行测试。我在不同的设备上进行了测试,但它没有工作 【参考方案1】:

Firebase 无法检测到您的崩溃,因为您正在运行调试版本,因此请尝试以下操作:

1- 确保您已将上述步骤应用于 Android 和 ios here

2- 使用以下命令作为示例,在真实设备上以发布模式运行您的应用:

flutter run --release flutter run --release --no-sound-null-safety

3- 让你的应用程序崩溃 2 次​​p>

希望对你有帮助

【讨论】:

答案的第一行是错误的(假设已经在控制台注册了调试包名称)。我实际上经常使用它,例如。能够看到不是我的三星设备崩溃。 我同意@MartinZeitler 的观点!我之前在使用原生 android 应用程序时使用 firebase 测试过我的调试版本。当使用正确的包名称注册时,它也会从调试版本中收集日志【参考方案2】:

它显示为TimeoutException ...暗示它在错误的时间崩溃(这只适用于第一次崩溃)。让应用程序先启动,然后用按钮使其崩溃。此外,日志会在在线时立即上传 - 仅在下次启动时才会在离线时崩溃。

【讨论】:

能否请您详细说明“让应用程序先启动,然后再使用按钮使其崩溃”?我在按钮的监听器中添加了crash()。因此,它不会在应用程序启动时自动崩溃。应用程序启动后,只有当我按下按钮时,才会发生测试崩溃

以上是关于Firebase Crashlytics/Analytics 不适用于颤振的主要内容,如果未能解决你的问题,请参考以下文章

无法解决:com.google.firebase:firebase-ml-vision:24.1.3;无法解决:com.google.firebase:firebase-core:20.0.2

没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()

如何修复 Firebase 9.0 导入错误? “尝试导入错误:‘firebase/app’不包含默认导出(导入为‘firebase’)。”

Firebase 持久化,清除 Firebase 缓存

Firebase 存储不会下载并添加到 firebase 数据库

将 Firebase 身份验证与 Firebase 数据库连接