首页 > 解决方案 > 使用 node.js 通过条件向多个主题发送 FCM 通知的正确语法是什么?

问题描述

我正在尝试将 fcm 通知从我的 node.js 服务器发送到 android 设备。它与单个主题一起工作,但在有多个主题时失败。

注意:使用单个主题,例如,

var topic = 'MaleFemale'; // here i have only one topic 
                var message = {
                    android: {
                        ttl: 5*60*1000, // 5 min in milliseconds
                        priority: 'normal',
                        notification: {
                        title: 'Someone want to chat',
                        body: 'Tap to join chat',
                        icon: 'stock_ticker_update',
                        color: '#2C5AE1'
                        }
                    },
                    topic: topic
                };

                send.admin.messaging().send(message)
                .then((response) => {
                // Response is a message ID string.
                console.log('Successfully sent message:', response);
                })
                .catch((error) => {
                console.log('Error sending message:', error);
                });

注意:在多个主题中失败,例如,

var topic = "'FemaleAny' in topics || 'MaleAny' in topics";//here i have multiple topic 
                var message = {
                    android: {
                        ttl: 5*60*1000, // 5 min in milliseconds
                        priority: 'normal',
                        notification: {
                        title: 'Someone want to chat',
                        body: 'Tap to join chat',
                        icon: 'stock_ticker_update',
                        color: '#2C5AE1'
                        }
                    },
                    condition: topic
                };

                send.admin.messaging().sendToCondition(message)
                .then((response) => {
                // Response is a message ID string.
                console.log('Successfully sent message:', response);
                })
                .catch((error) => {
                console.log('Error sending message:', error);
                });

错误 :

throw new error_1.FirebaseMessagingError(error_1.MessagingClientErrorCode.INVALID_RECIPIENT, 'Condition provided to sendToCondition() must be a non-empty string.');
            ^

Error: Condition provided to sendToCondition() must be a non-empty string.
    at FirebaseMessagingError.FirebaseError [as constructor] (/Users/kdblue/Desktop/Android Projects/ChatApp/server/node_modules/firebase-admin/lib/utils/error.js:39:28)
    at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/Users/kdblue/Desktop/Android Projects/ChatApp/server/node_modules/firebase-admin/lib/utils/error.js:85:28)
    at new FirebaseMessagingError (/Users/kdblue/Desktop/Android Projects/ChatApp/server/node_modules/firebase-admin/lib/utils/error.js:241:16)
    at Messaging.sendToCondition (/Users/kdblue/Desktop/Android Projects/ChatApp/server/node_modules/firebase-admin/lib/messaging/messaging.js:637:19)
    at manageQueue (/Users/kdblue/Desktop/Android Projects/ChatApp/server/index.js:268:40)
    at Socket.socket.on (/Users/kdblue/Desktop/Android Projects/ChatApp/server/index.js:25:9)
    at Socket.emit (events.js:182:13)
    at /Users/kdblue/Desktop/Android Projects/ChatApp/server/node_modules/socket.io/lib/socket.js:528:12
    at process._tickCallback (internal/process/next_tick.js:61:11)

我试过但没有为我工作:-

1) https://firebase.google.com/docs/cloud-messaging/admin/send-messages?authuser=0

2)通过条件将 Firebase 云消息传递(FCM)发送到多个主题的正确语法是什么

标签: node.js

解决方案


它有点奇怪,我正在回答我的问题,无论如何我通过改变方法解决了sendToCondition()问题send()

var condition = "'FemaleAny' in topics || 'MaleAny' in topics";
                var message = {
                    android: {
                        ttl: 30*1000, //  30sec in milliseconds
                        priority: 'normal',
                        notification: {
                        title: 'Someone want to chat',
                        body: 'Tap to join chat',
                        icon: 'stock_ticker_update',
                        color: '#2C5AE1',
                        tag: '4'
                        }
                    },
                    condition: condition
                };

                send.admin.messaging().send(message)
                .then((response) => {
                // Response is a message ID string.
                console.log('Successfully sent message:', response);
                })
                .catch((error) => {
                console.log('Error sending message:', error);
                });

推荐阅读