未通过 firebase 函数发送通知。 “未定义”登录控制台

Posted

技术标签:

【中文标题】未通过 firebase 函数发送通知。 “未定义”登录控制台【英文标题】:Notification not being sent via firebase functions. "undefined" logged in console 【发布时间】:2020-01-28 22:16:48 【问题描述】:

我正在尝试根据其令牌向所有设备发送示例通知,但是该令牌被记录为“未定义”,并且通知随后无法传递

我的代码中的以下几行成功地向我显示了数据库中的数据:

const notificationSnapshot = change.after.val(); //get new value
console.info(notificationSnapshot);

但是,尽管上述检索数据成功,但以下给出“未定义”。

const userToken = notificationSnapshot.token;
console.info(userToken);

这不是检索令牌以将通知发送到我的 firebase 数据库中所有已注册设备的正确方法吗?

我的整个函数(index.js

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();

exports.sendSampleNotification = functions.database.ref('/User')
.onWrite((change, context) => 
const notificationSnapshot = change.after.val(); //get new value
const userToken = notificationSnapshot.token;
const name = notificationSnapshot.name;
const surname = notificationSnapshot.surname;

console.info(notificationSnapshot);
console.info(userToken);

var message = 
notification: 
title: 'test title',
body: 'test message'
,
token: userToken
;
admin.messaging().send(message).then((response) => 
console.log("Message sent successfully:", response);
return response;
)
.catch((error) => 
console.log("Error sending message: ", error);
);
);

【问题讨论】:

你能把你写的对象显示在User节点下吗?换句话说,你用console.info(notificationSnapshot); 得到了什么?你确定这个对象有一个令牌属性吗? 代码的所有缩进都丢失了,难以阅读。 :-( 如果您返回,粘贴它,然后用三个反引号再次格式化它会很有帮助,这样更容易理解。 此外,您似乎没有返回当函数中的所有异步工作完成时解决的承诺。简单地在 promise 上调用 then/catch 并不足以让 Cloud Functions 正确处理它。 【参考方案1】:

我想说您的问题与 this one 非常相似,因为由于执行时间,您缺少令牌(显示为未定义),或多或少是 Doug 指出的。

请注意,该解决方案依赖于考虑执行时间,而且我还看到在某些方法执行中实现有所不同,但我会说将军们指向同一个方向。

【讨论】:

以上是关于未通过 firebase 函数发送通知。 “未定义”登录控制台的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 函数 - 发送推送并收到错误消息“TypeError:无法将未定义或 null 转换为对象”[关闭]

Firebase 云函数 - 返回未定义、预期的 Promise 或值

函数返回未定义、预期的 Promise 或值 Firebase 日志错误

Firebase 函数 - ReferenceError:未定义事件

firebase云函数错误TypeError:无法读取未定义的属性“子”

Firebase TypeError:无法读取未定义的属性“val”