I new swift , i want to implement feature picture in picture (PiP) in webview for android , ios . I've found all the posts here and implement some code :
for android (https://stackoverflow.com/a/54061449/15311463) It working
for ios not working . I configed BackgourdMode in Xcode . What i am missing ?
private var pictureInPictureController: AVPictureInPictureController!
let source = """
document.addEventListener('click', function(e){
if (e.target.id === 'pip_mobile_btn_img') {
window.webkit.messageHandlers.iosListener.postMessage('true');
}
})
"""
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
//self.performSegue(withIdentifier: "goToPlayer", sender: self)
//print("Hello Thinh")
if #available(iOS 14.2, *) {
self.pictureInPictureController.canStartPictureInPictureAutomaticallyFromInline = true
self.pictureInPictureController.startPictureInPicture()
}
}
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webConfiguration.allowsInlineMediaPlayback = true
webConfiguration.mediaTypesRequiringUserActionForPlayback = []
let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
webConfiguration.userContentController.addUserScript(script)
webConfiguration.userContentController.add(self, name: "iosListener")
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.scrollView.isScrollEnabled = false
webView.isOpaque = true
webView.scrollView.bounces = false
}
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
view = webView
let myRequest = URLRequest(url: URL(string: playerURL)!)
webView.load(myRequest)
}