【问题标题】:Firebase push notifications for users with specific firestore fields具有特定 Firestore 字段的用户的 Firebase 推送通知
【发布时间】:2021-01-26 08:53:17
【问题描述】:

我目前正在制作一个类似于聊天室的应用程序,该应用程序与 firestore 一起使用以将用户连接到主机的会话。我遇到了一个问题,即客户端设备在锁定/后台时间过长时失去连接/停止侦听 Firestore 更改(据我所知,这是因为设备试图通过杀死长期存在的进程来节省电力)。我了解到一种解决方法是在更改 firestore 文档之前向设备发送 FCM 推送通知,以便重新唤醒应用程序并让应用程序监听 firestore 文档更改。我不确定如何实现推送通知,但我了解到它需要用户特定的令牌(必须受到保护)。忽略我不确定如何实现推送通知的事实(将不胜感激noob友好指针),将用户令牌作为字段上传到firestore是一种可行的方法吗?我在想我可以使用我的辅助函数(它获取特定会话的所有非主机)来向每个人发送推送通知。

 _vibrateAllDevices() async {
    var lobbies = await lobby
        .where('lobbyCode', isEqualTo: _lobbyCode)
        .where('userRole', isEqualTo: 2)
        .get();
    lobbies.docs.forEach(
      (document) async {
        document.reference.update(<String, dynamic>{'vibrate': true});
      },
    );
  }

每个大厅预计可容纳 2-30 人,因此每人循环似乎不是什么大问题。这似乎是一种可行的方法,还是将令牌存储到不安全的地方?我还应该提到,每个大厅预计只会开放很短的时间(最多约 3 小时),并且所有信息都会在之后立即删除。

【问题讨论】:

    标签: android firebase flutter dart google-cloud-firestore


    【解决方案1】:

    如果另一个人订阅了您自己的主题,Firebase 通过通知确保在创建 Firestore 字段时另一个人订阅了该主题。当您触发通知时,会在 FirebaseMessages 服务类中的另一个人中自动接收通知,其中 onmessagereceive 方法。 在 firebase 和 Firestore 中触发通知的方法相同,因为服务器密钥始终相同。 我建议您阅读此文档: https://medium.com/mindorks/send-device-to-device-push-notification-using-firebase-cloud-messaging-without-using-external-769476c79ffd

    【讨论】:

    • 感谢您的回复,我正在考虑主题路由,但我听说它更注重接收消息而不是尽快通知。我需要所有设备(它们通常在同一个房间)在几秒钟内收到通知,所以越快越好。您知道订阅​​主题是否符合该要求?
    猜你喜欢
    • 2020-05-26
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多