我在其中一个新闻应用程序上使用Function已有大约2周的时间。但是,我用不同的新闻创建了第二个新闻应用程序。 PN的调用使用Web挂钩进行,该挂钩将有关文章的数据发送给该主题的所有订阅者。如果我将Web挂钩用于以前的应用程序,则它运行良好。我已经使用了旧应用程序中的相同功能代码,并将其粘贴到新应用程序中,并且无法正常工作。
我有:
这是这些功能的代码:
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"
}'
答案 0 :(得分:0)
在发送消息之前,您要先向客户端发送响应:
if(Thread.interrupted()){
Thread.currentThread().interrupt();
System.out.print("interrupted status detected manually");
break;
}
当您从HTTPS类型的函数发送响应时,它将有效地终止该函数。任何后续代码可能不会执行(不确定),因为Cloud Functions保留在发送响应后限制所有其他资源的权利。这意味着您的消息可能根本不会发送。
仅在 之后从HTTPS函数发送响应,您已完成所有工作,包括异步工作(例如发送消息)。这意味着您应该安排仅在邮件最终传递后才发送回复:
response.send("OK")
有关更多详细信息,请参见documentation。