我正在使用FCM进行通知。FCM在从Firebase数据库创建数据时被触发。我收到了第一条信息。在此之后,不会接收到其他连续的消息。我在本地环境中运行这个。问题是由于下面的消息";未配置帐单帐户。外部网络无法访问,配额受到严重限制。配置计费帐户以删除这些限制";或任何其他问题。我是否需要进入一个接收消息的计费计划。在测试环境中工作,这就是不转向计费计划的原因。如果问题与计费计划无关,有人可以指出代码的任何其他问题。
Firebase功能日志
6:22:52.133 PM
sendFollowerNotification
Function execution started
6:22:52.133 PM
sendFollowerNotification
Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictions
6:22:52.143 PM
sendFollowerNotification
Function execution took 10 ms, finished with status: 'ok'
6:22:52.401 PM
sendFollowerNotification
1 messages were sent successfully
节点js代码
exports.sendFollowerNotification = functions.database.ref('/notification/message/{gId}/{pId}')
.onCreate(async (change, context) => {
//console.log('Group id:', context.params.gId," Push ID:",context.params.pId, "Change",change);
const notificationData = change.val();
var topic = notificationData.topic;
var title = notificationData.title;
var body = notificationData.body;
var registrationTokens = notificationData.tokens;
const message = {
notification: {
title: title,
body: body
},
tokens: registrationTokens,
};
admin.messaging().sendMulticast(message)
.then((response) => {
// Response is a message ID string.
console.log(response.successCount + ' messages were sent successfully');
})
.catch((error) => {
console.log('Error sending message:', error);
});
});
该消息并不表示有错误。这只是一个警告,让你知道,如果你的项目不在付款计划中,那么对外网络是不起作用的。FCM消息不属于这一类——它应该起作用。
问题是,您的代码没有返回在所有异步工作完成后解决的promise。现在,它什么也不返回,并且函数在消息发送之前立即终止。请阅读并理解相关文档。
最起码,您需要返回承诺链,让云功能知道消息何时发送,并且可以安全地终止。
return admin.messaging().sendMulticast(message)
.then((response) => {
// Response is a message ID string.
console.log(response.successCount + ' messages were sent successfully');
})
.catch((error) => {
console.log('Error sending message:', error);
});
注意上面的return关键字。
如果消息仍然没有发送,那么这里还有一些我们看不到的其他问题。您可能没有正确处理设备令牌。
我想这可能会回答你的问题:为什么我需要一个计费帐户才能使用Node.js 10或更高版本的Firebase云功能?:
由于计划于2020年8月17日更新其底层架构,Firebase的云功能将依赖于一些额外的付费谷歌服务:云构建、容器注册和云存储。这些架构更新将适用于部署到Node.js 10运行时的功能。这些服务的使用将在现有定价的基础上进行计费。
在新架构中,Cloud Build支持功能的部署。您将只为构建函数运行时容器所需的计算时间付费。
另一方面,服务Firebase Clud Messaging
本身是免费的:
Firebase云消息(FCM(在您的服务器和设备之间提供可靠且节省电池的连接,允许您在iOS、Android和网络上免费发送和接收消息和通知。
如果您在CF中使用Node,平台需要您一个计费帐户。