gpt4 book ai didi

javascript - Safari 推送通知 pushmanager 无法注册

转载 作者:行者123 更新时间:2023-11-30 20:10:19 26 4
gpt4 key购买 nike

我在使用 webpush 时遇到了问题。我可以让它在 chrome 上与服务器和数据库一起正常工作。但是当我尝试从我的 safari 浏览器注册/订阅时,它给了我这个错误:

TypeError: undefined is not an object (evaluating 'n.pushManager.subscribe')
(anonym funktion) — Header.vue:99
r — runtime.js:62
(anonym funktion) — runtime.js:296
r — asyncToGenerator.js:17
(anonym funktion) — asyncToGenerator.js:28
promiseReactionJob

这是我在 Chrome 上注册软件的代码。

notification () {
var storeId = this.$session.get('user').accessId
const publicVapidKey = 'PublicVAPID'
if ('serviceWorker' in navigator) {
send().catch(err => console.error(err))
}
async function send () {
var register = await navigator.serviceWorker.register('/service-worker.js', {
scope: '/'
})
const subscription = await register.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicVapidKey)
})
await axios({
method: 'post',
url: 'API',
data: {
subscription: JSON.stringify(subscription),
storeId: storeId
},
headers: {
'Content-Type': 'application/json'
}
}).then(response => {
console.log(response)
})
alert('you are now getting notifications')
}
function urlBase64ToUint8Array (base64String) {
console.log(base64String)
const padding = '='.repeat((4 - base64String.length % 4) % 4)
const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/')
const rawData = window.atob(base64)
const outputArray = new Uint8Array(rawData.length)

for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i)
}
return outputArray
}
},

最佳答案

使用:

window.safari.pushNotification

代替

window.PushManager

应该可以工作(未测试),但只有在向 apple 注册后才能工作。

作为described here

"You are required to register in the Certificates, Identifiers & Profiles section of your developer account to send push notifications."

看起来 Safari 仍然在当前标准之外运行并且需要注册他们的服务


如果您只想过滤掉错误并且不介意在 safari 上没有推送通知,您可以这样做:

if (registration.pushManager)
{
//... do your pushManager.subscribe magic
}
else
{
console.log("pushManager not available via web standard")
// either use apples own push service, do nothing or try local notifications
}

否则:按照上面链接的苹果描述或检查轮询的可能性(不确定是否有效)和local notifications


通过以下方式找到的信息:

访问https://whatwebcando.today/push-notifications.html使用 safari 桌面向我展示了上述解决方案的方法

关于javascript - Safari 推送通知 pushmanager 无法注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com