用户拒绝了设备授权,后续如何开启麦克风和摄像头?
问题描述
使用小鱼WebRTC SDK呼叫时,第一次浏览器会弹出授权框,需要让用户授权麦克风和摄像头权限,类似:
如果用户选择了允许,那么浏览器会记录此状态,后续再入会无需再次授权,可以方便用户后续加入会议操作。
但如果用户选择了禁止操作,那么浏览器会标记为权限denied
状态,即权限拒绝。那么后续再想通过SDK的API打开摄像头或者麦克风,SDK会返回打开设备失败的错误信息,因为SDK再尝试再次采集设备数据流时,浏览器会直接拒绝采集操作,并返回相应的错误信息。
所以,当权限申请被用户拒绝后,一般情况下是无法再次通过API进行打开设备操作。这种情况下,需要业务上进行相应的异常处理,引导用户手动开启授权操作。
解决方式
集成SDK时,可以监听 permission 事件,获取用户的权限变化状态,当用户拒绝授权后,SDK会上报麦克风和摄像头的详细授权信息:
client.on("permission", (e: ICurrentPermission) => {
console.log("用户授权变化: ", e);
});
// granted:已经授予权限
// denied:权限拒绝
// prompt:请求授权中
type TPermissionType = 'granted' | 'denied' | 'prompt' | '';
interface ICurrentPermission {
microphone: TPermissionType;
camera: TPermissionType;
}
然后可以在摄像头/麦克风的事件方法上增加异常逻辑处理,如果监测到是权限被拒绝的情况下,再次开启需要引导用户进行手动授权操作,类似:
通过如上的引导操作,让用户尝试再次手动授权,然后可以重新入会,即可解决权限被拒绝后无法开启设备的问题。
适用浏览器
Chrome系列浏览器、Edge浏览器、360浏览器、火狐浏览器;
注意:
- 手机端浏览器每次刷新页面后,都需要重新授权操作;
- Safari浏览器每次刷新页面后,再次入会都需要重新授权操作;