

WKWebViewを利用したアプリを開発しております  
「WKWebViewでバックグランド再生をしたい」のですが、  
アプリをバックグラウンドにした時に停止してしまい、アプリをバックグラウンドにした後も再生を続けることができません。  
詳しい方がいれば教えて頂きたいです。

実際に試した実装は以下です。

  1. Appのバックグラウンドモードをオンにする

[![設定](https://i.stack.imgur.com/dmL3y.png)](https://i.stack.imgur.com/dmL3y.png)

[code]     private func setupAudioSession() {

        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)
        } catch {
            print(error)
        }
    }
    
[/code]

  2. Appがバックグラウンドに行った時に、Webviewへメッセージ送信
[code]     ...

    
    NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationDidEnterBackground, object: nil, queue: nil, using: didEnterBackground)
    ...
    
    
    internal func didEnterBackground(notification: Notification) {
        playVideo()
    }
    
    func playVideo() {
        guard let js: String = Bundle.main.path(forResource: "PlayVideo", ofType: "js") else { return }
        webView.evaluateJavaScript(js, completionHandler: nil)
        print("play video")
    }
    
[/code]

PlayVideo.js

[code]     (function() {

      var videos = document.getElementsByTagName('video');
      for(var i = 0; i < videos.length; i++) { videos[i].play(); }
    })();
    
[/code]

  3. コントロールセンターからの操作に対応する
[code]     private func setupRemoteControl() {

        MPRemoteCommandCenter.shared().playCommand.isEnabled = true
        MPRemoteCommandCenter.shared().playCommand.addTarget { [weak self] (event) -> MPRemoteCommandHandlerStatus in
            self?.playVideo()
            print("MPRemoteCommandCenter playCommand")
            return .success
        }
        UIApplication.shared.beginReceivingRemoteControlEvents()
        self.becomeFirstResponder()
    }
    
[/code]

実装したコードは[こちら](https://github.com/yokurin/WKWebView/blob/ce3d01a49410dd8763b40afa4f5086788af6992e/WKWebView/Sources/ViewControllers/ViewController.swift)にあげております。


CC BY-SA 3.0
2018-02-12T02:16:21.727
41660
2018-08-13T12:01:20.390
2018-02-12T03:28:41.137
19110
27315
question
swift ios webview wkwebview
WKWebViewでバックグランド再生をしたい


正しくjavaScriptが実行されてるのか少しコード見てみてログをはくようにしてみました。

[code]

        guard let js: String = Bundle.main.path(forResource: "PlayVideo", ofType: "js") else { return }
        self.webView.evaluateJavaScript(js) { (data, error) in
            if let e = error {
                print("e \(e)")
            } else {
                print("play video")
            }
        }
    
[/code]

が、以下のようなエラーが出ましたのでこちらを先に確認すると良い気がします。

Domain=WKErrorDomain Code=4 "A JavaScript exception occurred"
UserInfo={WKJavaScriptExceptionLineNumber=1,
WKJavaScriptExceptionMessage=SyntaxError: No identifiers allowed directly
after numeric literal, WKJavaScriptExceptionColumnNumber=0,
WKJavaScriptExceptionSourceURL=<https://github.com/>, NSLocalizedDescription=A
JavaScript exception occurred}


CC BY-SA 3.0
2018-02-27T06:28:50.757
42032
2018-02-27T06:28:50.757
8575
41660
answer