我已经在我的一个新闻应用程序上使用函数大约 2 周了。但是,我创建了具有不同新闻的第二个新闻应用程序。PN 的调用是使用 Web 钩子进行的,该钩子将有关文章的数据发送给该主题的所有订阅者。如果我使用网络钩子到我以前的应用程序,它运行良好。我使用了旧应用程序中的相同函数代码并将其粘贴到新应用程序中,但它不起作用。
我有:
- 检查当我使用 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"
}'
在发送消息之前,您先向客户端发送响应:
response.send("OK")
当您从 HTTPS 类型函数发送响应时,这将有效地终止该函数。 任何后续代码都可能无法执行(它不是确定性的(,因为 Cloud Functions 保留在发送响应后限制任何进一步资源的权利。 这意味着您的消息可能根本无法发送。
仅在完成所有工作(包括异步工作(例如发送消息((后,才从 HTTPS 函数发送响应。 这意味着您应该安排仅在消息最终传递后发送响应:
return admin.messaging().sendToTopic(topic, messagePayload, options)
.then(() => {
response.send("OK")
})
有关更多详细信息,请参阅文档。