如何使用Flutter搭配Laravel实现无需Firebase的推送通知功能
无Firebase的Flutter+Laravel推送通知实现方案
以下两种方案均不依赖Firebase,可根据你的App使用场景选择:
方案1:自实现WebSocket长连接推送
适合内网应用、长期前台运行的工具类App使用
后端(Laravel)实现
- 安装
laravel-websockets扩展包,该扩展可完全在本地部署WebSocket服务,无需第三方依赖 - 在
config/websockets.php中配置服务端口、加密密钥、广播规则等参数,使用你现有的MySQL数据库(phpMyAdmin管理)存储相关数据 - 新建
user_devices绑定表,字段至少包含:用户ID、设备唯一标识、WebSocket连接ID、连接状态、操作系统 - 基于Laravel事件广播机制编写推送事件类,需要推送时触发事件,广播到对应用户的私有频道
- 生产环境使用Supervisor托管WebSocket服务,避免进程意外中断
Flutter端实现
- 添加
web_socket_channel依赖,App启动后在用户登录成功时与Laravel WebSocket服务建立长连接,上报当前用户ID、设备标识完成绑定 - 监听WebSocket连接状态,断网或连接断开时自动触发重连、重新绑定逻辑
- 添加
flutter_local_notifications依赖,监听后端推送的消息,触发本地通知的弹窗、提示音、震动等交互,同时处理通知点击跳转逻辑
注意:该方案在App被系统杀死后无法维持长连接,无法收到推送
方案2:对接原生系统推送通道
适合公网对外发布的App使用,推送到达率接近厂商系统级推送水平
后端(Laravel)实现
- 分别申请各平台推送权限:iOS在Apple开发者后台申请APNs推送密钥,安卓在小米、华为、OPPO、vivo等对应厂商开放平台申请App推送密钥
- 调整
user_devices表,新增字段:iOS APNs deviceToken、安卓各厂商对应推送标识 - 编写分平台推送逻辑:iOS端使用
edujugon/apns-push扩展直接调用APNs接口推送;安卓端根据设备所属厂商,调用对应厂商的公开HTTP推送接口完成推送 - 所有推送记录、设备绑定数据均存储在现有MySQL库中,可直接通过phpMyAdmin管理
Flutter端实现
- 安卓端集成对应厂商的Flutter推送SDK封装,如
flutter_huawei_push、flutter_xm_push等,适配不同厂商的设备标识获取逻辑,上报给Laravel后端 - iOS端启动后申请通知权限,获取APNs deviceToken后上报后端
- 集成
flutter_local_notifications依赖,处理推送到达后的本地展示、点击跳转逻辑,同时支持自定义前台收到推送的展示样式
注意:该方案安卓端需要适配不同厂商的推送审核规则,申请推送白名单可进一步提升到达率
内容的提问来源于stack exchange,提问作者Rostand KPO-N-MEY
相关产品推荐
相关产品推荐

