uni-app ios应用在webview授权麦克风后,第二次进入会重复提示授权
uni-app ios应用在webview授权麦克风后,第二次进入会重复提示授权
问题描述
uniapp ios正常整个应用都是使用wkwebview渲染的,查看工程代码里面有原生的配置,allowsInlineMediaPlayback = true,使wkwebview可以从应用继承权限,这里的权限继承并没有问题。
但是在app里面使用webview相当于wkwebview里面再嵌套webview/frame:
例如<web-view :src="/hybrid/html/index"></web-view>
在该h5页面调用webRTC的接口,授权麦克风/摄像头成功后,下一次进入webview页面又重复提示授权。
问题参考:
https://ask.dcloud.net.cn/question/174238
如何让webview页面只授权一次?或者说如何让webview页面继承父级权限?
以上问题若有具体解决办法,请联系我,有偿提问。【赏金更新】【200】
思路:
是否可以参考以下代码,给WKWebview创建frame的时候赋予grant权限实现效果?
@available(iOS 15.0, *)
func webView(_ webView: WKWebView,
decideMediaCapturePermissionsFor origin: WKSecurityOrigin,
initiatedBy frame: WKFrameInfo,
type: WKMediaCaptureType) async -> WKPermissionDecision {
return .grant;
}
更多关于uni-app ios应用在webview授权麦克风后,第二次进入会重复提示授权的实战教程也可以访问 https://www.itying.com/category-93-b0.html
赏金 100
更多关于uni-app ios应用在webview授权麦克风后,第二次进入会重复提示授权的实战教程也可以访问 https://www.itying.com/category-93-b0.html
好诱人
回复 3***@qq.com: 赏金不多,对于处理过这个问题的人来说应该很简单。
我的h5项目有使用这个库,它只能帮我兼容各个浏览器请求权限的问题,并不能处理继承父级权限
uniapp ios 中的webview在原生是不是一个iframe?可能是wkwebview创建iframe的时候没有把配置附带过去?有大神能解决这个问题的吗?
官方有人不?能看看这个问题?
同求解决方案
请问解决了吗,同求解决方案
https://developer.apple.com/videos/play/wwdc2021/10032/ 官方ios15的解决方案,但是不知道到了uniapp这边怎么写,感觉得有个原生插件支持,同求
我解决了,需要的话可以+Q1343066628
在处理uni-app的iOS应用在WebView中授权麦克风的问题时,确保不会重复提示授权,通常涉及到对权限请求的管理。下面是一个可能的解决方案,通过使用JavaScript与iOS原生代码交互,记录用户已授权的状态,并避免重复请求权限。
步骤1:iOS原生代码部分
首先,在你的iOS项目中,创建一个用于管理权限请求的单例类(如PermissionManager
),并在其中记录麦克风权限的状态。
// PermissionManager.h
#import <Foundation/Foundation.h>
@interface PermissionManager : NSObject
+ (instancetype)sharedManager;
- (BOOL)isMicrophonePermissionGranted;
- (void)requestMicrophonePermissionWithCompletion:(void (^)(BOOL granted))completion;
@end
// PermissionManager.m
#import "PermissionManager.h"
@implementation PermissionManager
+ (instancetype)sharedManager {
static dispatch_once_t onceToken;
static PermissionManager *instance;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
- (BOOL)isMicrophonePermissionGranted {
// 实现检查麦克风权限的逻辑
// 假设使用AVFoundation框架
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
return authStatus == AVAuthorizationStatusAuthorized;
}
- (void)requestMicrophonePermissionWithCompletion:(void (^)(BOOL granted))completion {
// 如果已授权,直接回调
if ([self isMicrophonePermissionGranted]) {
completion(YES);
return;
}
// 请求权限
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {
completion(granted);
}];
}
@end
步骤2:uni-app中的JavaScript代码
在uni-app中,通过plus.bridge.exec
调用iOS原生方法,检查并请求权限。
function checkAndRequestMicrophonePermission() {
plus.bridge.exec('PermissionManager', 'isMicrophonePermissionGranted', [], function(event) {
if (event.message) {
// 已授权
console.log('Microphone permission already granted.');
} else {
// 未授权,请求权限
plus.bridge.exec('PermissionManager', 'requestMicrophonePermissionWithCompletion', [], function(event) {
if (event.message) {
console.log('Microphone permission granted.');
} else {
console.error('Microphone permission denied.');
}
});
}
});
}
// 在页面加载或需要时调用
document.addEventListener('plusready', function() {
checkAndRequestMicrophonePermission();
});
结论
上述代码通过iOS原生代码管理权限状态,并在uni-app中通过JavaScript调用原生方法进行检查和请求权限,避免了重复提示的问题。确保在实际项目中,根据具体需求调整和完善代码。