Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有特定firestore字段的用户的Firebase推送通知_Android_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Android 具有特定firestore字段的用户的Firebase推送通知

Android 具有特定firestore字段的用户的Firebase推送通知,android,firebase,flutter,dart,google-cloud-firestore,Android,Firebase,Flutter,Dart,Google Cloud Firestore,我目前正在制作一个类似聊天室的应用程序,它与firestore一起工作,将用户连接到主机的会话。我遇到了一个问题,客户端设备失去连接/在锁定/后台太长时间后停止侦听firestore更改(据我所知,这是因为该设备试图通过终止长时间运行的进程来节省电源)。我了解到一种解决方法是在更改firestore文档之前向设备发送FCM推送通知,以便重新唤醒应用程序并让应用程序侦听firestore文档的更改。我不确定如何实现推送通知,但我了解到它需要一个特定于用户的令牌(必须加以保护)。忽略我不确定如何实现

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

 _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});
      },
    );
  }
\u所有设备()异步{
var lobbies=等待大厅
.where('lobbyCode',isEqualTo:_lobbyCode)
.where('userRole',isEqualTo:2)
.get();
大厅。文件。forEach(
(文档)异步{
document.reference.update({'strimble':true});
},
);
}

每个大厅预计会有2-30人,所以每人循环似乎不是什么大问题。这似乎是一种可行的方法,还是将代币存储到firestore是一种不安全的方法?我还应该提到,每个大厅预计只会打开一小段时间(最多3小时),所有信息都会立即删除。

如果有人订阅您自己的主题,请确保在创建Firestore字段时有其他人订阅该主题。当您触发通知时,则会在FirebaseMessages服务类中的另一个人中自动接收通知,方法onmessagereceive。 在firebase和Firestore中触发通知的方式相同,因为服务器密钥始终相同。 我建议您阅读以下文档:

感谢您的回复,我正在考虑主题路线,但我听说它更注重让消息被接收,而不是尽快通知。我需要所有设备(通常在同一个房间)在几秒钟内收到通知,所以越快越好。您知道订阅主题是否符合该要求吗?