【问题标题】:Firebase Schedule Push NotificationFirebase 计划推送通知
【发布时间】:2020-03-13 06:53:22
【问题描述】:

在我的项目中,当每个用户进入应用程序 (Swift-iOS) 时,他们会将时间戳字段更新为当前时间之后的 24 小时。 Firestore 中的数据树如下图所示。每个用户数据作为文档,包含在“用户”集合中。

users-collection
   user1-document
     username: nameA
     timestamp: 1574102072
   user2-document
     username: nameB
     timestamp: 1574102234

除非他们在 24 小时内再次进入应用,并且基于他们注册的时间戳的时间到了,否则我想发送推送通知 (FCM)。

我计划安排云功能,但在那一刻,云功能必须定期(例如每 5 分钟)读取太多文档并找到结束的时间戳,以发送通知。这确实是一种代价高昂的方式。有没有其他方法来处理这个问题?

【问题讨论】:

  • “阅读过多文档”是什么意思?您无需为查询未返回的文档付费。
  • 亲爱的Doug,云功能需要定期检查每个用户的时间戳数据,以了解是否结束。因此,要读取每个用户的时间戳数据,函数需要获取用户集合中每个用户的文档,这会带来成本。 CF:: 让 usersRef = db.collection('users');让 allUsers = usersRef.get() .then(snapshot => { snapshot.forEach(doc => { console.log(doc.id, '=>', doc.data().timestamp); }); }) .catch(err => { console.log('获取文档时出错', err); });

标签: swift firebase google-cloud-firestore firebase-cloud-messaging google-cloud-functions


【解决方案1】:

我建议让您的查询按时间过滤文档,而不是查询整个集合并在客户端检查时间,这样您就只会得到您需要的文档。请参阅documentation。例如:

usersRef = db.collection('users').where('timestamp', '>', current_time);

如果您将结果集限制为仅查找您实际需要的文档,则查询将更快且成本更低。

【讨论】:

  • 感谢您的建议,如果是一次性操作,没问题。但是,如果 1000 名用户(例如 10.000 名用户中的前)在 24 小时内没有进入应用程序,使用上面的过滤器,我的云功能将找到 1000 名用户(1000 名阅读)发送通知。当我们考虑应用程序的生命周期时,大约。在日常生活中,这样的阅读量只需要通知我们的用户。可以吗?而不是这样,当用户可以进入应用程序时,他是否可以设置一个时间表(如闹钟)以在 24 小时后收到通知?
  • 当然,如果您不喜欢这种方式,可以尝试其他方式。
  • 再次感谢您的方法。您能推荐一些可以由应用程序安排的第三方推送通知服务提供商吗?
  • 关于异地工具和产品的建议与 Stack Overflow 无关。请进行一些网络搜索,或发布到 Reddit 等讨论论坛以开始对话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
相关资源
最近更新 更多