Android集成Firebase推送通知时Firebase函数报TypeError错误求助
解决Firebase Functions中"Cannot read property 'u_id' of undefined"报错
你遇到的问题是Firebase Functions的API版本差异导致的——你的代码沿用了旧版本的回调参数结构,但当前的Functions SDK已经更新了参数格式,这才引发了这个未定义错误。
错误根源
在Firebase Functions v1.0及以后的版本中,onWrite触发器的回调函数不再接收单个event参数,而是改为传入两个参数:
change:包含数据变化前后的快照信息context:包含触发器的上下文数据,其中就包含你需要的路径参数
你代码里的event.params在新版本中已经不存在了,自然会抛出u_id未定义的错误。
修改后的完整代码
把你的index.js替换成下面的代码:
'use strict'; const functions = require('firebase-functions'); const admin = require('firebase-admin'); // 新版本无需传入functions.config().firebase,SDK会自动完成初始化 admin.initializeApp(); exports.sendNotification = functions.database .ref('/Notifications/{u_id}/{notification_id}') .onWrite((change, context) => { // 回调参数改为(change, context) const u_id = context.params.u_id; // 从context.params中获取路径参数 const notification_id = context.params.notification_id; console.log('The User Id is ', u_id); console.log('Notification ID is ', notification_id); // 后续添加推送逻辑时,记得返回Promise或使用async/await // 暂时返回null告知Firebase函数执行完成,避免超时报错 return null; });
额外优化建议
- 运行
npm install firebase-functions@latest firebase-admin@latest确保你的依赖包是最新版本 - 函数必须返回一个Promise(或使用async/await语法),如果只是打印日志,返回
null也可以,这样Firebase才能确认函数执行完成
重新部署更新后的代码,应该就能正常获取到u_id,不会再出现这个报错了。
内容的提问来源于stack exchange,提问作者Darshit Anjaria
相关产品推荐
相关产品推荐

