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

Firebase Messaging出现SERVICE_NOT_AVAILABLE崩溃无法复现求解决方案

解决方案

1. 升级FCM相关依赖版本

你当前使用的firebase-messaging:22.0.0存在已知的未捕获异常bug,谷歌官方在23.0.0及以上版本已经修复了该问题,会自动捕获SERVICE_NOT_AVAILABLE、超时类异常,不会向上抛出导致应用崩溃,直接升级依赖到最新稳定版即可解决大部分崩溃。

2. 增加FCM操作异常捕获兜底

如果因为项目兼容限制无法升级依赖,在所有FCM相关操作外层添加异常捕获:

  • 调用FirebaseMessaging.getInstance().getToken()获取token的逻辑外层添加try-catch,捕获所有ExecutionException、IOException、TimeoutException类异常,异常直接内部消化不抛出
  • 为FCM相关线程配置自定义未捕获异常处理器,过滤FCM抛出的服务不可用、超时类异常,避免直接触发应用崩溃
// 示例代码
try {
    FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(task -> {
            if (!task.isSuccessful()) {
                return;
            }
            String token = task.getResult();
            // 正常处理token逻辑
        });
} catch (Exception e) {
    // 捕获同步抛出的异常
}

3. 前置GMS服务可用性检测

该类崩溃90%以上出现在无内置GMS服务、GMS服务被用户禁用、或网络环境无法访问谷歌服务的设备上,可以在初始化FCM之前先检测设备GMS服务状态,仅服务正常的设备才执行FCM相关逻辑:

// GMS服务可用性检测示例
int gmsStatus = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context);
if (gmsStatus == ConnectionResult.SUCCESS) {
    // GMS服务正常,执行FCM初始化、token获取等操作
} else {
    // GMS不可用,跳过所有FCM相关逻辑
}

4. 调整FCM初始化时机

不要在Application.onCreate中同步执行FCM token获取操作,调整为应用首页渲染完成后,在子线程中延迟初始化,避免启动阶段网络不稳定触发超时异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:54:02