Flutter 消息推送方案:在线通知 vs 离线通知完整指南

13 阅读4分钟

前言

本文基于实际项目中的 APP 通知技术方案总结而成,内容涵盖在线通知与离线通知的实现原理、消息流转流程以及推荐的技术选型,适用于 Flutter 开发团队参考。

APP 通知是移动应用最基础的功能之一,但要做到稳定可靠、覆盖全面,却涉及不少技术细节。本文将从实战角度梳理通知的完整技术方案。


一、什么是在线通知与离线通知?

在线通知

满足以下任一条件时,APP 处于"在线"状态,可以收到在线通知:

  • 应用正在前台运行
  • 应用没有完全退出后台,且手机正在充电

在线通知走的是 应用进程,消息直接在 APP 内部流转,延迟低、可控性强。

离线通知

离线通知可以在 APP 任何状态 下收到,包括:

  • APP 被系统杀死
  • 手机处于锁屏状态
  • 应用完全退出

不过离线通知有 推送次数限制,通常每天 10~100 条。如果需要不限次数的推送,需要额外申请。

离线通知走的是 系统进程,通过手机厂商的推送渠道送达。


二、消息流程详解

在线通知消息流

后台创建消息(表单/触发器)
        ↓
    消息队列
        ↓
APP 监听消息队列 → 拉取最新消息 → 显示通知
  1. 后台通过表单或触发器方式创建消息
  2. 消息被投递到消息队列
  3. APP 在前台运行时持续监听消息队列
  4. 有新的消息到达时,APP 拉取并显示通知

离线通知消息流

后台创建消息(表单/触发器)
        ↓
   推送系统(EngageLab 等)
        ↓
   手机渠道(APNs / FCM / 华为 / 小米 / OPPO / VIVO)
        ↓
   手机系统拉取消息 → 显示通知

离线通知多了一个关键环节——推送系统。为什么需要它?下文会详细说明。


三、为什么需要推送系统?

推送系统在整个离线通知链路中扮演着 消息中转站 的角色,它的核心价值是:

  1. 屏蔽手机厂商差异 — 国内外手机厂商的推送接口各不相同,推送系统提供统一 API
  2. 降低接入成本 — 开发者只需对接推送系统一套接口,即可覆盖所有手机渠道
  3. 消息管理 — 提供消息状态追踪、推送统计、失败重试等能力

常见的手机推送渠道

地区推送渠道说明
国外Apple APNsiOS 设备推送
国外Google FCMAndroid 设备推送(Google 服务)
中国大陆华为推送华为手机
中国大陆小米推送小米/Redmi 手机
中国大陆OPPO 推送OPPO/一加手机
中国大陆VIVO 推送VIVO/iQOO 手机

特别说明:中国大陆的安卓手机出厂不包含 Google 服务,因此没有 FCM。头部手机厂商都推出了自己的推送渠道,需要在各自的应用开发者后台申请开通。


四、技术方案选型

在线通知:flutter_local_notifications

对于 Flutter 开发的 APP,推荐使用 flutter_local_notifications 库实现在线通知功能。

  • 开发语言:Flutter / Dart
  • 费用:免费
  • 功能:支持在 APP 内显示本地通知,包括自定义样式、按钮操作等

离线通知:EngageLab 推送系统

对于需要同时覆盖国内和海外用户的场景,推荐使用 EngageLab 推送系统。

  • 集成方式:推送系统封装了各手机厂商的 SDK,提供统一接口
  • 费用:按日活跃用户(DAU)付费
  • 定价:每 1 万 DAU 约 3,588 美元/年
  • 推送限制:不限消息推送数量

五、方案对比总结

维度在线通知离线通知
进程应用进程系统进程
触发条件APP 前台/未全退+充电任意状态
推送限制无限制每天 10~100 条(可申请扩容)
延迟低(应用内直达)中(依赖推送系统+手机渠道)
推荐方案flutter_local_notificationsEngageLab 推送系统
费用免费按 DAU 付费

六、注意事项

  1. 权限申请 — 各手机厂商的推送渠道需要在对应开发者后台申请
  2. 合规要求 — 国内推送需要遵循《APP 个人信息保护管理规定》,在用户同意隐私协议后才能启用推送
  3. 电量优化 — 频繁的在线通知轮询会影响续航,建议结合 WebSocket 长连接降低功耗
  4. 离线配额 — 合理规划离线通知的使用场景,避免浪费有限的推送配额
  5. 多端统一 — 如果同时有 APP 和 Web 端,建议后端消息系统设计时做好统一的消息模型

结语

APP 通知看似简单,实则涉及在线/离线两条链路、多个手机厂商适配、推送系统的选型等技术决策。希望本文的方案总结能对你有所帮助。

如果你有更好的实践经验,欢迎在评论区交流讨论。