Xamarin WebRTC in IOS WebView not working

597 Views Asked by At

I'm trying to integrate webrtc into Xamarin Forms app using webview Android is working fine but in IOS streaming camera not working . I think the problem in IOS WebView render here's my render

public class HybridWebViewRenderer : WkWebViewRenderer, IWKScriptMessageHandler
    {
        public HybridWebViewRenderer() : this(new WKWebViewConfiguration())
        {
        }

        public HybridWebViewRenderer(WKWebViewConfiguration config) : base(config)
        {
            config.AllowsInlineMediaPlayback = true;
            userController = config.UserContentController;
            var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
            userController.AddUserScript(script);
            userController.AddScriptMessageHandler(this, "invokeAction");
        }

        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null)
            {
                userController.RemoveAllUserScripts();
                userController.RemoveScriptMessageHandler("invokeAction");
                GenericWebView hybridWebView = e.OldElement as GenericWebView;
                hybridWebView.Cleanup();
            }

            if (e.NewElement != null)
            {
                //{((GenericWebView)Element).Uri}
                string filename = Path.Combine(NSBundle.MainBundle.BundlePath, $"/test.html");
                LoadRequest(new NSUrlRequest(new NSUrl(filename, false)));
            }
        }

        public void DidReceiveScriptMessage(WKUserContentController userContentController, WKScriptMessage message)
        {
            ((GenericWebView)Element).InvokeAction(message.Body.ToString());
        }

       
    }

How to fix this issue ?

1

There are 1 best solutions below

2
On

Firstly, please check the two permissions camera and photo permission in your info.plist : Privacy - Camera Usage Description, Privacy - Photo Library Usage Description.

And then,you could manage to replace WkWebViewRenderer by ViewRenderer and set AllowsInlineMediaPlayback.

 using WebKit;
 [assembly: ExportRenderer(typeof(WebView), typeof(MyWebViewRenderer))]
 namespace WebViewRendererDemo.iOS
 {
     public class MyWebViewRenderer : ViewRenderer<WebView, WKWebView>
     {
         WKWebView wkWebView;
         protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
         {
             base.OnElementChanged(e);
             if (Control == null)
             {
                 WKWebViewConfiguration configuration = new WKWebViewConfiguration();
                 configuration.AllowsInlineMediaPlayback = true;
                 wkWebView = new WKWebView(new CGRect(0,0,300,400), configuration);
                 wkWebView.LoadRequest(new NSUrlRequest(xxxx);
                 SetNativeControl(wkWebView);
             }
         }
     }
 }