Skip to content

Commit b460faa

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

File tree

3 files changed

+72
-22
lines changed

3 files changed

+72
-22
lines changed

Objective-C/BasicExample/BasicExample/ViewController.m

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

34
@import AVFoundation;
5+
// [END player_imports]
6+
// [START ima_import]
47
@import GoogleInteractiveMediaAds;
8+
// [END ima_import]
59

10+
// [START player_variables]
611
@interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
712

813
/// Content video player.
@@ -13,7 +18,9 @@ @interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
1318

1419
/// UIView in which we will render our AVPlayer for content.
1520
@property(nonatomic, weak) IBOutlet UIView *videoView;
21+
// [END player_variables]
1622

23+
// [START ima_variables]
1724
// SDK
1825
/// Entry point for the SDK. Used to make ad requests.
1926
@property(nonatomic, strong) IMAAdsLoader *adsLoader;
@@ -23,9 +30,11 @@ @interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
2330

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

2735
@end
2836

37+
// [START player_setup]
2938
@implementation ViewController
3039

3140
// The content URL to play.
@@ -47,11 +56,6 @@ - (void)viewDidLoad {
4756
[self setUpContentPlayer];
4857
}
4958

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

5761
- (void)setUpContentPlayer {
@@ -66,16 +70,34 @@ - (void)setUpContentPlayer {
6670
playerLayer.frame = self.videoView.layer.bounds;
6771
[self.videoView.layer addSublayer:playerLayer];
6872

73+
// [START set_content_playhead]
6974
// Set up our content playhead and contentComplete callback.
7075
self.contentPlayhead = [[IMAAVPlayerContentPlayhead alloc] initWithAVPlayer:self.contentPlayer];
7176
[[NSNotificationCenter defaultCenter] addObserver:self
7277
selector:@selector(contentDidFinishPlaying:)
7378
name:AVPlayerItemDidPlayToEndTimeNotification
7479
object:self.contentPlayer.currentItem];
80+
// [END set_content_playhead]
81+
}
82+
83+
- (IBAction)onPlayButtonTouch:(id)sender {
84+
[self requestAds];
85+
self.playButton.hidden = YES;
86+
}
87+
// [END player_setup]
88+
89+
// [START content_complete]
90+
- (void)contentDidFinishPlaying:(NSNotification *)notification {
91+
// Make sure we don't call contentComplete as a result of an ad completing.
92+
if (notification.object == self.contentPlayer.currentItem) {
93+
[self.adsLoader contentComplete];
94+
}
7595
}
96+
// [END content_complete]
7697

7798
#pragma mark SDK Setup
7899

100+
// [START request_ads]
79101
- (void)setupAdsLoader {
80102
self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];
81103
self.adsLoader.delegate = self;
@@ -94,16 +116,11 @@ - (void)requestAds {
94116
userContext:nil];
95117
[self.adsLoader requestAdsWithRequest:request];
96118
}
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-
}
119+
// [END request_ads]
104120

105121
#pragma mark AdsLoader Delegates
106122

123+
// [START ads_loader_delegate]
107124
- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
108125
// Grab the instance of the IMAAdsManager and set ourselves as the delegate.
109126
self.adsManager = adsLoadedData.adsManager;
@@ -120,23 +137,29 @@ - (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorD
120137
NSLog(@"Error loading ads: %@", adErrorData.adError.message);
121138
[self.contentPlayer play];
122139
}
140+
// [END ads_loader_delegate]
123141

124142
#pragma mark AdsManager Delegates
125143

144+
// [START ads_manager_delegate]
126145
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
127146
// When the SDK notified us that ads have been loaded, play them.
128147
if (event.type == kIMAAdEvent_LOADED) {
129148
[adsManager start];
130149
}
131150
}
151+
// [END ads_manager_delegate]
132152

153+
// [START ads_manager_error]
133154
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdError:(IMAAdError *)error {
134155
// Something went wrong with the ads manager after ads were loaded. Log the error and play the
135156
// content.
136157
NSLog(@"AdsManager error: %@", error.message);
137158
[self.contentPlayer play];
138159
}
160+
// [END ads_manager_error]
139161

162+
// [START pause_resume_requests]
140163
- (void)adsManagerDidRequestContentPause:(IMAAdsManager *)adsManager {
141164
// The SDK is going to play ads, so pause the content.
142165
[self.contentPlayer pause];
@@ -146,5 +169,6 @@ - (void)adsManagerDidRequestContentResume:(IMAAdsManager *)adsManager {
146169
// The SDK is done playing ads (at least for now), so resume the content.
147170
[self.contentPlayer play];
148171
}
172+
// [END pause_resume_requests]
149173

150174
@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)