Safari 推送通知无法允许。

4
我正在尝试使用这个指南在我的网站上实现Safari推送通知:https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html 网站上有一个按钮和以下JS代码:
window.onload = function() {                                                                                               
  var p = document.getElementById('subscribe');                                                                            
  p.onclick = function() {                                                                                                 
    // Ensure that the user can receive Safari Push Notifications.                                                         
    if ('safari' in window && 'pushNotification' in window.safari) {                                                       
      var permissionData = window.safari.pushNotification.permission('MY_REAL_WEBSITE_PUSH_ID');       
      checkRemotePermission(permissionData);                                                                               
    }                                                                                                                      
  };                                                                                                                       

  var checkRemotePermission = function(permissionData) {                                                                   
    console.log(permissionData);                                                                                           
    if (permissionData.permission === 'default') {                                                                         
      // This is a new web service URL and its validity is unknown.                                                        
      window.safari.pushNotification.requestPermission(                                                                    
        'MY_REAL_WEBSERVICE_URL', // The web service URL.                                             
        'MY_REAL_WEBSITE_PUSH_ID',     // The Website Push ID.                                         
        {}, // Data that you choose to send to your server to help you identify the user.                                  
        checkRemotePermission         // The callback function.                                                            
      );                                                                                                                   
    }                                                                                                                      
    else if (permissionData.permission === 'denied') {                                                                     
      // The user said no.                                                                                                 
    }                                                                                                                      
    else if (permissionData.permission === 'granted') {                                                                    
      // The web service URL is a valid push provider, and the user said yes.                                              
      // permissionData.deviceToken is now available to use.                                                               
    }                                                                                                                      
  };                                                                                                                       
}

当我按下按钮时,会请求权限。当我拒绝通知时,一切都如预期的那样工作:console.log(permissionData);显示permissionData.permission等于denied,而且我可以在Safari的“偏好设置”->“通知”部分看到网站已被拒绝。但是,当我允许通知时,什么也不发生。似乎checkRemotePermission没有触发window.safari.pushNotification.requestPermission的回调函数。有任何想法吗?

你的代码似乎是文档中的完全副本。那应该可以工作。console.log(permissionData); 记录了什么? - Cerbrus
我期望看到 permissionData.permission 等于 granted,但在通知允许后没有调用 checkRemotePermission,但在通知禁止后却被调用了,我看到 permissionData.permission 等于 denied - user3309314
有进展吗?我遇到了同样的问题,但我想可能是因为我在虚拟机上测试的缘故? - Atterratio
看看这些是否有帮助 https://dev59.com/BXnZa4cB1Zd3GeqPnj-Q#20552061, https://stackoverflow.com/a/25680982/2830850 ? - Tarun Lalwani
似乎苹果不允许用户改变主意:(请参见答案1)https://stackoverflow.com/questions/24596837/osx-push-notifications-for-websites-safari-requestpermission-callback-never-ca#24690429 - Wolfgang Blessen
https://github.com/OneSignal/OneSignal-Website-SDK/issues/126 - 在 GitHub 上也有非常相似的错误。 - Leo Odishvili
2个回答

0

我在虚拟机中遇到了类似的问题,并为VMWare找到了解决方案。

在配置文件.vmx中,您需要添加类似于以下内容:

smbios.reflectHost = "TRUE"
serialNumber = "RM125589AGW"
board-id = "MAC-F22598C8"

听起来很不错,但我在 MacBook 上运行脚本,所以不适合我。 - user3309314
是的,这是可能的,但当我理解了我的问题并且这个答案可以帮助其他人时,我发现了这个问题。 - Atterratio

0

只有在推送包成功验证后才会授予权限。如果出现问题,权限将被设置为拒绝。您需要检查服务器上的/log端点以了解出了什么问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接