当一个动作完成时,如何将FirebaseMessaging动态发送给所有用户-颤振?

当一个动作完成时,如何将FirebaseMessaging动态发送给所有用户-颤振?,firebase,flutter,dart,push-notification,firebase-cloud-messaging,Firebase,Flutter,Dart,Push Notification,Firebase Cloud Messaging,我有一个flatter应用程序,在某些情况下管理员用户可以保存一份出版物 现在,我希望所有用户在发布该出版物时都能收到通知(包括标题、说明等) 我如何使用firebase消息传递实现这一点 我已经编写了这段代码,如果我转到firebase控制台并生成示例通知,我通常会收到它: 类PushNotificationsManager{ PushNotificationsManager.uz(); factory PushNotificationsManager()=>\u实例; 静态最终PushNot

我有一个flatter应用程序,在某些情况下管理员用户可以保存一份出版物

现在,我希望所有用户在发布该出版物时都能收到通知(包括标题、说明等)

我如何使用firebase消息传递实现这一点

我已经编写了这段代码,如果我转到firebase控制台并生成示例通知,我通常会收到它:

类PushNotificationsManager{
PushNotificationsManager.uz();
factory PushNotificationsManager()=>\u实例;
静态最终PushNotificationsManager_实例=PushNotificationsManager.z();
最终FirebaseMessaging_FirebaseMessaging=FirebaseMessaging();
Future init()异步{
if(Platform.isIOS){
_firebaseMessaging.requestNotificationPermissions(IONotificationSettings());
}
_firebaseMessaging.configure(
//当应用程序位于前台且我们收到推送notif时调用。
onMessage:(映射消息)异步{
打印(“onMessage:${message}”);
打印(消息['notification']['body']);
},
//当应用程序完全关闭且其已打开时调用
//直接从通知中删除
onLaunch:(映射消息)异步{
打印(“onMessage:${message}”);
},
//当应用程序位于后台且其已从notif打开时调用
onResume:(映射消息)异步{
打印(“onMessage:${message}”);
},
);
}
总之,当管理员创建新出版物时,我如何向所有用户生成通知(创建标题和说明),而不必到firebase控制台手动生成通知

  • 我正在使用
    firebase\u消息:^7.0.3
更新 我试着这样做:

Future sendNotification()异步{
最终字符串url=https://fcm.googleapis.com/fcm/send';
var token=await_firebaseMessaging.getToken();
var数据;
数据={“通知”:{“正文”:“这是一个正文”,“标题”:“这是一个标题”},“优先级”:“高”,“数据”:{“点击动作”:“颤振通知”},“到”:“${token}”;
最终响应=等待http.post(
网址,
标题:{“内容类型”:“应用程序/json”,“保持活动状态”:“超时=5”,“授权”:“key=${mykey}”},
正文:数据
);
打印(响应.正文);
}

…使用“我在firebase中保存事件”的方法调用此函数,只会向我的手机显示通知,而不是向每部手机显示通知,此表单中有一种方法可以执行此操作?

您可以使用云函数执行此操作。创建发布时,可以从应用程序调用此函数,也可以让云函数侦听新文档。有关一些想法,请参阅此媒体帖子:

更新

根据您的更新,我建议您考虑使用“主题”,而不是特定的令牌(仅适用于一台设备)。要使用主题,您需要确保所有用户在打开应用程序时自动订阅所选主题(他们每次都可以订阅同一主题,不会产生负面影响).FCM根据主题维护已订阅设备令牌的列表


我没有通过http post使用主题,因此我无法确认这是否可行,但我假设如果您可以发送到令牌,您必须能够发送到主题。

请将其标记为已接受的答案(单击勾选)如果您对此感到满意。:-)谢谢您的回答,请查看我的更新,最初我正在以另一种方式尝试。但在您的示例中,文章说“实时数据库”,我将数据存储在FireStore中。您使用的数据库与FCM无关,您可以使用自己的sql server。您需要在FCM上读取文档,从t调用它客户端、云函数等。firebaser此处通过FCM向其他用户发送消息需要您在API调用中指定FCM服务器密钥。顾名思义,此密钥只能在服务器上使用(或其他受信任的环境,如云函数)因为它允许任何拥有它的人向您的任何用户发送他们想要的任何消息。通过将此FCM服务器密钥嵌入到您提供给用户的Flitter应用程序中,您会使他们遭受滥用和垃圾邮件,这是一个严重的安全风险。感谢您的回答,那么您建议我如何执行此操作?正如文档所示:来自受信任的用户环境,例如您的开发机器、您控制的服务器或云功能。另请参见我的回答: