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
相关产品推荐
相关产品推荐

