如何在 service worker 中播放声音甚至在 chrome 中振动?

Posted

技术标签:

【中文标题】如何在 service worker 中播放声音甚至在 chrome 中振动?【英文标题】:how to play sound in service worker or even vibrate in chrome? 【发布时间】:2020-06-08 12:11:50 【问题描述】:

我正在使用service workers。我需要它用于push 通知。我想要实现的是,当我收到通知时,它应该至少播放声音或振动。

self.registration.showNotification(title, 
   body: body,
   icon: './assets/images/icons/icon_144x144.png',
   vibrate: [200, 100, 200, 100, 200, 100, 200],
);

收到通知后,我得到了这段代码。

问题1:根本没有发生振动。然后我进行了一点调试。

https://googlechrome.github.io/samples/notifications/vibrate.html不会振动我的手机。

https://googlechrome.github.io/samples/vibration/index.html 这确实会振动我的手机。

为什么它不从第一个链接振动?我正在android chrome 上测试所有这些。

问题 2: 看起来像在 Firefox 上,它确实有默认声音。为什么google没有相同的声音?它只是沉默。没有办法播放声音吗?至少我想振动它...

【问题讨论】:

第一个sn-p请求权限。也许他们没有被授予? 不幸的是,他们是。 :( 你的手机解锁了吗?我的有时在解锁或通知应用处于前台时不振动 showNotification方法中去掉了vibrate属性,调用后使用vibrate函数即可 验证 chrome 版本。这是支持的版本列表 - developer.mozilla.org/en-US/docs/Web/API/… 【参考方案1】:

如 here 所示,showNotification()vibrate 属性在 Android O 及更高版本的 Android 设备上不再受支持,无论 Chrome 版本如何,这可能是第一个链接不适合您的原因。

但是,您可以使用 vibrate() 方法(这是第二个链接所做的),该方法在 Chrome 32 之后的版本上受支持。但是请注意,在 Chrome 60 之后,此方法仅适用于响应用户手势。 (请参阅https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate)了解更多详情。

在此处添加更多历史记录:

根据the Chromium devs:

不幸的是,几年前我们不得不弃用这个开始的 Android O - 通知通道的引入意味着注意力抽屉(振动、声音和所有)现在是每个通道而不是每个通知,Chrome 不支持开发人员配置。

不幸的是,其他供应商对此兴趣为零。

【讨论】:

感谢您的精彩解释。但我需要在服务人员中使用振动。好像我不能。对此有何建议/解决方案? 很遗憾,在 Chrome 60 之后,vibrate() 只能用于响应用户手势。 所以,这意味着如果出现通知,我无法播放声音/振动......唯一的解决方法是当它到达时,我向客户发布消息并在那里发出声音但是这意味着用户必须打开一个网站,对吧? 查看这篇文章:***.com/questions/56388258/…,了解什么是“用户手势”。 @Garsivirus 我所做的是,当服务人员收到通知时,我向所有客户端发布消息,并在 src 代码中,我收听此消息,并在收到时播放声音。这有时不起作用,因为它首先需要用户手势,但它在某种程度上很接近

以上是关于如何在 service worker 中播放声音甚至在 chrome 中振动?的主要内容,如果未能解决你的问题,请参考以下文章

预加载通过 iPhone AudioServices 播放的声音

Flutter - 播放自定义声音更新了吗?

我如何知道声音是不是在 android 中播放完毕?

如何在 setInterval 函数中播放声音?

如何同时在多个设备中播放声音

如何在c ++中播放声音[关闭]