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

Firebase Cloud Messaging onMessageReceived不生效问题求助

嘿,我之前帮好几个开发者排查过类似的旧项目FCM通知失效问题,新应用正常、旧应用不行的情况,大多是一些容易被忽略的配置细节或者版本兼容问题,咱们一步步来排查:

旧应用无法接收Firebase通知的常见排查点
  • 核对Manifest配置是否完整
    新应用在连接Firebase时会自动生成必要的服务声明,但旧应用可能漏了这些关键配置:

    • 确认AndroidManifest.xml里有没有注册Firebase消息服务的子类:
      <service
          android:name=".MyFirebaseMessagingService"
          android:exported="false">
          <intent-filter>
              <action android:name="com.google.firebase.MESSAGING_EVENT" />
          </intent-filter>
      </service>
      
    • Android 8.0及以上版本必须配置通知通道,新应用可能自动添加了,旧应用要手动补上(可以放在消息服务的onCreate方法里):
      @Override
      public void onCreate() {
          super.onCreate();
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
              NotificationChannel channel = new NotificationChannel(
                  "default_channel_id",
                  "Default Notification Channel",
                  NotificationManager.IMPORTANCE_DEFAULT
              );
              NotificationManager notificationManager = getSystemService(NotificationManager.class);
              notificationManager.createNotificationChannel(channel);
          }
      }
      
  • 检查google-services.json的正确性
    旧项目的这个配置文件可能是很久以前的,或者包名和当前应用的applicationId不匹配:

    • 对比新应用的google-services.json,重点看client->client_info->mobilesdk_app_id是否一致
    • 确认client->oauth_client里的包名和模块级build.gradle中的applicationId完全匹配,大小写都不能错
  • 更新Firebase依赖版本
    旧应用的依赖版本可能太老,和当前的Android Studio插件、系统版本不兼容。建议统一更新到最新稳定版:

    // 项目根目录build.gradle
    classpath 'com.google.gms:google-services:4.4.1'
    
    // 模块build.gradle
    implementation 'com.google.firebase:firebase-messaging:23.4.1'
    

    更新后记得执行Clean Project再Rebuild Project,清理掉旧的缓存文件

  • 验证FCM令牌是否正常获取
    在你的MyFirebaseMessagingService里重写onNewToken方法,打印令牌日志,看是否能正常获取:

    @Override
    public void onNewToken(String token) {
        Log.d("FCM_DEBUG", "当前设备令牌: " + token);
    }
    

    如果日志里看不到令牌,检查是否添加了网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    
  • 检查系统的后台限制
    旧应用可能被设备的电池优化策略限制了后台运行,导致无法接收通知:

    • 打开设备设置 → 应用管理 → 你的旧应用 → 电池优化,设置为「不允许优化」
    • 确认应用的「后台进程限制」是否关闭,允许应用在后台保持活跃
  • 确认测试通知的目标和类型
    发送测试通知时,一定要用旧应用获取到的FCM令牌,别搞错成新应用的。另外:

    • 如果发送的是数据消息,需要在onMessageReceived方法里手动构建并显示通知
    • 如果是通知消息,后台状态下系统会自动展示,但前提是你配置了正确的通知通道

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:37:33