Playback of linear adverts
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") } }
- Instantiate the
Build and run on a device to see the adverts.