【发布时间】:2020-03-11 15:12:05
【问题描述】:
我的网络应用程序将具有基于“线程”和“消息”的聊天功能。
在任何给定线程中,2 人或更多人可以订阅新消息通知。
任何给定的人都可以拥有多个设备,每个设备都有一个相应的 FCM 令牌(在获得向他们发送通知的权限后获得)。
假设我有一个线程“猫”,有 3 个订阅者。文档结构如下:
id: "thread1"
title: "cats"
subscribers:["uid1","uid2","uid3"]
我为这三个用户存储了 FCM 令牌。文档结构如下:
id: "token1"
tokenOwner: "uid1"
id: "token2"
tokenOwner: "uid2"
id: "token3"
tokenOwner: "uid2"
id: "token4"
tokenOwner: "uid3"
id: "token5"
tokenOwner: "uid4"
要在thread1 中发送新消息通知,我需要在 FCM 令牌集合中查询tokenOwner 在提供的数组["uid1","uid2","uid3"] 中的任何令牌。
该查询看起来像这样:
db
.collection("fcmTokens")
.where('tokenOwner', 'in', ["uid1","uid2","uid3"])
.get()...
在 Cloud Firestore 查询限制出现之前,这非常有效:
使用 in 运算符在 具有逻辑 OR 的相同字段。 in 查询返回文档,其中 给定字段匹配任何比较值。
我最多只能在数组查询中包含 10 个 uid。如果有 12 人订阅了该线程,我要么不走运,要么需要运行多个查询,这似乎效率低下。
如何以“Firebase 友好”的方式构建 FCM 令牌?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-cloud-messaging