Flutter实现客户下单后向员工推送带订单数据通知的方法
Flutter 跨角色订单通知功能实现方案
你现有已经完成订单卡片组件的前提下,整个功能分四个部分落地即可,不需要重构现有业务代码:
核心逻辑前提
推送触发逻辑必须放在服务端实现,禁止在客户端直接给其他用户发推送,避免接口被伪造产生垃圾通知。客户侧只需要负责提交订单数据,服务端确认订单入库成功后,自动向对应权限的员工账号推送消息。
1. 推送通道选型
根据员工端APP的运行状态选对应通道,保证消息送达率:
- 前台运行状态:用WebSocket长连接传输,延迟最低,适合员工在岗实时接单场景
- 后台/进程被杀状态:对接系统级推送通道,安卓端接入各厂商官方推送、iOS端接入APNs,不需要应用保活也能收到消息
2. 客户侧逻辑改造
你已经写好确认订单按钮,只需要在按钮的点击回调里补全逻辑:
- 把当前订单卡片绑定的完整订单数据(订单编号、商品明细、金额、客户联系方式、配送地址等)按后端接口规范组装,调用订单提交接口
- 等接口返回订单提交成功的状态后,做页面跳转/成功提示即可,不需要客户端处理推送动作,推送全由服务端触发
3. 员工端通知接收与渲染
前台在线场景处理
- 员工端APP启动登录完成后,立即初始化WebSocket长连接,连接时携带员工身份鉴权Token,服务端通过Token标记该连接对应的员工账号、接单权限
- 监听WebSocket的消息流,收到消息后先解析消息类型,如果是新订单通知:
- 把消息体里携带的订单数据解析成你现有业务用的订单模型
- 把新订单数据插入本地订单列表的最顶部
- 调用本地通知插件触发系统通知栏提醒,配置提示音、震动,避免员工漏单
参考代码片段:
// WebSocket新订单消息监听 webSocketChannel.stream.listen((rawMsg) { final msg = jsonDecode(rawMsg); // 只处理新订单类型的消息 if (msg['msgType'] == 'new_order_notice') { // 直接复用现有订单模型解析数据 final OrderData newOrder = OrderData.fromJson(msg['orderContent']); // 更新本地订单列表状态 orderStateController.addNewOrder(newOrder); // 弹出系统通知栏提醒 localPlugin.show( newOrder.orderId.hashCode, '新订单待接单', '订单金额¥${newOrder.totalAmount} | ${newOrder.customerPhone}', platformChannelSpecifics, payload: newOrder.orderId ); } }); - 应用内收到新订单时,直接把解析好的订单数据传入你已经开发完成的订单卡片组件即可,不需要重新开发通知UI。用户点击通知栏消息时,直接携带订单ID跳转到对应订单详情页。
后台/离线场景处理
- 员工端登录成功后,获取当前设备的推送Token,上传到服务端和当前员工账号做绑定
- 服务端发在线推送的同时,如果检测到员工账号当前没有活跃的WebSocket连接,就走系统推送通道发离线消息,消息体里同样携带完整订单数据
- 用户点击离线推送启动APP时,解析推送携带的订单数据,直接跳转对应订单页即可
4. 必要权限配置
否则通知无法正常弹出:
- 安卓端:在
AndroidManifest.xml中声明网络权限、通知权限,安卓13及以上版本需要在运行时动态申请POST_NOTIFICATIONS权限 - iOS端:在
Info.plist中配置通知权限项,APP首次启动时弹出权限申请弹窗,引导用户开启通知权限
内容的提问来源于stack exchange,提问作者Hagar Nasser
相关产品推荐
相关产品推荐

