Flutter结合Firebase实现匹配用户创建聊天室及动态通知方案咨询
同选项值用户自动创建聊天室的实现方案
以下两种方案均可落地,可根据业务量级选择:
- 客户端前置校验方案(轻量场景适用,无需开发云函数)
- 为Cupertino Picker的每个选项生成唯一固定标识,比如对选项值做哈希后拼接前缀生成
option_xxxx格式的字符串,作为聊天室集合的候选文档ID - 用户选中选项后,客户端先查询Firestore中对应
option_xxxx的聊天室文档:如果文档不存在则创建,将当前用户加入成员列表,标记聊天室为「待匹配」状态;如果文档存在且成员数为1,使用Firestore自带的runTransaction原子操作将当前用户加入成员列表,同时标记聊天室为「可聊天」状态 - 客户端监听自己加入的聊天室状态变更,匹配完成后自动跳转至聊天页即可
注意:必须用事务操作更新成员列表,避免两个用户同时加入同一待匹配聊天室时出现并发冲突
- 为Cupertino Picker的每个选项生成唯一固定标识,比如对选项值做哈希后拼接前缀生成
- 云函数匹配方案(中大量级适用,逻辑更稳定)
- 新增一个
match_requests集合,用户选中选项后,将用户ID、选项值、提交时间写入该集合,文档ID设为当前用户ID,避免同一用户重复提交匹配请求 - 编写Cloud Functions触发器,监听
match_requests集合的onCreate事件,每次有新请求写入时,查询同选项值下、提交时间早于当前请求的待匹配记录 - 查到符合条件的用户后,直接在云函数侧创建聊天室文档,写入两个用户的成员信息,同步删除两条匹配请求记录,再通过FCM给两个用户推送匹配完成通知即可
- 新增一个
动态主题通知的实现选型
不需要强制搭配Cloud Functions、TypeScript和onCreate触发器,可根据实际需求选择实现方式:
- 如果是用户自定义主题切换,直接将用户选中的主题配置存在本地持久化存储,或者存储到对应用户的私有Firestore文档中,客户端监听自身用户文档的变更事件即可同步主题,全程无需云函数参与
- 如果是全局统一动态主题推送,比如官方推送节日专属主题,只需在Firestore中维护一个全局
app_config公共文档,所有客户端监听该文档的变更事件,后台修改文档中的主题配置字段后,所有在线用户会自动收到变更通知切换主题,也不需要云函数 - 只有当主题更新时需要给离线用户发推送通知、或者需要联动其他业务逻辑(比如主题更新同步发放用户权益、统计主题启用率)时,才需要用到Cloud Functions:你可以选择用JavaScript或者TypeScript编写函数,监听
app_config文档的onUpdate事件触发后续逻辑即可,没有强制要求必须用TypeScript或onCreate触发器
内容的提问来源于stack exchange,提问作者Fahmi Sawalha
相关产品推荐
相关产品推荐

