- Creator 版本: 2.4.3
- 目标平台: APP里的webview
- 手机型号: iPhone 12
iOS的开发同学已经给WKWebView 设置 mediatypesrequiringuseractionforplayback = No
在系统版本14.4是一切正常的,今天升级到14.6后,打开H5没声音,Cocos是打包成H5,在APP通过链接访问的.
iOS的开发同学已经给WKWebView 设置 mediatypesrequiringuseractionforplayback = No
在系统版本14.4是一切正常的,今天升级到14.6后,打开H5没声音,Cocos是打包成H5,在APP通过链接访问的.
是进入无点击操作自动播放的声音吗
是的,需要用户打开H5自动播放声音
结贴,记录下解决办法~
本次的代码执行流程是:先跟客户端通信拿到返回值后才开始加载游戏。
出现本次问题因为使用了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
MARK.
mark.
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。