我有一个带有 Firebase 管理节点 SDK 的 AWS lambda 后端。
我正在使用
admin.messaging().send(msg)
发送 FCM 消息。当发送者和接收者 flutter 应用程序安装正确时,此功能运行良好。
但是,当我删除接收器应用程序然后尝试发送消息时,
admin.messaging().send(msg)
无限期挂起,没有错误,直到 30 秒后 lambda 超时。
export async function sendEnquiryMessage(messagingEvent: MessagingEvent, fcmToken: string) {
let content = {
title: `new Message from ABC`,
body: `'${messagingEvent.message?.text ?? ""}' `,
};
console.log("sending a message to FCM: ", fcmToken);
const message = {
notification: {
body: content.body,
title: content.title,
},
data: {
clickaction: 'FLUTTER_NOTIFICATION_CLICK',
id: '1',
status: 'done',
messagingEvent: JSON.stringify(messagingEvent),
},
apns: {
payload: {
aps: {
'mutable-content': 1,
'content-available': 1
}
}
},
token: fcmToken,
};
console.log("MESSAGE TO SEND: ", JSON.stringify(message));
try {
const messageId = await admin.messaging().send(message);
console.log("MESSAGE SENT messageId ID was : ", messageId);
} catch (e) {
console.error('Error FCM message:', e);
}
return true;
}
如果接收者令牌无效或在卸载应用程序后被删除,我预计这会引发某种错误。我有一个 try catch,但它没有捕获任何错误。有没有人经历过这个以及如何修复它?
我再次安装了该应用程序并以接收者身份登录,相同的代码再次开始工作。所以我怀疑它与 FCM 令牌在删除应用程序期间失效有关,并导致 send() 期间超时。
捕获异常后发现这是一个错误,
console.error('Error FCM message:', e);
将
e
更改为 e.toString()
后,代码可以优雅地处理错误。
有人请解释一下为什么普通的
e
不起作用。
您有关于此问题的任何消息吗? 我在代码中(在 AWS Lambda 函数内部)遇到了同样的问题,并且我不知道是什么导致 send() 函数超时。
欢迎任何帮助。 谢谢。