【问题标题】:Firebase Functions not sending NotificationFirebase 函数不发送通知
【发布时间】:2019-01-30 23:48:00
【问题描述】:

我已经在我的一个新闻应用程序上使用 Functions 大约 2 周了。但是,我创建了第二个具有不同新闻的新闻应用程序。 PN 的调用使用一个网络钩子发生,该钩子将有关文章的数据发送给该主题的所有订阅者。如果我使用 web 挂钩到我以前的应用程序,它工作得很好。我使用了旧应用中相同的 Functions 代码并将其粘贴到新应用中,但它无法正常工作。

我有:

  • 检查当我使用 FCM/APNS 发送通知时是否在 iPhone 上收到通知 - 工作中
  • 检查了通知的代码和格式 - 没问题
  • 在调用其他函数时进行测试 - 工作
  • 电话已订阅推送 - 是
  • 设备订阅了主题 - 是的。通过 FCM 主题推送测试。
  • 方法调配已启用 - 是

这里是函数的代码:

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


exports.sentNotify = functions.https.onRequest((request, response) => {
 console.log("notification request received");
 console.log(request.body);
 let topic = "Martin";//request.body.primaryCategory;
 let hottness = request.body.hottness;
 let title = request.body.title;
 let description = request.body.description;
 let thumbnail = request.body.thumbnail;
 let link = request.body.url;

 const messagePayload = {
   notification: {
     title: title,
     body: description,
     icon: 'thumbnail',
     sound: 'default',
     badge: '0'
   },
   data:{
     link_url: link,
     category: "NEWS_CATEGORY"
   }
 };

 const options = {
        priority: "high",
        timeToLive: 60 * 60 * 24
    };

 return admin.messaging().sendToTopic(topic, messagePayload, options)
.then(() => {
    response.send("OK")
    return;
    });
});

这是我要发送的请求:

curl -X "POST" "https://us-central1-<my-app>.cloudfunctions.net/sentNotify" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
  "hotness": 7000,
  "thumbail": "thumbnail",
  "title": "Title",
  "publishedAt": "2018-08-24T12:37:08.000Z",
  "description": "This is the description",
  "primaryCategory": "General",
  "url": "https://google.com"
}'

【问题讨论】:

    标签: javascript firebase firebase-cloud-messaging google-cloud-functions


    【解决方案1】:

    您在发送消息之前向客户端发送了响应:

    response.send("OK")
    

    当您从 HTTPS 类型函数发送响应时,这实际上会终止该函数。任何后续代码可能不会执行(它不是确定性的),因为 Cloud Functions 保留在发送响应后限制任何进一步资源的权利。这意味着您的消息可能根本不会发送。

    仅在您完成所有工作(包括异步工作(例如发送消息)之后) 发送来自 HTTPS 函数的响应。这意味着您应该安排仅在消息最终传递后才发送响应:

    return admin.messaging().sendToTopic(topic, messagePayload, options)
    .then(() => {
        response.send("OK")
    })
    

    有关详细信息,请参阅documentation

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 2019-09-25
      • 2019-01-12
      • 2023-03-20
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2017-07-03
      相关资源
      最近更新 更多