不允许使用Safari推送通知

时间:2017-11-20 08:52:36

标签: javascript push-notification safari

我正在尝试使用本指南https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html

在我的网站上实施safari推送通知

网站上有一个按钮和以下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等于拒绝,我可以在Safari的首选项中看到网站被拒绝 - >通知部分。

但是当我允许通知时没有任何反应。似乎checkRemotePermission不会像window.safari.pushNotification.requestPermission的回调那样触发。

有什么想法?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

仅在成功验证推包的情况下才授予权限。如果有问题,则将权限设置为拒绝。您需要检查服务器上的/log端点以了解问题所在。