给出简单功能;如果我仅控制台日志“上下文”,则返回带有两个参数的日志,但是如果我按照以下示例专门控制台日志(或以其他方式引用)单个参数,则会出现此firestoreInstance.settings
错误。如果有人能指出我正确的方向,请对此表示感谢。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
exports.newNotification = functions.firestore
.document('/messages/{senderUsername}/threads/{recipientUsername}/lines/{docId}')
.onCreate((snap, context) => {
const message = snap.data();
const sender = context.params.senderUsername;
const recipient = context.params.recipientUsername;
console.log('Notifying', message, sender, recipient);
});
错误如下:
编辑--- 因此,它似乎是断断续续的。我触发了一条消息,然后等待并触发了另一条消息-一个返回了错误,另一个返回了所需的结果。
也许链接到时间戳(服务器时间戳)?
编辑-
所以我将代码更改为以下内容:
exports.newNotification = functions.firestore.document('/messages/{senderUsername}/threads/{recipientUsername}/lines/{docId}')
.onCreate((snap, context) => {
const message = snap.data();
const sender = context.params.senderUsername;
const recipient = context.params.recipientUsername;
console.log('Notifying', message, sender, recipient);
const deviceRef = admin.firestore().doc(`/devices/${recipient}`);
deviceRef.get().then(doc => {
const val = doc.data();
const payload = {
notification: {
title: 'New Message!',
body: `${sender}: ${message.msg}`
}
};
const token = val.token;
return admin.messaging().sendToDevice(token, payload);
}).catch(err => console.log(err));
});
看来我们又回到了错误-偶尔有人成功通过了。延迟背景/延长观察者订阅时间是否可能导致类似问题?
这是上下文的控制台日志,要求提供注释:
出于记录目的,我尝试删除消息之间的令牌,但该令牌应被捕获。我在设备令牌的开头添加了一些字符,它返回了通常的错误-我将继续测试,也许如果令牌无效并且需要更新,这是您得到的错误吗?
编辑-
我不为人知的结论是,在某种形式的缓存方法形式化功能之前,功能起步还很冷-也许由于在这些“固化”时刻之间进行测试,我可能会遇到间歇性错误。如您所见,它从错误到延迟到几乎立即发生。如果知道的人有一些知识,仍然希望在这个问题上有一些澄清。
编辑-
我发现,如果时间流逝,工作功能可能会死掉,那么它似乎已经死了,并且可能像僵尸一样呆滞,然后又开始执行更多的处决并恢复健康:>
答案 0 :(得分:3)
将firebase-admin更新到最新版本(5.13.1)后,它可以正常工作。似乎firebase-functions v2需要firebase-admin 5.13.0或更高版本!