无法使用发送到主题选项接收云功能通知

Posted

技术标签:

【中文标题】无法使用发送到主题选项接收云功能通知【英文标题】:Cannot receive cloud function notification using Send to Topic Option 【发布时间】:2021-05-15 22:47:52 【问题描述】:

我正在使用 Flutter 和 Dart 来触发云功能推送通知,但是,我似乎无法在我的设备上收到任何通知。谁能告诉我我的代码有什么问题?

const functions = require("firebase-functions");
const admin = require("firebase-admin");

admin.initializeApp(); 
exports.myFunction = functions.database.instance("fm-90011")
    .ref("orders/userId/id")
    .onCreate((snapshot, context) =>   
      console.log(snapshot.val());
      console.log("Inside push notification");
      return admin.messaging().sendToTopic("orders",notification:title:"New Order",body:'Tap to view',clickAction:'FLUTTER_NOTIFICATION_CLICK');
    );

以下是订单结构在 Firebase 实时数据库中的样子。

在云功能日志中,我得到了如下所示的日志消息:

【问题讨论】:

我不确定你的意思。能给我举个例子吗?我的理解是,当用户提交订单时,应该触发这个通知。我已经检查并确保当我提交订单时,它会保存到数据库中。 我是新手,很抱歉提出愚蠢的问题。从您的解释来看,我想做的似乎与数据库有关。当任何其他用户将数据存储到数据库中的订单表时,我想触发对特定 UrserID 的通知。如何使用推送通知来做到这一点?除了FCM还有其他解决方案吗? 如何为特定用户生成令牌?另外,当您说“设备”令牌时,我很困惑。这是否意味着如果我使用其他手机以管理员身份登录,我将无法接收通知? 但是fcm不能通过UID而不是token来唯一标识用户吗?如果使用 UID,则根本不需要存储多个令牌。这确实会成为一个问题,因为如果我的客户决定使用其他手机以管理员身份登录并且我没有存储该手机的令牌,那么他们将无法收到通知。 【参考方案1】:

基于发布/订阅模型,FCM 主题消息传递允许您向已选择加入特定主题的多个设备发送消息。您可以根据需要编写主题消息,FCM 会处理路由并将消息可靠地传递到正确的设备。

要向主题发送通知,设备必须订阅主题。

这里是如何为设备订阅主题

....
 FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
//subscribe to a notification
  _firebaseMessaging.subscribeToTopic("orders");

确保用户在添加订单之前订阅了订单。

【讨论】:

以上是关于无法使用发送到主题选项接收云功能通知的主要内容,如果未能解决你的问题,请参考以下文章

无法从 android 上的解析推送通知接收额外数据

无法将iOS CriticalAlert发送到Firebase云消息传递

使用SQS接收SES消息

使用 Amazon SNS 时无法接收到 iOS 设备的推送通知

AWS Eventbridge 通知无法使用 SNS 主题

无法收到ios通知