浏览器还在 ios webview 中请求相机权限

问题描述 投票:0回答:2

我有一个 Xamarin.Forms Prism 应用程序。它使用ios项目中的WKWebView来显示网页。在该页面中,除了来自iOS的权限之外,还显示来自浏览器的权限弹出窗口。有人可以帮我解决这个问题吗?这种情况仅发生在 iOS 中。

ios xamarin.forms prism wkwebview
2个回答
0
投票

灵感来自 https://developer.apple.com/videos/play/wwdc2021/10032/?time=949

ViewController.swift

class ViewController: UIViewController, WKUIDelegate {
    var webView: WKWebView!;

    override func loadView() {
        super.loadView();

        let webViewConfiguration = WKWebViewConfiguration();
        webViewConfiguration.allowsInlineMediaPlayback = true;

        webView = WKWebView(frame:.zero , configuration: webViewConfiguration);

        webView.uiDelegate = self;

    }

    override func viewDidLoad() {
        super.viewDidLoad();

        webView.load(...);
    }

    @available(iOS 15.0, *)
    func webView(_ webView: WKWebView,
        decideMediaCapturePermissionsFor origin: WKSecurityOrigin,
        initiatedBy frame: WKFrameInfo,
        type: WKMediaCaptureType) async -> WKPermissionDecision {
            return .grant;
    }
}

-1
投票

https://learn.microsoft.com/en-us/answers/questions/1167987/how-to-fix-double-permission-popup-in-xamarin-ios

这个帖子帮助我解决了这个问题。实现一个继承自 WKUIDelegate 的类。

  public class CustomWebViewDelegate : WKUIDelegate
    {
        [Export("webView:decideMediaCapturePermissionsForOrigin:initiatedByFrame:type:decisionHandler:")]
        public override void RequestMediaCapturePermission(WKWebView webView, WKSecurityOrigin origin, WKFrameInfo frame, WKMediaCaptureType type, Action<WKPermissionDecision> decisionHandler)
        {
            try
            {
                decisionHandler(WKPermissionDecision.Grant);
               base.RequestMediaCapturePermission(webView, origin, frame, type, decisionHandler);
            }
            catch (Exception e)
            { }
        }
    }

在Renderer类中添加此语句。

webView.UIDelegate = new CustomWebViewDelegate();
© www.soinside.com 2019 - 2024. All rights reserved.