没有询问,Safari推送通知返回被拒绝

Aks*_*hat 5 javascript safari push-notification apple-push-notifications

我试图在Safari中使用新的推送通知.我正在使用以下代码段:

var checkRemotePermission = function (permissionData) {
  if (permissionData.permission === 'default') {
      // This is a new web service URL and its validity is unknown.
      console.log("default");
      window.safari.pushNotification.requestPermission('https://website.com/','web.com.website.notify',{uid: "TEST"},checkRemotePermission);
  }
  else if (permissionData.permission === 'denied') {
      // The user said no.
      console.log("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("yes");
  }
};

if ('safari' in window && 'pushNotification' in window.safari) {
    var permissionData = window.safari.pushNotification.permission('web.com.website.notify');
    checkRemotePermission(permissionData);
}else{
  alert("This feature is only available on Mac OS X safari")
}
Run Code Online (Sandbox Code Playgroud)

问题是我进入no了我的javascript控制台,因为它permissiondenied.事情是它从未被问过,也从未被问过.它甚至不在我的野生动物园喜好中.

为什么safari会在denied没有询问的情况下返回?

小智 5

当使用“自签名”SSL 证书在您的计算机上进行“本地”测试时,似乎会发生此行为。

当我尝试让 Safari 推送通知在我的计算机本地的 Rails 4 应用程序中工作时,我看到了完全相同的行为。我使用的是 nginx 以及在命令行上生成的自签名 SSL 证书。

我使用的 JavaScript 代码与您的代码非常相似,并且我不断地从调试语句中看到“被拒绝”的输出console.log,但从未向用户显示任何提示,请求他们允许向他们发送推送通知。

经过一次这样的尝试后,我检查了我机器上的Console.app 。就在那时,我发现了这个神秘但看似相关/有用的信息:

SafariNotificationAgent[65893]: NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9812)

再加上官方 Apple 开发者论坛中的一些类似猜测的回复,让我相信自签名 SSL 证书是本例中的罪魁祸首。

我很想听听其他人关于如何更好地在本地测试 Safari 推送通知的想法。


小智 5

在本地测试时可能会发生此错误,因为您测试的地址不是站点allowedDomainspushPackage. 对于https://zeropush.com,我们将主机添加lvh.me到我们的主机pushPackage并在端口上运行服务器80,同时我们正在实现 safari 推送通知。然后,您可以访问您的开发站点lvh.me,一切都应该正常运行。

您还应该为您的站点实现 safari 推送通知文档中描述的日志记录端点,以便您可以获得任何错误日志信息来帮助您进行调试。

我还写了一篇关于实现 safari 推送通知的文章,该文章有点以 ruby​​ 为中心,但可能有用。https://zeropush.com/blog/implementing-safari-push-notifications-in-osx-mavericks