Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
从Firebase云消息发送通知到单个设备_Firebase_Flutter_Google Cloud Firestore_Firebase Cloud Messaging - Fatal编程技术网

从Firebase云消息发送通知到单个设备

从Firebase云消息发送通知到单个设备,firebase,flutter,google-cloud-firestore,firebase-cloud-messaging,Firebase,Flutter,Google Cloud Firestore,Firebase Cloud Messaging,我们正在构建一个在flifter中具有聊天功能的应用程序,我已经弄清楚了应该如何做,除了通知如何只能发送到一个设备(或者可能是几个设备) 到目前为止,最好的选择是将通知发送到FCM注册令牌,因为我们所有的后端都使用Firebase,但我不能在不知道令牌的情况下这样做。我能知道的唯一方法是将它存储在Firestore中(例如用户文档),并在需要时检索它。这是一个好的解决方案吗?如果注册令牌发生更改,会发生什么情况?我是否应该在用户每次打开应用程序时更新令牌以确保其正确性?您不需要将令牌存储在服务器

我们正在构建一个在flifter中具有聊天功能的应用程序,我已经弄清楚了应该如何做,除了通知如何只能发送到一个设备(或者可能是几个设备)


到目前为止,最好的选择是将通知发送到FCM注册令牌,因为我们所有的后端都使用Firebase,但我不能在不知道令牌的情况下这样做。我能知道的唯一方法是将它存储在Firestore中(例如用户文档),并在需要时检索它。这是一个好的解决方案吗?如果注册令牌发生更改,会发生什么情况?我是否应该在用户每次打开应用程序时更新令牌以确保其正确性?

您不需要将令牌存储在服务器上,只需要知道您将消息发送给谁。只需遵循以下步骤

客户

1.a当应用程序启动时,通过
getToken()

1.b在当地储存

1.c如果已经更改,则将其发送到云函数,并将其注册到or

1.d不要忘记注册到
onTokenRefresh()
以重复1.a-c以获得新令牌

服务器

2.a实现与1.c对应的功能


2.b需要时,向主题或设备组发送消息

我可以直接从Flatter订阅主题,我认为这与1.c相同?此外,不建议使用主题向单个设备发送通知,如下所示:但这可能是最好的解决方案?您可以选择主题或设备组,因为您希望直接从客户端订阅主题吗?我认为这是一个需要更高权限的操作,只能从服务器上完成…FirebaseMessaging().subscribeToTopic('topic')在Flatter中至少您需要提供FCM服务器密钥吗?将令牌存储在数据库中是很常见的。要存储令牌,您通常只需要侦听。在Android上,您可以在后台处理程序中执行此操作,这样当应用程序未被使用时,代码也会处于活动状态。但我不知道如何在颤振上实现同样的效果。如果这是不可能的,那么每次应用程序启动时都这样做确实是一个有效的解决方案。好的,谢谢。我想我可以在后台执行代码,我会研究它