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’)。”