- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 firebase 云函数发送通知,所以我尝试使用 firebase.messaging().getToken() 获取 token ,但我不断收到错误消息:
TypeError: firebase.default.messaging 不是一个函数(在'_firebase.default.messaging()','firebase.default.messaging is undefined)
我已经安装了 firebase 和 firebase/messages 大约 5 种不同的方式,但似乎无法克服这个错误,所以我认为这些方法一定是过时的,或者我做错了什么。
这是我的代码:
import * as firebase from 'firebase'
const Firebase = firebase.initializeApp(firebaseConfig);
export default Firebase
这里是我收到错误的地方:
Token : Firebase.messaging().getToken()
我不确定我是否缺少某些依赖项或任何类似的东西,因此非常感谢您的帮助。我一直在直接从 firebase 文档安装东西作为 web,到目前为止一直在工作。
我也在使用 expo managed react native
谢谢
还有一些替代方法可以在后台使用可能更好的事件监听器发送通知吗?
最佳答案
您发帖已经有一段时间了,但我遇到了同样的错误,所以我将分享一些关于它的发现。您正在寻找的解决方案是项目符号 3。
1) Firebase JavaScript SDK 适用于 Node.js 应用。尽管可以像 react-native/expo 项目中的任何其他 npm 包一样直接安装和使用 firebase sdk 包,但它意味着在浏览器或 node.js 运行时上运行。
这特别令人困惑,因为某些 firebase Api 方法(例如 firebase.auth 和 firebase.database)可以在 native 应用程序上运行,而其他则不能。我想这是因为某些方法仅依赖于执行 HTTP 请求的能力。
事实上,firebase sdk 官方文档页面没有 react-native 部分。如果你查看 JavaScript section ,然后单击将 Firebase 添加到您的 JavaScript 项目,您将看到预期用途包括网络应用程序和 node.js 桌面应用程序(不确定 IoT 应用程序在哪个运行时运行):
如果您仍想使用 firebase sdk,则应考虑 React Native Firebase 等库旨在解决在 node.js 运行时之外使用 JavaScript sdk 的问题。我自己还没有尝试过,但看了他们的网站,似乎要集成到 expo 管理的工作流程中并不容易。
2) 导入@firebase/messaging 也不是一个选项:如this answer 中的建议,显式导入消息传递模块不会解决 react-native/expo 项目的问题。同样,如上所述,因为 native 应用程序不在 node.js/browser 运行时上运行。事实上,它使事情变得更糟,因为它试图加载不可用的依赖项:
[09:56:33] ReferenceError: Can't find variable: IDBIndex
3) 在 Expo 中获取用户设备通知推送 token :由于您已经在使用 expo,您可以使用 expo-notifications模块获取设备推送 token ,它将返回 token ,然后您可以使用 Cloud Functions 通过 firebase-admin sdk 发送通知.下面是一些示例代码,用于获取推送 token 并将其存储在实时数据库中(稍后从云功能中使用):
import * as Notifications from 'expo-notifications';
import * as Permissions from 'expo-permissions';
import firebase from 'firebase';
export const getDevicePushToken = () => {
return Permissions.getAsync(Permissions.NOTIFICATIONS)
.then((response) =>
response.status === 'granted'
? response
: Permissions.askAsync(Permissions.NOTIFICATIONS)
)
.then((response) => {
if (response.status !== 'granted') {
return Promise.reject(new Error('Push notifications permission was rejected'));
}
return Notifications.getDevicePushTokenAsync();
})
.then(token => {
firebase.database().ref('...').update({ pushToken: token.data });
})
.catch((error) => {
console.log('Error while registering device push token', error);
});
};
干杯!
关于reactjs - TypeError : firebase. default.messaging is not a function (in '_firebase.default.messaging()' ,'firebase.default.messaging is undefined),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61300018/
我是一名优秀的程序员,十分优秀!