启用UIWebView音频在应用进入后台后继续播放

Mat*_*ift 5 audio avfoundation uiwebview ios swift

概括

\n

UIWebView我目前正在开发的应用程序使用, 以及allowsInlineMediaPlayback播放音频的属性的组合。目前,内容webView在 \xe2\x80\x93 中播放正常UIWebView,即使播放列表可以顺利浏览并播放每首歌曲。但是,当应用程序进入后台时,音频完全停止播放。

\n

从这里,我必须打开控制中心并继续手动播放音频。完成此操作后,音频再次开始播放,没有任何此类问题。它甚至可以毫无问题地浏览播放列表。

\n

我研究了各种解决方案(包括 AVFoundation 框架以及 AudioToolbox 框架),但似乎没有任何效果。我认为退出时音频不会继续播放,因为它是从webView. 话虽如此,我相信如果我能够通过拉出控制中心并点击播放按钮来继续播放整个播放列表,那么我相信有一个解决方法。

\n
\n

AppDelegate.swift

\n
import UIKit\nimport AVFoundation\nimport AudioToolbox\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    \n    var window: UIWindow?\n    let defaults = UserDefaults.standard\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        \n        do {\n            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)\n        }\n        catch let error as NSError {\n            print(error)\n        }\n        \n        do {\n            try AVAudioSession.sharedInstance().setActive(true)\n        }\n        catch let error as NSError {\n            print(error)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

ViewController.swift

\n
import UIKit\nimport WebKit\nimport AVFoundation\n\nclass ViewController: UIViewController, UIWebViewDelegate, UIScrollViewDelegate {\n    \n    @IBOutlet var webView: UIWebView!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // Set WebView Load Configurations\n        let webPlayer = URL(string: "https://urlHere.com")\n        let webRequest = URLRequest(url: webPlayer!)\n        webView.loadRequest(webRequest)\n        webView.allowsInlineMediaPlayback = true\n        webView.mediaPlaybackAllowsAirPlay = true\n        webView.mediaPlaybackRequiresUserAction = false\n        webView.allowsPictureInPictureMediaPlayback = true\n        \n        // Set WebView Scrolling Configurations\n        webView.scrollView.delegate = self\n        webView.scrollView.bounces = false\n        webView.scrollView.isScrollEnabled = false\n        \n        // Set WebView Background\n        webView.isOpaque = false\n        webView.backgroundColor = UIColor(red:0.10, green:0.10, blue:0.11, alpha:1.0)\n        webView.scrollView.backgroundColor = UIColor(red:0.10, green:0.10, blue:0.11, alpha:1.0)\n    }\n    \n    // Hide Status Bar\n    override var prefersStatusBarHidden: Bool {\n        return true\n    }\n    \n    // Disable Zoom for WebView\n    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {\n        return nil\n    }\n    \n    // Workaround for Scrolling Offset Bug\n    func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        scrollView.bounds = webView.bounds\n    }\n    \n}\n
Run Code Online (Sandbox Code Playgroud)\n

信息表

\n
<key>NSAppTransportSecurity</key>\n<dict>\n    <key>NSAllowsArbitraryLoads</key>\n    <true/>\n    <key>NSAllowsArbitraryLoadsInWebContent</key>\n    <true/>\n\n<key>UIBackgroundModes</key>\n<array>\n    <string>audio</string>\n</array>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

结论

\n

有没有什么方法可以让它工作,而无需通过控制中心手动播放暂停的歌曲?甚至有一种解决方法可以在后台进程暂停后播放音乐?我只是不确定从这里该去哪里。

\n