如何在不受支持的设备(如 WebKit Safari)上禁用 nuxt-fire 消息传递(fcm)?

How to disable nuxt-fire messaging (fcm) on not supported devices (like WebKit Safari)?

我有一个小型 Nuxt SSR 网站,通过 FCM 推送通知。对于推送通知 (Push-API),我使用 nuxt-fire。在 Windows 和 Android 中的 Chrome(Blink 引擎)或 FireFox(Gecko 引擎)这很有效。现在有个朋友遇到一个问题,就是网站不显示任何内容。他正在使用 Apple 设备。 Apple 有 WebKit 要求,所以 Chrome 也使用 WebKit 作为 Apple 下的引擎。 WebKit 不支持 Push-API 但有自己的解决方案,即 APN (Apple Push Notifications)。

WebKit下的报错信息如下:"FirebaseError: Messaging: This browser doesn't support the API's required to user the firebase SDK. (messaging/unsupported-browser)"

现在我正在寻找一种方法,在不支持的 devices/engines 上不将 nuxt-fire 中的 firebase 消息加载到 Nuxt.js(Internet Explorer 不支持推送 API任何一个)。这是 JS 中检查支持的 devices/engines:

的可能性
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这里有办法做到这一点吗?或 plugin/middleware?

非常感谢,并致以最诚挚的问候,

雅各布

更新 - 解决方案

原来这个问题可以通过重新安装模块来解决。为确保安装正确,删除 node_modules 文件夹删除包-lock.json,然后重新运行 npm i - 应该可以解决它。

可能原因:

在 v2.4.0 中,我们重新安排了插件的文件夹结构,请参阅 Release Notes。如果 Template src not found 出现,我们在发行说明中提到重新安装软件包。出于某种原因,您的应用需要 2 npm install 时间才能修复?也许 package-lock.json 没有被删除,我能想到的另一个原因是你的主机上可能已经完成了 node_modules 的缓存(例如,在 Netlify 上你应该做 Clear Cache and trigger deploy)这可能是部署的应用程序崩溃的另一个原因。


旧答案

这里是 nuxt-fire 的 Pascal。

如您所见here,我们在为您设置$fireMess 时已经进行了if firebase.messaging.isSupported()检查。如果浏览器不支持 Firebase Messaging,$fireMess 将为 undefined.

因此,在调用 $fireMess.requestPermission()getToken() 之前(例如,在您的消息插件中,或在任何地方调用?),您必须做的是检查 $fireMess 是否存在,像这样:

if (!this.$fireMess) {
   // No browser support
   return
}

由于我不知道您是如何实施 Firebase Messaging 的,因此很难说出问题的确切位置 - 但可能就是这样。

请注意,nuxt-fire 所做的只是将 $fireMess 注入全局上下文,我们不进行任何初始化。

如果您认为这不能解决您的问题,请随时在我们的 GitHub issues page 上创建问题,我们很乐意调查。

希望对您有所帮助。

这里是 nuxt-fire 的 Pascal。

如您所见here,我们在为您设置$fireMess 时已经进行了if firebase.messaging.isSupported()检查。如果浏览器不支持 Firebase Messaging,$fireMess 将为 undefined.

因此,在调用 $fireMess.requestPermission()getToken() 之前(例如,在您的消息插件中,或在任何地方调用?),您必须做的是检查 $fireMess 是否存在,像这样:

if (!this.$fireMess) {
   // No browser support
   return
}

由于我不知道您是如何实施 Firebase Messaging 的,因此很难说出问题的确切位置 - 但可能就是这样。

请注意,nuxt-fire 所做的只是将 $fireMess 注入全局上下文,我们不进行任何初始化。

如果您认为这不能解决您的问题,请随时在我们的 GitHub issues page 上创建问题,我们很乐意调查。

希望对您有所帮助。