You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI集成Firebase Crashlytics后崩溃未显示问题排查

.NET MAUI Firebase Crashlytics 集成问题排查

问题描述

我在.NET MAUI应用中按以下步骤配置Firebase Crashlytics:

  • 在Firebase控制台新建项目并添加Android和iOS应用,下载google-services.json与GoogleService-Info.plist文件并加入项目(此前已为推送通知完成此操作);
  • 引入Plugin.Firebase.Crashlytics包;
  • 在AndroidManifest文件中添加元数据:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="true" />
  • 在Android的MainApplication中添加代码:
public override void OnCreate()
{
   base.OnCreate();
   FirebaseApp.InitializeApp(this);
}
  • 在AppDelegate中添加代码:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    Firebase.Core.App.Configure();
    return base.FinishedLaunching(app, options);
}

通过按钮点击触发测试崩溃:

private void TestSampleCrash(object sender, EventArgs e)
{
    throw new Exception("Test crash for Firebase Crashlytics");
}

但崩溃信息未在Firebase Crashlytics控制台显示,请问是否遗漏了集成步骤?

另外,FCM控制台中出现如下崩溃异常:

致命异常:java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'java.lang.String android.content.Context.getPackageName()'
at android.widget.Toast.(Toast.java:118)
at android.widget.Toast.makeText(Toast.java:286)
at android.widget.Toast.makeText(Toast.java:276)
at crc6488302ad6e9e4df1a.MauiApplication.n_onCreate(MauiApplication.java)
at crc6488302ad6e9e4df1a.MauiApplication.onCreate(MauiApplication.java:28)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1124)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5969)
at android.app.ActivityThread.-wrap1()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1774)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6759)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:875)


问题分析与修复步骤

一、先解决Android启动崩溃问题

这个空指针异常是因为MainApplication的OnCreate方法中,base.OnCreate()执行前可能有代码调用了Toast(或插件内部触发),此时Context还未完全初始化。调整初始化逻辑:

修改MainApplication代码,确保所有依赖Context的操作都在base.OnCreate()之后执行:

public override void OnCreate()
{
    base.OnCreate();
    // Firebase初始化必须在base.OnCreate之后,保证Context就绪
    FirebaseApp.InitializeApp(this);
    // 其他需要Context的初始化代码也放在这里
}

如果异常依旧,检查项目中是否有其他插件或自定义代码在OnCreate中提前调用了Toast等UI API,暂时注释后测试。

二、Crashlytics崩溃未上报的遗漏步骤

你当前的配置缺少几个关键环节:

  1. 显式初始化Crashlytics
    在App.xaml.cs的OnStart方法中添加初始化代码:
using Plugin.Firebase.Crashlytics;

protected override void OnStart()
{
    base.OnStart();
    // 启用崩溃收集
    CrossFirebaseCrashlytics.Current.SetCrashlyticsCollectionEnabled(true);
}
  1. Android Gradle配置
  • 模块级build.gradle添加Crashlytics插件:
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.gms.google-services'
    id 'com.google.firebase.crashlytics' // 新增该行
}
  • 项目级build.gradle添加插件依赖:
buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.4.1'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' // 新增该行
    }
}
  1. iOS平台配置检查
  • 确保GoogleService-Info.plist的Build Action设置为BundleResource;
  • 可选:在Info.plist中添加崩溃收集开关:
<key>NSCrashReporterEnabled</key>
<true/>
  1. 测试崩溃的正确姿势
  • 触发崩溃后必须重启应用,Crashlytics会在下次启动时上报日志;
  • 控制台显示崩溃存在延迟(1-5分钟),不要立即刷新;
  • 确保设备联网,离线日志会缓存,联网后自动上报。
  1. 验证集成有效性
    添加初始化日志,确认Crashlytics正常工作:
CrossFirebaseCrashlytics.Current.Log("Crashlytics initialized successfully");

在Firebase控制台的“日志”标签查看是否收到这条记录。


内容的提问来源于stack exchange,提问作者Matthew Pans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:39:57