收藏
回答

ios 7.0.8 公众号页面无法自动播放 audio了?

android 的问题 刚解决完,ios 的问题又来了,行为变了。

    观察到的改变有以下 2 点:

  1. WeixinJSBridgeReady 事件没有了,无法监听此事件进行自动播放。

  2. audio 元素不会预加载音乐文件,loadedmetadata 也不会被发射。在 safari 里打开下面的代码会有直接有 alert在微信里打开下面的页面,只有点击播放的时候才会有 alert

<html>
  <body>
    <audio loop preload controls="controls" id='audio' src="https://www.meipian.cn/service/music/redirect/83969?song_id=7A932141D63509775569BB40AF7AEF08&song_list_id=D9A047C7540C751F&source_platform=tme&id=83969"></audio>
  </body>
 
  <script>
   document.getElementById('audio').addEventListener('loadedmetadata', data => {
      console.log(data)
      alert(JSON.stringify(data))
    })

 </script>

</html>


目前我通过 touchstart 事件来启动音乐播放,作为备用方案。

最后一次编辑于  2019-11-29
回答关注问题邀请回答
收藏

2 个回答

  • 王翊夫if
    王翊夫if
    2019-12-02

    你好,iOS webkit 微信这边是一直没有放开 audio 标签的自动播放限制的。

    根据 webkit 源码分析,应该是需要消费一次用户点击,才能调用 audio 标签的 play() 函数触发播放,否则执行 js 会抛出 NotAllowError 异常。

    因此,这里你反馈的行为变了,有两种可能:

    1. 你手机升级 iOS 13 新版本了, webkit 内核行为发生了改动;

    2. 你的页面代码发布新版本了,导致用户点击态失去了

    另外,帖子里的两个问题

    1. 微信 webview 在页面加载完成后,开始注入 jsbridge,并且一定会向页面发送 WeixinJSBridgeReady 事件的,因此没有监听到 WeixinJSBridgeReady 事件,可能是执行 addListener 在发出事件之后,或者页面一直没有加载完成(绿条一直在跑)

    2. 首先,Safari 和应用内置 wkwebview 的表现是有差异的,其次,在微信没有放开 audio 标签自动播放的前提下,audio 标签的 preload 事件之前排查问题时是发现在 iOS13 下是不会触发的

    2019-12-02
    有用
    回复 7
    • Leon_Zhang
      Leon_Zhang
      2019-12-03
      感谢回答,另外请帮忙确认下:
      1. 我一直以为你们针对 WeixinJSBridgeReady 时间开放了,自动播放,因为我们之前一直可以通过监听 WeixinJSBridgeReady 事件,在没有任何用户操作的情况下,完成自动播放。




      2. 在您这边看来,ios 微信的页面在没有用户接触页面的情况下,是不可能完成自动播放的(即 mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.all),可以这么说么?如果是这样的话,那么和第 1 点里我们的认知是有出入的。请帮忙确认下么,如果是这样的话,我们也用再折腾了。






      我们自己这边需要确认的有 2 点:
      1. WeixinJSBridgeReady 现在 ios 微信里依然会触发。这点我需要确认下。




      2. ios 13 早就发布,如果是 wkwebview 的行为发生了变化,那可能是 ios 最近的小版本开始的。我们的用户对音乐自动播放很敏感,之前我们没有接到投诉。这个我们也需要确认下。
      2019-12-03
      回复
    • 王翊夫if
      王翊夫if
      2019-12-03回复Leon_Zhang
      可以确定的一点是,微信对于 wkwebview 的策略,是你所说的 mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.all;
      另外,wkwebview 对于用户点击的(userInteractionAction)定义对我们来说是个黑盒,我们可以理解的是用户每一次对于页面的点击都会生产一次点击,至于进入页面时是否自带一次点击,这个我们也在研究中,的确遇到很多游戏H5 页在页面加载时执行 audio.play() 是可以成功的。
      2019-12-03
      回复
    • Leon_Zhang
      Leon_Zhang
      2019-12-03
      好的,感谢回答。对于我们来说,微信是黑盒,wkwebview 也是黑盒。有时候搞不清,是你们的原因,还是 wkwebview 的原因,尤其是在版本不断变化的时候,现在有您这个答案真好。😂
      2019-12-03
      回复
    • 王翊夫if
      王翊夫if
      2019-12-03回复Leon_Zhang
      是的,你们有时候会替我们背锅,我们也会替苹果背锅,锅锅生而不息
      2019-12-03
      回复
    • Leon_Zhang
      Leon_Zhang
      2019-12-03
      诡异的事件发生了,我们的音乐又能自动播放了。。。


      看了一个竞品的页面也是可以的:http://m.eqxiu.com/s/kmRZTpGs


      然后检查我们的页面,发现也 OK
      https://www.meipian.cn/2k06jtj2?first_share_to=other&share_depth=1&first_share_uid=54179628&v=5.4.0

      你看看能不能当做样本研究下。😂
      2019-12-03
      回复
    查看更多(2)
  • 是小白啊
    是小白啊
    2019-11-26

    ios本身就不支持的

    2019-11-26
    有用
    回复 1
    • Leon_Zhang
      Leon_Zhang
      2019-11-29
      以前支持这个事件触发音乐播放的哦,我们一直用的呢。
      2019-11-29
      回复
登录 后发表内容
问题标签