node.js - 如何查看FCM消息状态?

标签 node.js firebase web firebase-cloud-messaging service-worker

如何通过 FCM 收到消息已收到的确认?我有一个渐进式网络应用程序,它检查用户是否在数据库中保存了 fcm token ,如果有,则使用 FCM,如果没有,则诉诸 SMS(通过 twilio)。问题在于,即使浏览器关闭,也会记录“成功发送 fcm 消息”,因为消息会排队直到重新打开浏览器。

我如何知道用户确实收到了消息,并且没有卡在队列中等待?如果 Chrome 已关闭,我希望立即发送短信。

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

const serviceAccount = require('./service-account.json');
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: `https://${process.env.GCLOUD_PROJECT}.firebaseio.com`
});

function sendFCM(uid, title, body) {
  const payload = {
    notification: {
      title: title,
      body: body,
      click_action: "https://www.google.com"
    }
  };

  const payloadOptions = {
    timeToLive: 0
  };

  getUserDetails(uid).then((details) => {
    if (details.fcmToken !== undefined) {
      // send fcm message
      return admin.messaging().sendToDevice(details.fcmToken, payload, payloadOptions)
        .then(response => {
          console.log("Successfully sent fcm message");
        })
        .catch((err) => {
          console.log("Failed to send fcm message");
          return sendSMS(details.phone_number, body);
        });;
    } else {
      console.log("No fcm token found for uid", uid);
      return sendSMS(details.phone_number, body);
    }
  })
}

最佳答案

目前没有 API 或 FCM 的部分响应可以告诉您消息当前在队列中还是已经发送。

但是,您可以使用Delivery Receipts (注意:实现送达收据需要 XMPP 连接协议(protocol))。

关于node.js - 如何查看FCM消息状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44340312/

相关文章:

javascript - JavaScript 是否有类似于 php list 命令的语言结构?

node.js - 如何在 node.js 的 GraphQL 中使 InputType 灵活?

javascript - 如何使用 Firebase Web 按创建时间顺序显示数据

mysql - 如何处理未激活的数据库记录或如何防止它

java - JSP 连续滚动 在 session 中存储页面变量

javascript - 在不更改对象 ID 的情况下更新嵌套对象数据

javascript - 有没有办法在万无一失的沙箱中使用 jsdom?

android FCM 从应用程序设置启用/禁用

javascript - 如何在 Cloud Functions for Firebase 中访问多个实时数据库实例

ios - WKWebView 打不开外部链接