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

Flutter接入Firebase动态链接后收FCM通知报PluginRegistrantCallback未设置崩溃

问题解决方案

该错误核心原因是7.x及更早版本的firebase_messaging插件在后台接收通知启动独立Isolate时,无法正确获取已注册的插件回调,接入firebase_dynamic_links后插件注册逻辑冲突触发了这个问题,按以下步骤修复:

1. 修复依赖版本冲突

你当前使用的firebase_messaging: ^7.0.0-dev.15属于不稳定的开发版,和firebase_dynamic_links: ^0.5.0+11存在已知的插件注册冲突,且pubspec.yaml中重复声明了firebase_core依赖,先做如下调整:

  • 删除重复的firebase_core: ^0.5.0声明
  • 升级依赖到兼容的稳定版本组:
firebase_core: ^0.7.0
firebase_auth: ^0.20.1
firebase_messaging: ^8.0.0-dev.15 
# 注:8.x版本的API有调整,需要同步修改Dart层的FCM调用代码
firebase_dynamic_links: ^0.6.2

调整后执行flutter clean,重新拉取依赖编译即可解决大部分同场景崩溃问题。

2. 手动注册PluginRegistrantCallback(兼容旧版本)

如果暂时不想升级大版本,即使使用Flutter Android Embedding V2,7.x及更早版本的firebase_messaging仍需要手动配置自定义Application类注册回调,操作如下:

  • 在android/app/src/main/kotlin/[你的应用包名路径]/下新建Application.kt文件,代码如下:
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

class Application : FlutterApplication(), PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this)
    }

    override fun registerWith(registry: PluginRegistry?) {
        io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"))
        io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin"))
        // 如果你还用到其他需要原生交互的插件,也在这里补充注册逻辑
    }
}
  • 打开android/app/src/main/AndroidManifest.xml,找到<application>标签,添加android:name=".Application"属性:
<application
    android:name=".Application"
    android:label="你的应用名称"
    android:icon="@mipmap/ic_launcher">
    <!-- 原有meta-data、intent-filter配置保持不变 -->
</application>

3. 校验业务逻辑配置

  • 确保你注册的onBackgroundMessage回调是顶级静态函数,不能是类的实例方法
  • 如果通知payload中携带动态链接,不要在原生层配置跳转逻辑,统一在Dart层的onLaunch/onResume/onMessage回调中处理动态链接的解析和跳转,避免原生Intent抢占触发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:45:02