Skip to content

Commit f3c239c

Browse files
google-ima-devrel-botIMA Developer Relations
authored andcommitted
Adds documentation region tags.
PiperOrigin-RevId: 776201852
1 parent b06576e commit f3c239c

File tree

3 files changed

+73
-22
lines changed

3 files changed

+73
-22
lines changed

Objective-C/BasicExample/BasicExample/ViewController.m

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
2+
// [START player_imports]
13
#import "ViewController.h"
24

35
@import AVFoundation;
6+
// [END player_imports]
7+
// [START ima_import]
48
@import GoogleInteractiveMediaAds;
9+
// [END ima_import]
510

11+
// [START player_variables]
612
@interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
713

814
/// Content video player.
@@ -13,7 +19,9 @@ @interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
1319

1420
/// UIView in which we will render our AVPlayer for content.
1521
@property(nonatomic, weak) IBOutlet UIView *videoView;
22+
// [END player_variables]
1623

24+
// [START ima_variables]
1725
// SDK
1826
/// Entry point for the SDK. Used to make ad requests.
1927
@property(nonatomic, strong) IMAAdsLoader *adsLoader;
@@ -23,9 +31,11 @@ @interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
2331

2432
/// Main point of interaction with the SDK. Created by the SDK as the result of an ad request.
2533
@property(nonatomic, strong) IMAAdsManager *adsManager;
34+
// [END ima_variables]
2635

2736
@end
2837

38+
// [START player_setup]
2939
@implementation ViewController
3040

3141
// The content URL to play.
@@ -47,11 +57,6 @@ - (void)viewDidLoad {
4757
[self setUpContentPlayer];
4858
}
4959

50-
- (IBAction)onPlayButtonTouch:(id)sender {
51-
[self requestAds];
52-
self.playButton.hidden = YES;
53-
}
54-
5560
#pragma mark Content Player Setup
5661

5762
- (void)setUpContentPlayer {
@@ -66,16 +71,34 @@ - (void)setUpContentPlayer {
6671
playerLayer.frame = self.videoView.layer.bounds;
6772
[self.videoView.layer addSublayer:playerLayer];
6873

74+
// [START set_content_playhead]
6975
// Set up our content playhead and contentComplete callback.
7076
self.contentPlayhead = [[IMAAVPlayerContentPlayhead alloc] initWithAVPlayer:self.contentPlayer];
7177
[[NSNotificationCenter defaultCenter] addObserver:self
7278
selector:@selector(contentDidFinishPlaying:)
7379
name:AVPlayerItemDidPlayToEndTimeNotification
7480
object:self.contentPlayer.currentItem];
81+
// [END set_content_playhead]
7582
}
7683

84+
- (IBAction)onPlayButtonTouch:(id)sender {
85+
[self requestAds];
86+
self.playButton.hidden = YES;
87+
}
88+
// [END player_setup]
89+
90+
// [START content_complete]
91+
- (void)contentDidFinishPlaying:(NSNotification *)notification {
92+
// Make sure we don't call contentComplete as a result of an ad completing.
93+
if (notification.object == self.contentPlayer.currentItem) {
94+
[self.adsLoader contentComplete];
95+
}
96+
}
97+
// [END content_complete]
98+
7799
#pragma mark SDK Setup
78100

101+
// [START request_ads]
79102
- (void)setupAdsLoader {
80103
self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];
81104
self.adsLoader.delegate = self;
@@ -94,16 +117,11 @@ - (void)requestAds {
94117
userContext:nil];
95118
[self.adsLoader requestAdsWithRequest:request];
96119
}
97-
98-
- (void)contentDidFinishPlaying:(NSNotification *)notification {
99-
// Make sure we don't call contentComplete as a result of an ad completing.
100-
if (notification.object == self.contentPlayer.currentItem) {
101-
[self.adsLoader contentComplete];
102-
}
103-
}
120+
// [END request_ads]
104121

105122
#pragma mark AdsLoader Delegates
106123

124+
// [START ads_loader_delegate]
107125
- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
108126
// Grab the instance of the IMAAdsManager and set ourselves as the delegate.
109127
self.adsManager = adsLoadedData.adsManager;
@@ -120,23 +138,29 @@ - (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorD
120138
NSLog(@"Error loading ads: %@", adErrorData.adError.message);
121139
[self.contentPlayer play];
122140
}
141+
// [END ads_loader_delegate]
123142

124143
#pragma mark AdsManager Delegates
125144

145+
// [START ads_manager_delegate]
126146
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
127147
// When the SDK notified us that ads have been loaded, play them.
128148
if (event.type == kIMAAdEvent_LOADED) {
129149
[adsManager start];
130150
}
131151
}
152+
// [END ads_manager_delegate]
132153

154+
// [START ads_manager_error]
133155
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdError:(IMAAdError *)error {
134156
// Something went wrong with the ads manager after ads were loaded. Log the error and play the
135157
// content.
136158
NSLog(@"AdsManager error: %@", error.message);
137159
[self.contentPlayer play];
138160
}
161+
// [END ads_manager_error]
139162

163+
// [START pause_resume_requests]
140164
- (void)adsManagerDidRequestContentPause:(IMAAdsManager *)adsManager {
141165
// The SDK is going to play ads, so pause the content.
142166
[self.contentPlayer pause];
@@ -146,5 +170,6 @@ - (void)adsManagerDidRequestContentResume:(IMAAdsManager *)adsManager {
146170
// The SDK is done playing ads (at least for now), so resume the content.
147171
[self.contentPlayer play];
148172
}
173+
// [END pause_resume_requests]
149174

150175
@end

Swift/BasicExample/BasicExample/PlayerContainerViewController.swift

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,41 @@
1414
// limitations under the License.
1515
//
1616

17+
// [START player_import]
1718
import AVFoundation
19+
// [END player_import]
20+
// [START ima_import]
1821
import GoogleInteractiveMediaAds
1922

23+
// [END ima_import]
24+
25+
// [START player_variables]
2026
class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMAAdsManagerDelegate {
2127
static let contentURL = URL(
2228
string: "https://storage.googleapis.com/gvabox/media/samples/stock.mp4")!
2329

30+
private var contentPlayer = AVPlayer(url: PlayerContainerViewController.contentURL)
31+
32+
private lazy var playerLayer: AVPlayerLayer = {
33+
AVPlayerLayer(player: contentPlayer)
34+
}()
35+
// [END player_variables]
36+
37+
// [START ima_variables]
2438
static let adTagURLString =
2539
"https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/"
2640
+ "single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&"
2741
+ "gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&correlator="
2842

2943
private let adsLoader = IMAAdsLoader()
3044
private var adsManager: IMAAdsManager?
31-
private var contentPlayer = AVPlayer(url: PlayerContainerViewController.contentURL)
3245

46+
private lazy var contentPlayhead: IMAAVPlayerContentPlayhead = {
47+
IMAAVPlayerContentPlayhead(avPlayer: contentPlayer)
48+
}()
49+
// [END ima_variables]
50+
51+
// [START player_setup]
3352
private lazy var videoView: UIView = {
3453
let videoView = UIView()
3554
videoView.translatesAutoresizingMaskIntoConstraints = false
@@ -45,14 +64,6 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
4564
return videoView
4665
}()
4766

48-
private lazy var contentPlayhead: IMAAVPlayerContentPlayhead = {
49-
IMAAVPlayerContentPlayhead(avPlayer: contentPlayer)
50-
}()
51-
52-
private lazy var playerLayer: AVPlayerLayer = {
53-
AVPlayerLayer(player: contentPlayer)
54-
}()
55-
5667
// MARK: - View controller lifecycle methods
5768

5869
override func viewDidLoad() {
@@ -61,11 +72,13 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
6172
videoView.layer.addSublayer(playerLayer)
6273
adsLoader.delegate = self
6374

75+
// [START set_content_observer]
6476
NotificationCenter.default.addObserver(
6577
self,
6678
selector: #selector(contentDidFinishPlaying(_:)),
6779
name: .AVPlayerItemDidPlayToEndTime,
6880
object: contentPlayer.currentItem)
81+
// [END set_content_observer]
6982
}
7083

7184
override func viewDidAppear(_ animated: Bool) {
@@ -88,9 +101,11 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
88101
func playButtonPressed() {
89102
requestAds()
90103
}
104+
// [END player_setup]
91105

92106
// MARK: - IMA integration methods
93107

108+
// [START request_ads]
94109
private func requestAds() {
95110
// Create ad display container for ad rendering.
96111
let adDisplayContainer = IMAAdDisplayContainer(
@@ -104,18 +119,22 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
104119

105120
adsLoader.requestAds(with: request)
106121
}
122+
// [END request_ads]
107123

108124
// MARK: - Content player methods
109125

126+
// [START content_complete]
110127
@objc func contentDidFinishPlaying(_ notification: Notification) {
111128
// Make sure we don't call contentComplete as a result of an ad completing.
112129
if notification.object as? AVPlayerItem == contentPlayer.currentItem {
113130
adsLoader.contentComplete()
114131
}
115132
}
133+
// [END content_complete]
116134

117135
// MARK: - IMAAdsLoaderDelegate
118136

137+
// [START ads_loader_delegate]
119138
func adsLoader(_ loader: IMAAdsLoader, adsLoadedWith adsLoadedData: IMAAdsLoadedData) {
120139
// Grab the instance of the IMAAdsManager and set ourselves as the delegate.
121140
adsManager = adsLoadedData.adsManager
@@ -135,16 +154,20 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
135154
}
136155
contentPlayer.play()
137156
}
157+
// [END ads_loader_delegate]
138158

139159
// MARK: - IMAAdsManagerDelegate
140160

161+
// [START ads_manager_delegate]
141162
func adsManager(_ adsManager: IMAAdsManager, didReceive event: IMAAdEvent) {
142163
// When the SDK notifies us the ads have been loaded, play them.
143164
if event.type == IMAAdEventType.LOADED {
144165
adsManager.start()
145166
}
146167
}
168+
// [END ads_manager_delegate]
147169

170+
// [START ads_manager_error]
148171
func adsManager(_ adsManager: IMAAdsManager, didReceive error: IMAAdError) {
149172
// Something went wrong with the ads manager after ads were loaded.
150173
// Log the error and play the content.
@@ -153,7 +176,9 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
153176
}
154177
contentPlayer.play()
155178
}
179+
// [END ads_manager_error]
156180

181+
// [START pause_resume_requests]
157182
func adsManagerDidRequestContentPause(_ adsManager: IMAAdsManager) {
158183
// The SDK is going to play ads, so pause the content.
159184
contentPlayer.pause()
@@ -163,6 +188,7 @@ class PlayerContainerViewController: UIViewController, IMAAdsLoaderDelegate, IMA
163188
// The SDK is done playing ads (at least for now), so resume the content.
164189
contentPlayer.play()
165190
}
191+
// [END pause_resume_requests]
166192

167193
// MARK: - deinit
168194

Swift/BasicExample/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
source 'https://github.com/CocoaPods/Specs.git'
22

3-
platform :ios, '14'
3+
platform :ios, '12'
44

55
target "BasicExample" do
66
pod 'GoogleAds-IMA-iOS-SDK', '~> 3.26.1'

0 commit comments

Comments
 (0)