有没有办法在同一主题中向不同用户发送不同的徽章数?

时间:2017-07-14 07:24:01

标签: ios node.js firebase notifications firebase-cloud-messaging

我在我的Node.js项目中有FCM集成,我向IOS用户发送了多个通知,我需要管理通知计数,即徽章计数,这些设备在设备之间会有所不同,但我会向特定主题发送通知订阅这些设备。

我的有效负载是:

    var payload = {
            notification: {
                title: "Title...",
                body: "Notification Body...",
                sound: "customeSound.caf",
                badge : "?"
            },
            data: {
                testData: "custom data"
            }
        },
topic = "topicName";

        admin.messaging().sendToTopic(topic, payload)
            .then(function (response) {
                // See the MessagingTopicResponse reference documentation for the
                // contents of response.
                console.log("Successfully sent message:", response);
            })
            .catch(function (error) {
                console.log("Error sending message:", error);
            });
    });

2 个答案:

答案 0 :(得分:2)

订阅相应主题的所有设备都将收到您设置的相同负载。

您必须为每个设备发送单独的有效负载。或者,如果适用,可能只是对具有相似badge值的那些进行分组 - 但这需要您发送到一组令牌(使用registration_ids)而不是发送到主题。

答案 1 :(得分:2)

如果您有设备令牌并且想要将徽章计数发送到相应的设备令牌,

与其一个一个地发送它们(我个人认为这不是一个好主意),您可以做的最佳选择是:-

您可以通过执行以下操作来实现此目的..... 首先,您需要查询您的数据库以分别获取设备令牌和徽章计数

所以说就像你有和数组

const badgeCounts = [{
    device_token:'aaaaaaaaaaaaaaaaaaaaaa',
    badge_count: 1
},{
    device_token:'bbbbbbbbbbbbbbbbbbbbbb',
    badge_count: 2
},{
    device_token:'cccccccccccccccccccccc',
    badge_count: 3
},{
    device_token:'dddddddddddddddddddddd',
    badge_count: 4
}]

现在您可以映射此数组并组合 fcm 消息数组,如下所示:-

const fcmMessages = [];

badgeCounts.forEach((data) => {
  fcmMessages.push({
    token: data.device_token, //device token
    apns: {
      payload: {
        aps: {
          alert: {
            title: "your title",
            body: "your body",
          },
          badge: data.badge_count, // badge
          contentAvailable: true,
        },
      },
    },
    data: {
      // any payload goes here...
    },
    notification: {
      title: "your title",
      body: "your body",
    },
  });
});

/// in firebase messiging you can do like
messaging.sendAll(fcmMessages);

参考文档 https://firebase.google.com/docs/reference/admin/node/admin.messaging.Messaging-1#sendall