AudioSource在H5 ios设备 play调用后首次交互为滑动操作则无法播放

  • Creator 版本: 3.6.1 (已知3.6.0也是这样)

  • 目标平台: iOS 手机微信内置浏览器和 iOS手机浏览器

  • 重现方式:

创建一个能自动播放的示例,比如在start里面直接用audioSource.play(),或者 audioSource的playOnAwake。
运行后,第一次交互为滑动(而不是点击),此时发现并没有播放音乐。之后无论在用什么途径调用play,都无法播放音乐了。

  • 首个报错:全程无报错

  • 之前哪个版本是正常的:

  • 手机型号: iphonex ios14.0 (好像跟型号没有关系,我也试过其它的,只要是ios)

  • 手机浏览器: 微信内置 和 ios内置的safari

  • 编辑器操作系统: Win10

  • 重现概率: 100%

目前试了下, 首次交互只要是滑动,不论ios 或者android 都会出现音乐播放无效的情况。,,

测试是会第一次不播放,再通过按钮调用能播放。

安卓目前没测试出来,有什么特殊设置或操作?

没有什么特殊的操作吧,,就是放在 点击里面做了个 判断 和 播放的时候做了个判断的。
image

我觉得android没事,ios在首次play后在屏幕上随便滑动一下。play之前不要做别的事。

首次 play 后是指有播放出来的情况还是只是调了 play?

只调用了play的时候。
此时没有第一次交互。

苹果设备就是这样。

我已经老老实实的设置为不在一开始自动播放音乐了。
背景音乐默认关,啥事也没有。
但是必须进来只加载不播放。
用户点音乐按钮才播放(play())。

我还试过:
如果一开始不加载,点按钮后才开始加载然后播放,ios依然无法进入“已交互”状态,在这种 ‘未交互’状态下,如果紧接着的操作是滑动,则依然会进入错误状态,后续什么也播放不了。

音频在新的浏览器上将会有安全限制,这一限制说明如果用户没有和页面发生交互,那么将无法播放音频。所以我们监听了一次touchend事件,因为这是一切手势的结束。

但是不知道为什么,如果touchend事件之前是touchmove,也就是滑动操作的话,对于浏览器而言不会被认定为交互状态。这一点我们提交了issue给web团队等待反馈。

目前可以通过绕过的方法来防止无法播放的情况。3.6及以前的版本可以通过合并该PR使滑动后再次点击能够正常播放。

1赞