使用Image Capture SDK时WKWebView无法打开相机和相册
WKWebView 搭配身份服务时相机权限异常解决思路
补全权限配置项
别只加基础权限,Info.plist里这几个键必须配齐,且描述要明确用途(空描述会导致系统拒绝授权):- 相机权限:
NSCameraUsageDescription,示例描述:"用于身份验证拍摄证件" - 相册读取权限:
NSPhotoLibraryUsageDescription - 若涉及写入相册,需额外添加
NSPhotoLibraryAddUsageDescription(iOS 11+ 必填)
- 相机权限:
完善WKWebView媒体相关配置
仅开启allowsInlineMediaPlayback不够,需补全以下配置:let webConfig = WKWebViewConfiguration() webConfig.allowsInlineMediaPlayback = true // 取消媒体播放需用户手动触发的限制 webConfig.mediaTypesRequiringUserActionForPlayback = [] // 直接授予媒体捕获权限 webConfig.mediaCapturePermissionPolicy = .grant针对iOS 14及以上版本,必须实现
WKUIDelegate的权限代理方法,否则系统会默认拒绝权限请求:func webView(_ webView: WKWebView, requestMediaCapturePermissionFor mediaType: WKMediaCaptureType, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (WKPermissionDecision) -> Void) { completionHandler(.grant) }排查H5页面兼容性
将身份服务的页面在Safari中打开测试,若Safari中也无法调用相机,说明问题出在权限配置或系统层面;若Safari正常,则聚焦排查WKWebView的配置问题。检查系统权限开关状态
进入设置→隐私与安全性→相机,确认你的App已被授予相机权限。若用户首次拒绝权限请求,后续调用会直接报错,需引导用户重新开启权限。适配不同iOS版本差异
- iOS 13及以下:除配置外,需确保H5页面中的video标签添加
playsinline属性 - iOS 14+:未实现上述
WKUIDelegate代理方法会直接导致相机调用失败
- iOS 13及以下:除配置外,需确保H5页面中的video标签添加

内容的提问来源于stack exchange,提问作者Max Max
相关产品推荐
相关产品推荐

