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控制台,因为它permission是denied.事情是它从未被问过,也从未被问过.它甚至不在我的野生动物园喜好中.
为什么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
在本地测试时可能会发生此错误,因为您测试的地址不是站点allowedDomains的pushPackage. 对于https://zeropush.com,我们将主机添加lvh.me到我们的主机pushPackage并在端口上运行服务器80,同时我们正在实现 safari 推送通知。然后,您可以访问您的开发站点lvh.me,一切都应该正常运行。
您还应该为您的站点实现 safari 推送通知文档中描述的日志记录端点,以便您可以获得任何错误日志信息来帮助您进行调试。
我还写了一篇关于实现 safari 推送通知的文章,该文章有点以 ruby 为中心,但可能有用。https://zeropush.com/blog/implementing-safari-push-notifications-in-osx-mavericks。
| 归档时间: |
|
| 查看次数: |
4120 次 |
| 最近记录: |