当前位置: 首页 > 知识库问答 >
问题:

如何在Flutter中禁用每个设备/用户的云消息传递?

柳胜
2023-03-14

例如,在聊天应用程序中,当用户a向用户B发送消息时,推送通知可能属于“聊天消息”类别,而用户a也可以删除与用户B的聊天,推送通知可能属于“删除的聊天”类别。

如何使用户B可以关闭“已删除聊天”的通知,同时仍然接收“聊天消息”的通知?是否有可能以一种或另一种方式将一个条件与一个主题和一个用户的注册令牌一起使用?任何想法都非常感谢!

共有1个答案

云鸿达
2023-03-14

多亏了道格在正确方向上的大力推动,我才能够弄明白!在下面发布我的代码,以帮助任何人朝着正确的方向迈出同样的一步。

因此,在我的flutter应用程序的设置页面中,用户可以打开和关闭几个类别的通知。然后,用户的首选项存储在my Cloud FirestoreUsers集合中的特定于用户的文档中。有关我在设置页上使用的switchlisttile示例,请参见下面的代码。

SwitchListTile(
   title: Text('Admin notifications'),
   subtitle: Text('Maintenance and general notes'),
   onChanged: (value) {
     setState(() {
       adminNotifications = value;
       Firestore.instance
       .collection('users')
       .document(loggedInUser.uid)
       .updateData({
       'adminNotifications': value,
       });
    });
    save('adminNotifications', value);
  },
  value: adminNotifications,
),

在云函数中,我在users集合中添加了对文档的引用,并检查字段adminNotifications的值是否等于true。如果是,则发送通知,否则不向用户发送通知。下面我添加了云功能。请注意,云函数呈现“嵌套promise”警告,但它现在有效!我仍然是一个Flutter初学者,所以我很高兴让它工作。再次感谢道格!

exports.userNotifications = functions.firestore.document('notifications/{any}').onCreate((change, context) => {
    const userFcm = change.data().fcmToken;
    const title = change.data().title;
    const body = change.data().body;
    const forUser = change.data().for;
    const notificationContent = {
    notification: {
        title: title,
        body: body,
        badge: '1',
        click_action: 'FLUTTER_NOTIFICATION_CLICK',
        }
    };
    var usersRef = db.collection('users');
    var queryRef = usersRef.where('login', '==', forUser).limit(1).get()
    .then(snapshot => {
        snapshot.forEach(doc => {
            const adminNotifications = doc.data().adminNotifications;
            console.log(adminNotifications);

            if(swapNotifications === true){
                return admin.messaging().sendToDevice(userFcm, notificationContent)
                    .then(() => {
                    console.log('notification sent')
                    return
                    })
                    .catch(error =>{
                        console.log('error in sending notification', error)
                    })
                } else {
                    console.log('message not send due to swapNotification preferences')
                }
    return console.log('reading user data success');
    })
    .catch(err => {
        console.log('error in retrieving user data:', err)
    })
});
 类似资料:
  • 在搜索文档之后,我找不到任何关于如何在没有使用外部服务器的情况下使用FCM向设备发送消息的信息。 例如,如果我正在创建一个聊天应用程序,我将需要向用户发送关于未读消息的推送通知,因为他们不会一直在线,而且我不可能在后台有一个始终连接到实时数据库的持久服务,因为这会占用太多资源。 那么当某个用户“B”向他/她发送聊天消息时,我将如何向用户“a”发送推送通知呢?我需要一个外部服务器来完成这个任务吗?还

  • 是否有方法创建登录用户范围的注册id。我有一个应用程序,允许用户以不同的用户身份登录(例如一个用户作为学生,另一个用户作为家长)。用户可以在用户之间切换。这种情况有点类似于gmail应用程序,可以同时登录多个电子邮件ID。 问题是我们什么时候打电话 它将给出该应用程序实例的设备id。因此,如果我要针对登录的特定用户,我不能。 我可以实现以用户为目标的一种方法是显式地将用户id作为数据发送,在我的情

  • 我不明白如何从iOS设备向另一个iOS设备发送消息,我试图理解Firebase通知和Google云消息之间的区别。 null Google Cloud Messaging:它将消息从服务器发送到设备(下游)或设备发送到服务器(上游)!! 上游示例: 如果我需要从一个设备发送一个推送消息到另一个设备呢!这是否意味着在设备发送消息到服务器之后,我必须编程firebase服务器发送推送到客户端?真让人摸

  • 我不确定如何在上使用和接收数据消息。 为了让您快速了解我的立场,我可以在我的设备上接收。所以我已经正确地配置了所有的东西(或者我相信是这样)。 所以,当应用程序在后台时,我会在通知托盘中得到一个通知。 当应用程序处于前台时,我也会在onMessage回调中接收消息。 但是,当我试图通过请求来模拟数据消息https://fcm.googleapis.com/fcm/send并发送正文时: 我的onm

  • 所以我的问题是我该怎么做?这似乎是一个非常简单的需求,但我在文档中找不到任何关于如何执行的内容。 多谢了。

  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。