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

应用处于终止状态时收到通知如何运行Dart代码并提交数据到Firebase?

实现方案

核心思路

不需要使用长期后台运行的第三方服务包,直接使用Firebase Cloud Messaging(FCM)自带的后台消息回调能力即可实现需求:应用被杀死/后台运行时收到推送会被系统临时唤醒执行回调逻辑,完成提交操作后系统会自动回收临时进程,不会长期占用后台资源。

具体实现步骤

  • 基础依赖配置:项目中集成firebase_core和firebase_messaging包,完成Firebase项目和客户端的基础绑定配置。
  • 定义顶层后台消息回调函数:该函数必须是顶层或静态函数,添加@pragma('vm:entry-point')注解避免被Dart编译时摇树优化移除:
@pragma('vm:entry-point')
Future<void> fcmBackgroundMessageHandler(RemoteMessage message) async {
  // 回调执行时先初始化Firebase
  await Firebase.initializeApp();
  
  // 写入你需要提交到Firebase的业务逻辑,例如写入Firestore/云函数上报等
  await FirebaseFirestore.instance.collection("report_data").add({
    "notification_id": message.messageId,
    "received_at": DateTime.now().toUtc(),
    // 补充其他需要上报的字段
  });
  
  // 逻辑执行完成无需手动销毁,系统会自动回收该临时执行进程
}
  • 注册回调:在应用入口main函数中提前注册该后台回调:
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  // 注册FCM后台消息回调
  FirebaseMessaging.onBackgroundMessage(fcmBackgroundMessageHandler);
  runApp(const MyApp());
}
  • 平台适配配置
    • Android端:在AndroidManifest.xml中配置FCM所需的通知通道,如需在国内厂商系统上稳定触发,需要引导用户开启应用的自启动、后台活动权限。
    • iOS端:在Xcode项目的Signing & Capabilities中开启Background Modes,勾选Remote notifications选项,同时完成APNs证书和FCM的关联配置。

注意事项

  • 后台回调的最长执行时间被系统限制为30秒,提交逻辑要尽量轻量化,避免超时被系统强制终止。
  • 该方案仅在收到FCM通知时临时唤醒应用执行逻辑,不会长期驻留后台,符合你不希望应用长期后台运行的要求。

内容的提问来源于stack exchange,提问作者saeid teroda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:06:01