【发布时间】:2017-11-20 08:52:36
【问题描述】:
我正在尝试使用本指南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 的回调一样触发。
有什么想法吗?
【问题讨论】:
-
您的代码似乎与文档中的代码完全相同。那应该行得通。什么是
console.log(permissionData);日志记录? -
我希望看到
permissionData.permission将等于granted,但checkRemotePermission不会在通知允许后调用,而是在通知禁止后调用,我看到permissionData.permission等于denied -
有什么进展吗?我有同样的问题,但我想可能是因为我在虚拟机上测试?
-
似乎Apple不允许用户改变主意:(见答案1)stackoverflow.com/questions/24596837/…
标签: javascript push-notification safari