Safari 中的 Web 推送 Django
Web Push Django in Safari
我在 Django 中使用推送通知,我在使用库
https://github.com/safwanrahman/django-webpush
它在 Chrome 和 Firefox 中正常工作,但在 Safari 中出现 JS 错误。
TypeError: undefined is not an object (evaluating 'reg.pushManager.getSuscription')
-suscribe
-Anonymus Function
代码是这样的:
function subscribe(reg) {
// Get the Subscription or register one
reg.pushManager.getSubscription().then(
function(subscription) {
var metaObj, applicationServerKey, options;
// Check if Subscription is available
if (subscription) {
return subscription;
}
metaObj = document.querySelector('meta[name="django-webpush-vapid-key"]');
applicationServerKey = metaObj.content;
options = {
userVisibleOnly: true
};
if (applicationServerKey){
options.applicationServerKey = urlB64ToUint8Array(applicationServerKey)
}
// If not, register one
reg.pushManager.subscribe(options)
.then(
function(subscription) {
postSubscribeObj('subscribe', subscription,
function(response) {
// Check the information is saved successfully into server
if (response.status === 201) {
// Show unsubscribe button instead
subBtn.textContent = 'Eliminar suscripción';
subBtn.disabled = false;
isPushEnabled = true;
showMessage('La suscripción se ha eliminado correctamente');
}
});
})
.catch(
function() {
console.log('Subscription error.', arguments)
})
});
}
这是因为在 Safari 或 IOS 设备中调用推送通知,需要 APNS(Apple 推送通知服务),而 django-web-push 的维护者尚未集成它们。
您需要通过为 IOS 设备和浏览器添加回退选项来自行添加 APNS 支持,或者您可以使用任何其他 apns 推送通知服务。
我在 Django 中使用推送通知,我在使用库 https://github.com/safwanrahman/django-webpush
它在 Chrome 和 Firefox 中正常工作,但在 Safari 中出现 JS 错误。
TypeError: undefined is not an object (evaluating 'reg.pushManager.getSuscription')
-suscribe
-Anonymus Function
代码是这样的:
function subscribe(reg) {
// Get the Subscription or register one
reg.pushManager.getSubscription().then(
function(subscription) {
var metaObj, applicationServerKey, options;
// Check if Subscription is available
if (subscription) {
return subscription;
}
metaObj = document.querySelector('meta[name="django-webpush-vapid-key"]');
applicationServerKey = metaObj.content;
options = {
userVisibleOnly: true
};
if (applicationServerKey){
options.applicationServerKey = urlB64ToUint8Array(applicationServerKey)
}
// If not, register one
reg.pushManager.subscribe(options)
.then(
function(subscription) {
postSubscribeObj('subscribe', subscription,
function(response) {
// Check the information is saved successfully into server
if (response.status === 201) {
// Show unsubscribe button instead
subBtn.textContent = 'Eliminar suscripción';
subBtn.disabled = false;
isPushEnabled = true;
showMessage('La suscripción se ha eliminado correctamente');
}
});
})
.catch(
function() {
console.log('Subscription error.', arguments)
})
});
}
这是因为在 Safari 或 IOS 设备中调用推送通知,需要 APNS(Apple 推送通知服务),而 django-web-push 的维护者尚未集成它们。
您需要通过为 IOS 设备和浏览器添加回退选项来自行添加 APNS 支持,或者您可以使用任何其他 apns 推送通知服务。