Flutter Firebase Cloud Messaging的onBackgroundMessage有什么作用?
关于Flutter FCM
onBackgroundMessage 方法的作用与使用场景 方法核心作用
FirebaseMessaging.onBackgroundMessage 用于注册应用在后台/终止状态下的FCM消息接收回调,和你正在使用的两个回调覆盖的场景完全互补:
FirebaseMessaging.onMessage:仅覆盖应用处于前台活跃运行时的消息接收场景FirebaseMessaging.onMessageOpenedApp:仅覆盖用户点击通知栏消息唤醒应用时的回调场景onBackgroundMessage:覆盖应用退到后台运行、或被用户手动终止时的消息接收场景,该回调运行在独立的后台Isolate中,与主应用的Isolate上下文完全隔离。
回调内重复初始化Firebase的原因
你在main()方法中完成的Firebase初始化属于主应用Isolate的配置,而后台消息触发的回调运行在独立的新Isolate中,无法继承主Isolate的初始化状态,因此必须在回调内单独完成一次Firebase初始化,否则所有Firebase相关API调用都会报错。
典型使用场景
如果你的业务只有前台接收消息、点击通知跳转两个需求,确实不需要用到这个方法,它的适用场景主要是需要在用户未主动打开应用时完成的逻辑:
- 静默数据同步:服务端推送无感知的数据包,应用在后台直接将数据存入本地存储,用户打开应用时无需等待接口请求即可直接使用最新数据,比如同步离线聊天消息、更新应用全局配置
- 自定义通知实现:当FCM默认的通知展示规则无法满足需求时,比如要生成多操作按钮的通知、修改通知优先级、先下载通知附带的附件再弹出通知,都可以在后台回调中自行构建通知并调用系统能力弹出
- 行为数据上报:需要统计推送到达率时,无需等待用户点击通知,在后台收到消息时即可直接上报到达数据
- 后台事件触发:比如收到待办提醒类推送时,直接在后台调用系统日历新增提醒、设置本地闹钟,不需要用户打开应用操作
注意事项
该方法传入的回调必须是顶层函数或静态类方法,不能是类的实例方法或匿名函数,否则会抛出ArgumentError异常,和官方文档说明一致。
内容的提问来源于stack exchange,提问作者stacktrace2234
相关产品推荐
相关产品推荐

