愤怒的洋芋蛋蛋
愤怒的洋芋蛋蛋
  • 发布:2025-04-12 17:49
  • 更新:2025-04-12 17:49
  • 阅读:21

【报Bug】webview页面内嵌webRTC,偶尔权限请求框不弹出请求导致rtc无法推流到蓝牙设备的问题。

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 专业版 26100.3194

HBuilderX类型: 正式

HBuilderX版本号: 4.57

手机系统: Android

手机系统版本号: Android 13

手机厂商: 小米

手机机型: 小米10S 小米11

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

------------------------------------------index.vue-----------------------------------
<template>
<view class="content">
<image class="logo" @tap="logo()" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
</view>
</template>

<script>
import adapter from 'webrtc-adapter';
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
uni.getSystemInfo({
success: function (res) {
console.error('----------w-------------',res.browserName)
}
});
},
methods: {
logo(){
uni.showToast({
title: '点击成功',
position: 'center',
duration: 2000
})

            switch (uni.getSystemInfoSync().platform) {  
                // android  
                    case 'android':  
                    uni.showToast({  
                        title: '进判断android',  
                        position: 'center',  
                        duration: 2000  
                    })  
                    plus.android.requestPermissions(['android.permission.RECORD_AUDIO'],(resultObj) => {  
                        console.log(resultObj)  
                        if (resultObj.granted.indexOf('android.permission.RECORD_AUDIO')!== -1) {  
                            uni.navigateTo({  
                                url:"/pages/index/webview"  
                            })  
                        } else {  
                            console.log('语音权限未授予,请开启录音权限')  
                            getApp().myshowtast("语音权限未授予,请开启录音权限。");  
                        }  
                        },  
                        (error) => {  
                            getApp().myshowtast("请求权限失败");  
                        }  
                    );  

                break;  
                case 'ios':  //表示尚未请求授权  

                break;  
                default:  
                break;  
            }  

        }  
    }  
}  

</script>
---------------------------------------webview.vue---------------------------------------
<template>
<view>
<web-view src="https://demo.volcvideo.com/aigc"></web-view>
</view>
</template>

<script>
import adapter from 'webrtc-adapter';
uni.getSystemInfo({
success: function (res) {
console.error('--------------23---------',res.browserName)
}
});

</script>

--------------------------------------------manifest.json--------------------------------------------------
{
"name" : "rtcdemo-0330",
"appid" : "UNIA4BF360",
"description" : "",
"versionName" : "1.0.2",
"versionCode" : 103,
"transformPx" : false,
/ 5+App特有相关 /
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"webView" : {
// 3.5.0 + 仅Android支持
"x5" : {
// 此属性需要勾选 Android X5 Webview 模块,详细参见下面的说明
"timeOut" : 3000, // 超时时间
"showTipsWithoutWifi" : true, // 是否在非WiFi网络环境时,显示用户确认下载x5内核的弹窗。默认值false
"allowDownloadWithoutWiFi" : false // 是否允许用户在非WiFi网络时进行x5内核的下载。默认值false(如果为true,就不会显示用户确认的弹窗。)
}
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/ 模块配置 /
"modules" : {
"Record" : {},
"Webview-x5" : {}
},
/ 应用发布信息 /
"distribute" : {
/ android打包配置 /
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/ ios打包配置 /
"ios" : {
"dSYMs" : false
},
/ SDK配置 /
"sdkConfigs" : {}
}
},
/ 快应用特有相关 /
"quickapp" : {},
/ 小程序特有相关 /
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "3"
}

操作步骤:

1.问题复现步骤:
打开 APP,进入包含 Webview 的页面。
等待页面加载完成,WebRTC 尝试获取媒体设备权限。
有时会正常弹出请求选择框,提升用户是否给麦克风权限;但大多数时间不会弹出该请求框,且没有任何错误提示。

预期结果:

首次进入 Webview 页面,当 WebRTC 尝试获取媒体设备权限时,都应该弹出请求选择框,让用户同意麦克风权限。

实际结果:

高概率不会弹出请求选择框,导致音频是无法推送到无麦克风设备的蓝牙音响。

bug描述:

我正在使用 Uniapp 开发一个 APP 项目,在 APP 中使用 Webview 页面内嵌 WebRTC 功能。已经勾选了x5内核并且按照论坛中的建议添加了https://webrtc.github.io/adapter/adapter-latest.js 这个整合api然而,在将 APP 打包后,还是大概率的会遇到 Webview 页面不弹出请求选择框的问题。该问题并非每次都会出现,具有一定的随机性,在小米手机上测试发现 当不出现这个请求选择框时,音频是无法推送到无麦克风设备的蓝牙音响的。这给我定位和解决问题带来了很大的困扰。

2025-04-12 17:49 负责人:无 分享
已邀请:

要回复问题请先登录注册