在 iOS Safari 16.5 上,Notification.requestPermission() 不会提示允许/拒绝

Ary*_*ach 7 javascript safari ios firebase firebase-cloud-messaging

我正在尝试在 iOS Safari 浏览器中实现 Firebase Cloud Messaging,因为现在支持推送通知和通知 API。

function requestPermission() {
   console.log("request permission")

   Notification.requestPermission().then((permission) => {
      if (permission === 'granted') {
         console.log('FIREBASE CLOUD MESSAGING Notification permission granted.');

         messaging.getToken(messaging, { vapidKey: '<my-key>' }).then((currentToken) => {
            if (currentToken) {
               // Send the token to your server and update the UI if necessary
               // ...
               console.log("FIREBASE CLOUD MESSAGING currentToken", currentToken)
            } else {
               // Show permission request UI
               console.log('FIREBASE CLOUD MESSAGING No registration token available. Request permission to generate one.');
               // ...
            }
         }).catch((err) => {
            console.log('FIREBASE CLOUD MESSAGING An error occurred while retrieving token. ', err);
            // ...
         });
      }
   })         
}
Run Code Online (Sandbox Code Playgroud)

我从桌面使用该功能requestPermission(),它成功请求权限。但是,在 iOS Safari 上,Notification.requestPermission()即使在浏览器中定义了通知并且启用了推送通知和通知 API,也不会向用户显示错误或提示。

我通过单击按钮调用了这个函数,这可以防止我收到有关“用户手势”的错误。

我该如何解决这个问题?

小智 0

我知道为时已晚,但已添加"display": "standalone"到您的文件中manifest.json。\n还要确保此<link rel="manifest" href="manifest.json">代码存在于<head></head>您的 index.html 文件的标记内。

\n

执行此操作后,您必须从 Safari 历史记录中清除您网站的所有网站数据(缓存)。然后将您的网站添加到主屏幕。之后应该可以工作。根据this,它\xe2\x80\x99s需要将应用程序添加到主屏幕以进行推送通知。一旦用户在主屏幕上安装您的应用程序,它将收到推送通知。

\n