You need to enable JavaScript to run this app. Flutter集成firebase_messaging:^7.0.0 接收FCM消息时抛unbinding未注册异常
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成firebase_messaging:^7.0.0 接收FCM消息时抛unbinding未注册异常

问题现象
  • Flutter 项目集成 firebase_messaging: ^7.0.0 完成所有 Firebase 配置后,从 Firebase 控制台推送消息时可正常接收消息,但持续输出如下警告日志:
I/InputMethodManager(20094): startInputInner - mService.startInputOrWindowGainedFocus
W/ConnectionTracker(20094): Exception thrown while unbinding
W/ConnectionTracker(20094): java.lang.IllegalArgumentException: Service not registered: ls@5788aac
W/ConnectionTracker(20094):     at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1870)
W/ConnectionTracker(20094):     at android.app.ContextImpl.unbindService(ContextImpl.java:1847)
W/ConnectionTracker(20094):     at android.content.ContextWrapper.unbindService(ContextWrapper.java:755)
W/ConnectionTracker(20094):     at ci.f(:com.google.android.gms.dynamite_measurementdynamite@204714079@20.47.14 (120306-0):1)
W/ConnectionTracker(20094):     at ci.d(:com.google.android.gms.dynamite_measurementdynamite@204714079@20.47.14 (120306-0):2)
W/ConnectionTracker(20094):     at lt.E(:com.google.android.gms.dynamite_measurementdynamite@204714079@20.47.14 (120306-0):9)
W/ConnectionTracker(20094):     at ld.a(:com.google.android.gms.dynamite_measurementdynamite@204714079@20.47.14 (120306-0):3)
W/ConnectionTracker(20094):     at ef.run(:com.google.android.gms.dynamite_measurementdynamite@204714079@20.47.14 (120306-0):3)
W/ConnectionTracker(20094):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
W/ConnectionTracker(20094):     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/ConnectionTracker(20094):     at iy.run(:com.google.android.gms.dynamite_measurementdynamite@204714079@20.47.14 (120306-0):5)
已尝试的无效修复
  • 在 app 模块 gradle 中手动指定版本依赖:
    implementation 'com.google.firebase:firebase-analytics:18.0.0'
    implementation 'com.google.android.gms:play-services-basement:17.5.0'
    
  • 当前 app 模块完整依赖配置:
    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'com.google.firebase:firebase-analytics:18.0.0'
        implementation 'com.google.firebase:firebase-messaging:21.0.0'
        implementation 'com.google.android.gms:play-services-basement:17.5.0'
        implementation "androidx.multidex:multidex:2.0.1"
        implementation 'com.android.support:multidex:1.0.3'
    }
    
  • 自定义 Application 类继承 FlutterApplication 实现 PluginRegistrantCallback 接口,完成 FCM 插件注册与 MultiDex 初始化,代码如下:
    public class Application extends FlutterApplication implements PluginRegistrantCallback {
        @Override
        public void onCreate() {
            super.onCreate();
            FlutterFirebaseMessagingService.setPluginRegistrant(this);
        }
    
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    
        @Override
        public void registerWith(PluginRegistry registry) {
            FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        }
    }
    
根因与可落地解决方案

该警告来自 Google Play Services 的测量 dynamite 模块,属于非阻断性的 SDK 内部已知兼容问题,不会影响 FCM 消息接收的核心功能,报错本质是 GMS 服务绑定/解绑时序与应用初始化逻辑的冲突,并非用户配置错误。按以下步骤调整即可消除报错:

  • 移除冲突的 Multidex 依赖
    删除配置中的 implementation 'com.android.support:multidex:1.0.3',该依赖为 AndroidX 迁移前的旧版本,与已引入的 androidx.multidex:multidex:2.0.1 存在类加载冲突,会打乱 GMS 服务的绑定时序。若项目 minSdkVersion >= 21,可直接移除所有 Multidex 相关依赖(21 及以上系统原生支持 Multidex 加载)。
  • 修正 basement 依赖的版本错配
    之前手动指定的 play-services-basement:17.5.0 属于强制降级版本,与 firebase-messaging:21.0.0 的要求不匹配——21.0.0 版本的 FCM 最低要求 basement 版本为 18.0.0 以上,版本降级会直接触发 dynamite 模块的 unbind 逻辑异常。将手动锁定的依赖版本替换为与 FCM 对齐的兼容版本:
    implementation 'com.google.android.gms:play-services-basement:18.1.0'
    
  • 调整插件注册的调用时机
    原有自定义 Application 中,FlutterFirebaseMessagingService.setPluginRegistrant(this) 在 onCreate() 阶段调用,此时 GMS 服务已完成初始化绑定,会在插件注册完成前触发 unbind 逻辑,抛出 "Service not registered" 警告。需要将该逻辑移动到 attachBaseContext 的 MultiDex 初始化之后执行,调整后的代码如下:
    public class Application extends FlutterApplication implements PluginRegistrantCallback {
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
            // 提前完成插件注册,错开 GMS 服务的绑定时序
            FlutterFirebaseMessagingService.setPluginRegistrant(this);
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        @Override
        public void registerWith(PluginRegistry registry) {
            FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        }
    }
    
  • 兜底处理
    若调整后警告仍存在,可直接在 Logcat 过滤规则中屏蔽 ConnectionTracker 类的 W 级日志,该警告属于 GMS SDK 内部未捕获的空操作异常,不会对应用运行、消息接收造成实际影响,无需投入额外调试成本。

内容的提问来源于stack exchange,提问作者Cyrus the Great

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 15:06:03