Playback of linear adverts
In SwiftUI-based applications, the code snippet in the ViewController
class is implemented in the feature's model file.
To enable playback of linear adverts.
In
ViewController.swift
, add the following imports.CODEimport OPYSDKFPS import GoogleInteractiveMediaAds
Update the View Controller to specify the configuration of the required adverts in an ad tag URL, for example:
CODEclass ViewController: UIViewController { let otvPlayer : OTVAVPlayer @IBOutlet weak var playerView: PlayerView! let assetURL = URL(string: "https://d3bqrzf9w11pn3.cloudfront.net/basic_hls_bbb_clear/index.m3u8")! //VMAP Pre-, Mid-, and Post-rolls, Single Ads let adTagURL = "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480" + "&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&" + "gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26" + "sample_ar%3Dpremidpost&cmsid=496&vid=short_onecue&correlator=;" ...
After the
init
method, add an attribute to access theIMAWrapper
.CODE// IMAWrapper that is used to manage the IMA Google Framework var imaWrapper: IMAWrapper?
In the same file, implement the
IMAWrapperDelegate
protocol. This allows theIMAWrapper
class’s functionality to be triggered for advert management. Do this by extending theViewController
class, for example:CODE// ViewController must adopt the protocol IMAWrapperDelegate // so the IMAWrapper can access player fuctions. extension ViewController: IMAWrapperDelegate { func pauseContent() { print("IMAWrapper: pause video to show ads") otvPlayer.pause() } func resumeContent() { print("IMAWrapper: resume video") otvPlayer.play() } func allAdsCompleted() { print("IMAWrapper: all ads completed") } func log(event: String?) { print("IMAWrapper: AdsManager error: \(event ?? "empty message")") } }
Add the
viewDidAppear
method, with the following:Instantiate the
IMAWrapperAdsSettings
class to override default Google IMA configuration.Instantiate the
IMAWrapperPlayerDetails
class which allows the provision of the UI elements and details of the Ad Tag URI to theIMAWrapper
.Instantiate the
IMAWrapper
class, providing a reference to the class that implements theIMAWrapperDelegate
protocol. In this example,ViewController
implements the protocol so we pass a reference to self.Call
requestAds()
to start the ads.
Your
viewDidAppear
method should look like the following:CODEoverride func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // Customise the settings of the IMAWrapper see API documention for details let setupSettings = IMAWrapperAdsSettings(settingsDictionary: [String: Any]() ) // Set companionAdViews to nil if there are no companionAdViews let playerDetails = IMAWrapperPlayerDetails(contentPlayer: otvPlayer, adsUIView: playerView, adTagURL: adTagURL, companionAdViews: nil) // Initialise the IMAWrapper object imaWrapper = IMAWrapper(withPlayerDetails: playerDetails, withDelegate: self, withSettings: setupSettings) // Request ads to start, no need to call player.play() since the player will start once adverts complete // N.B. requestAds() will return false if the adTagURL hasn't been set/ is empty. if imaWrapper?.requestAds() == true { print("IMAWrapper: requestAds returned true") } }
Build and run on a device to see the adverts.