IOS 打开H5游戏没有声音

  • Creator 版本: 2.4.3
  • 目标平台: APP里的webview
  • 手机型号: iPhone 12

iOS的开发同学已经给WKWebView 设置 mediatypesrequiringuseractionforplayback = No

在系统版本14.4是一切正常的,今天升级到14.6后,打开H5没声音,Cocos是打包成H5,在APP通过链接访问的.

是进入无点击操作自动播放的声音吗

是的,需要用户打开H5自动播放声音


https://docs.cocos.com/creator/2.3/manual/zh/audio/compatibility.html 参考一下

结贴,记录下解决办法~

本次的代码执行流程是:先跟客户端通信拿到返回值后才开始加载游戏。

出现本次问题因为使用了dsbridge跟客户端进行通信,分析了代码后发现是window.prompt导致的。

为什么在iOS 14.6 之前正常呢?猜测可能是苹果更新了AudioContent状态更改机制。

因为prompt触发后,AudioContent的状态会被更改成suspended,而Cocos Creator加载完成后并没有去判断AudioContent的状态是不是suspended或interrupted,是否需要恢复成running状态,理论上prompt、alert、confirm都会导致AudioContent的状态更新。

解决办法:

第一种,直接改写 dsbridge的脚本,在prompt执行后面添加一下代码

if (window.cc !== undefined && window.cc.sys !== undefined) {
    if (window.cc.sys.__audioSupport !== undefined && window.cc.sys.__audioSupport.context !== undefined) {
        if (window.cc.sys.__audioSupport.context.state === 'suspended' || window.cc.sys.__audioSupport.context.state === 'interrupted') {
            window.cc.sys.__audioSupport.context.resume();
        }
    }
}

第二种,直接重写prompt方法

window.$prompt = window.prompt;
window.prompt = function (text, defaultText) {
    var result = window.$prompt(text, defaultText);
    if (window.cc !== undefined && window.cc.sys !== undefined) {
        if (window.cc.sys.__audioSupport !== undefined && window.cc.sys.__audioSupport.context !== undefined) {
            if (window.cc.sys.__audioSupport.context.state === 'suspended' || window.cc.sys.__audioSupport.context.state === 'interrupted') {
                window.cc.sys.__audioSupport.context.resume();
            }
        }
    }
    return result;
};

第三种,安装dsbridge-cocos

npm i dsbridge-cocos
3赞

MARK.

mark.

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。