我有一个小型Nuxt SSR网站,通过FCM推送通知。对于推送通知(push-API(,我使用nuxt-fire。在Windows和Android的Chrome(闪烁引擎(或FireFox(壁虎引擎(中,这非常有效。现在,一位朋友遇到了一个问题,即网站没有显示任何内容。他正在使用苹果设备。苹果有WebKit的要求,所以Chrome也使用WebKit作为苹果的引擎。WebKit不支持Push-API,但有自己的解决方案APN(Apple Push-Notifications(。
WebKit下的错误消息如下:"FirebaseError:消息:此浏览器不支持用户firebase SDK所需的API。(消息/不支持的浏览器(">
现在,我正在寻找一种方法,不将nuxt-fire中的firebase消息加载到不受支持的设备/引擎上的nuxt.js中(Internet Explorer也不支持Push API(。以下是JS中检查支持的设备/引擎的可能性:
if (firebase.messaging.isSupported())
const messaging = firebase.messaging();
}
但是,在Nuxt.js和Nuxt-fire中,我该如何以及在哪里使用它呢?
在nuxt.config.js中,我这样配置nuxt-fire模块:
[
'nuxt-fire',
{
config: {
development: {
...
},
production: {
...
}
},
useOnly: ['storage', 'messaging'],
customEnv: false,
}
]
在nuxt.config.js中有办法做到这一点吗?还是作为插件/中间件?
非常感谢并致以最良好的问候,
Jakob
更新-解决方案
事实证明,问题可以通过重新安装模块来解决。为了确保它安装正确,删除node_modules文件夹,remove package lock.json然后重新运行npm i
-这应该会修复它。
可能的原因:
在v2.4.0中,我们重新安排了插件的文件夹结构,请参阅发行说明。我们在发行说明中提到,如果出现Template src not found
,请重新安装程序包。出于某种原因,您的应用程序需要2个npm install
才能修复?也许package-lock.json没有被删除,我能想到的另一个原因是你的主机上可能已经缓存了node_modules(例如,在Netlify上,你应该缓存Clear Cache and trigger deploy
(,这可能是部署的应用程序崩溃的另一原因。
旧答案
Pascal来自这里的新火。
正如您在这里看到的,我们在为您设置$fireMess时已经进行了if firebase.messaging.isSupported()
检查。如果浏览器不支持Firebase消息,$fireMess将为undefined
。
因此,在调用$fireMess.requestPermission()
或getToken()
之前(例如,在您的消息插件中,或者在您执行该操作的任何地方?(,您必须检查$fireMess
是否存在,如下所示:
if (!this.$fireMess) {
// No browser support
return
}
由于我不知道你到底是如何实现Firebase消息的,所以很难说问题到底在哪里——但可能就是这样。
请注意,nuxt fire所做的只是将$fireMess注入全局上下文,我们不进行任何初始化。
如果这不能解决你认为可能存在的问题,请随时在我们的GitHub问题页面上创建问题,我们很乐意对此进行调查。
希望能有所帮助。
Pascal来自这里的新火。
正如您在这里看到的,我们在为您设置$fireMess时已经进行了if firebase.messaging.isSupported()
检查。如果浏览器不支持Firebase消息,$fireMess将为undefined
。
因此,在调用$fireMess.requestPermission()
或getToken()
之前(例如,在您的消息插件中,或者在您执行该操作的任何地方?(,您必须检查$fireMess
是否存在,如下所示:
if (!this.$fireMess) {
// No browser support
return
}
由于我不知道你到底是如何实现Firebase消息的,所以很难说问题到底在哪里——但可能就是这样。
请注意,nuxt fire所做的只是将$fireMess注入全局上下文,我们不进行任何初始化。
如果这不能解决你认为可能存在的问题,请随时在我们的GitHub问题页面上创建问题,我们很乐意对此进行调查。
希望能有所帮助。