调用Firebase Messaging getToken()报错:仅工作笔记本出现Cannot read property 'buffer' of undefined
解决Firebase Messaging getToken()抛出"Cannot read property 'buffer' of undefined"的环境差异问题
这种环境差异导致的问题确实挺让人挠头的,结合你遇到的情况(仅工作笔记本报错,个人PC正常),我整理了几个针对性的排查方向和解决方案:
1. 排查浏览器环境差异
工作笔记本的浏览器可能存在版本过低、插件拦截或隐私设置限制的情况:
- 把浏览器升级到最新稳定版,确保完全支持Firebase Messaging依赖的Push API和Service Worker特性
- 暂时禁用所有浏览器插件(尤其是广告拦截、隐私防护类插件)后重试,这类插件常干扰FCM令牌生成流程
- 检查浏览器隐私设置:确保已允许网站发送通知,且未限制Service Worker的运行权限
2. 校验依赖安装一致性
可能工作环境的Firebase依赖存在缓存或版本不一致问题:
- 删除工作环境下的
node_modules文件夹、package-lock.json(或yarn.lock)文件,重新执行npm install/yarn install,确保依赖完全干净 - 对比个人PC和工作笔记本的
package.json,确保firebase及相关子包的版本号完全一致,建议在package.json中锁定具体版本(避免使用^或~自动升级)
3. 重置Service Worker配置
Service Worker的缓存或注册异常也可能引发这类错误:
- 打开浏览器开发者工具的「Application」标签,找到「Service Workers」选项,注销当前注册的Service Worker,然后刷新页面重新触发流程
- 检查Firebase初始化代码中Service Worker的路径配置,确保指向正确的
firebase-messaging-sw.js文件(或自定义的Service Worker文件)
4. 排查网络代理/防火墙限制
公司网络的代理或防火墙可能阻断了FCM的通信:
- 切换到个人热点网络重试,验证是否是公司网络限制导致的问题
- 确认公司网络允许访问Firebase相关域名(如
fcm.googleapis.com、firebase.googleapis.com)
你提供的相关代码
this.messaging.requestPermission() .then(() => { console.log('Notification permission granted!'); return me.messaging.getToken(); // 此处在工作笔记本触发错误 }) .then(messagingToken=> { me.updateMessagingToken(messagingToken); }) .catch((err) => { console.log('Unable to get permission to notify.', err); me.openSnackBar("Unable to get permission to notify!" + err); })
报错信息说明
报错显示在getToken()调用环节,错误栈指向Firebase SDK内部的fromBase64函数,提示无法读取undefined的buffer属性,这通常意味着SDK在处理令牌生成的中间数据时,因为前置步骤(如权限验证、网络请求、Service Worker交互)异常导致数据缺失。
内容的提问来源于stack exchange,提问作者chrisonline
相关产品推荐
相关产品推荐

