Copy <key>NSCameraUsageDescription</key>
<string>Camera Permission</string>
<key>NSMotionUsageDescription</key>
<string>Motion Permission</string>
In order for web Onboarding integrations that use WKWebView for iOS to function properly, it is necessary to customize the configuration to allow media playback without request user's action and to reproduce the media inline.
Copy @main
class AppDelegate : UIResponder , UIApplicationDelegate {
var window: UIWindow ?
func application ( _ application : UIApplication, didFinishLaunchingWithOptions launchOptions : [UIApplication.LaunchOptionsKey : Any ] ? ) -> Bool {
window = UIWindow ( frame : UIScreen.main.bounds )
window ? .rootViewController = WebViewController ()
window ? . makeKeyAndVisible ()
return true
}
}
Copy import UIKit
class SceneDelegate : UIResponder , UIWindowSceneDelegate {
var window: UIWindow ?
func scene ( _ scene : UIScene, willConnectTo session : UISceneSession, options connectionOptions : UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow ( windowScene : windowScene )
window ? .rootViewController = WebViewController ()
window ? . makeKeyAndVisible ()
}
}
Copy @preconcurrency import WebKit
import AVFoundation
class WebViewController : UIViewController , WKNavigationDelegate , WKUIDelegate {
var webView: WKWebView !
override func viewDidLoad () {
super. viewDidLoad ()
setupViews ()
setupConstraints ()
}
func setupViews () {
let webConfiguration = WKWebViewConfiguration ()
webConfiguration.allowsInlineMediaPlayback = true
webConfiguration.defaultWebpagePreferences.allowsContentJavaScript = true
webConfiguration.mediaTypesRequiringUserActionForPlayback = []
webView = WKWebView ( frame : .zero, configuration : webConfiguration )
webView.navigationDelegate = self
webView.uiDelegate = self
view. addSubview ( webView )
let request = URLRequest ( url : URL ( string : "https://cadastro.io/:token" ) ! )
webView. load ( request )
AVCaptureDevice. requestAccess ( for : .video ) { granted in
if granted {
// Access granted
} else {
// Access denied
}
}
}
func setupConstraints () {
webView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint. activate ( [
webView.topAnchor.constraint ( equalTo : view.topAnchor ) ,
webView.leadingAnchor.constraint ( equalTo : view.leadingAnchor ) ,
webView.trailingAnchor.constraint ( equalTo : view.trailingAnchor ) ,
webView.bottomAnchor.constraint ( equalTo : view.bottomAnchor )
] )
}
}