uni-app ios App接入腾讯广点通广告后,播放视频广告导致app内播放音频无声音

uni-app ios App接入腾讯广点通广告后,播放视频广告导致app内播放音频无声音

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Mac
PC版本号 10.15.4
HBuilderX 正式
版本号 3.1.13
手机系统 iOS
手机版本 IOS 14
手机厂商 苹果
手机型号 ipone12
页面类型 vue
打包方式 离线
项目创建 HBuilderX

操作步骤:

app点击激励视频广告,或者出现视频类的插屏广告,关闭后,app内的全部音频播放无声音

预期结果:

播放音频有声音

实际结果:

播放音频无声音

bug描述:

没有打开过广告的状态下,app播放音频都正常; 接入腾讯广点通广告后,只要弹出视频类的广告,不管是否点击播放(广告播放有声音),在关闭广告后,app内的所有音频播放全部没有声音。通过日志打印出来了播放状态和音量,都是正常的。即使再次播放音频,都是没有声音的状态。 只能将app进程杀死,重新打开才有声音; 音频播放的代码在unityFramework库中;


更多关于uni-app ios App接入腾讯广点通广告后,播放视频广告导致app内播放音频无声音的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

搜索找到一个相关答案:“在GDTSDKConfig.h里有个enableDefaultAudioSessionSetting参数,设置为NO” 但是uni-app配置广告模块的相关依赖资源文件找不到该文件,无法进行更改设置

更多关于uni-app ios App接入腾讯广点通广告后,播放视频广告导致app内播放音频无声音的实战教程也可以访问 https://www.itying.com/category-93-b0.html


使用的是 UniAD 吗?

我测试了HX基座,播放广点通激励视频(有声音)后,再去播放video组件的视频,视频有声音,测试的audio组件也有声音。你说的没声音是这个unityFramework库里的是吗? 这个库哪来的?是不是里边声音这块没处理好啊

unityFramework是我们自己写的关于音频播放的代码,声音是unityFramework库里,这个不是个别现象(有查到同样的反馈,跟unity里面的代码及处理无关),在腾讯广告的开发者帮助中心有这个问题,需要将enableDefaultAudioSessionSetting设置为NO;我们目前用的是uni-app的SDK,配置依赖资源,无法进行相关更改; 相关问题链接: http://developers.adnet.qq.com/doc/help/index#ios 激励视频

回复 WSYUN: 我们其他用户默认就是要设置YES的,这个设置是对iOS系统的AVAudioSession做的设置,广点通可以改,你也可以改,你自己处理下就可以,很多sdk都会处理这个AVAudioSession的,那还必须依赖其他sdk不成。

回复 WSYUN: /* 在播放音频时是否使用SDK内部对AVAudioSession设置的category及options,默认使用,若不使用,SDK内部不做任何处理,由调用方在展示广告时自行设置; SDK设置的category为AVAudioSessionCategoryAmbient,options为AVAudioSessionCategoryOptionDuckOthers /

这是一个典型的 iOS 音频会话冲突问题。当腾讯广点通视频广告播放时,系统音频会话被广告 SDK 接管,广告结束后未能正确恢复原有音频会话配置。

问题根源:

  1. 广告 SDK 修改了 AVAudioSession 的 Category 配置
  2. Unity Framework 中的音频播放与广告 SDK 的音频会话管理存在冲突
  3. 广告关闭后音频会话状态未正确重置

解决方案:

  1. 在广告关闭回调中手动重置音频会话:
// 广告关闭回调
onClose() {
    // iOS 专用音频会话重置
    #ifdef APP-PLUS
    if(plus.os.name == "iOS") {
        var audioSession = plus.ios.import("AVAudioSession");
        var session = audioSession.sharedInstance();
        session.setCategoryError("AVAudioSessionCategoryPlayback", null);
        session.setActiveError(true, null);
        plus.ios.deleteObject(session);
        plus.ios.deleteObject(audioSession);
    }
    #endif
}
回到顶部