SDK Quảng cáo trên phương tiện truyền thông (IMA) dành cho iOS.
Hướng dẫn này dành cho những nhà xuất bản IMA muốn thêm chế độ hỗ trợ Hình trong hình vào chế độ triển khai IMA hiện có.
Điều kiện tiên quyết
- Xem hết hướng dẫn Bắt đầu sử dụng.
Thêm tính năng hỗ trợ hình trong hình vào ứng dụng
Kể từ phiên bản SDK 3.1.0, IMA hỗ trợ chế độ Hình trong hình của Apple cho iPad. Để thêm chế độ hỗ trợ cho chế độ Hình trong hình vào ứng dụng, bạn cần điều chỉnh một số chế độ cài đặt và triển khai một số lớp IMA mới, như minh hoạ dưới đây.
Cập nhật chế độ cài đặt để cho phép phát trong nền
Chế độ Hình trong hình yêu cầu bạn cho phép phát nội dung nghe nhìn trong nền trong ứng dụng của mình.
Đặt Chế độ nền thành BẬT cho Âm thanh, AirPlay và Hình trong hình như minh hoạ bên dưới:
Đặt các thuộc tính
AVAudioSession
để hỗ trợ chế độ phát trong nền, cũng như bật chế độ phát trong nền trongIMASettings
:... – (void)viewDidLoad { [super viewDidLoad]; self.playButton.layer.zPosition = MAXFLOAT; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [self setupAdsLoader]; [self setUpContentPlayer]; } – (void)setupAdsLoader { IMASettings *settings = [[IMASettings alloc] init]; settings.enableBackgroundPlayback = YES; self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings]; self.adsLoader.delegate = self; }
Tạo các đối tượng iOS và IMA mới cho chế độ hình trong hình
Để hỗ trợ chế độ Hình trong hình, Apple đã thêm các lớp AVPictureInPictureController
và AVPictureinPictureControllerDelegate
. Về phần mình, IMA đã thêm IMAPictureInPictureProxy
. Để kết hợp các lớp này vào dự án của bạn, hãy thêm các câu lệnh sau vào mã:
... @interface VideoViewController () <AVPictureInPictureControllerDelegate, IMAAdsLoaderDelegate, IMAAdsManagerDelegate, UIAlertViewDelegate> ... // PiP objects. @property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy; @property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController; ... @end - (void)setUpContentPlayer { ... self.pictureInPictureProxy = [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self]; self.pictureInPictureController = [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer]; self.pictureInPictureController.delegate = self.pictureInPictureProxy; }
Sửa đổi yêu cầu quảng cáo
Bạn cần tạo thêm một đối tượng mới nữa: IMAAVPlayerVideoDisplay
. Tham số này được truyền đến hàm khởi tạo IMAAdsRequest
và cho phép SDK chèn quảng cáo vào cửa sổ PiP khi video của bạn đang phát ở chế độ Hình trong hình:
... - (void)requestAdsWithTag:(NSString *)adTagUrl { [self logMessage:@"Requesting ads"]; // Create an ad request with our ad tag, display container, and optional user context. IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:adTagUrl adDisplayContainer:[self createAdDisplayContainer] avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer] pictureInPictureProxy:self.pictureInPictureProxy userContext:nil]; [self.adsLoader requestAdsWithRequest:request]; }
Bắt đầu chạy quảng cáo
Không thể bắt đầu quảng cáo IMA SDK ở chế độ hình trong hình. Do đó, bạn cần đảm bảo rằng bạn chỉ gọi [adsManager start]
khi video ở chế độ phát tiêu chuẩn:
... - (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event { [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]]; // When the SDK notified you that ads have been loaded, play them. switch (event.type) { case kIMAAdEvent_LOADED: if (![self.pictureInPictureController isPictureInPictureActive]) { [adsManager start]; } break; ... default: break; } }
Chuyển sang chế độ hình trong hình
Nếu đang sử dụng AVPlayer
mà không có AVPlayerViewController
, bạn cần thêm nút chế độ Hình trong hình của riêng mình. Chúng tôi đã triển khai một trong Advanced
Sample (Mẫu nâng cao) như sau:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
Câu hỏi thường gặp
- Làm cách nào để bắt đầu quảng cáo khi video ở chế độ Hình trong hình?
- Không thể bắt đầu quảng cáo khi video ở chế độ Hình trong hình; quảng cáo chỉ có thể bắt đầu ở chế độ phát thông thường.
- Chế độ tích hợp Hình trong hình hiện tại của tôi cần đặt
self.pictureInPictureController.delegate
cho lớp của riêng tôi. Làm cách nào để triển khai quảng cáo IMA ở chế độ Hình trong hình mà vẫn là đại biểu? - SDK IMA cũng cần nhận các thông báo
AVPictureinPictureControllerDelegate
để cho phép phát quảng cáo ở chế độ Hình trong hình. Đó là lý do chúng tôi yêu cầu bạn đặt uỷ quyền choAVPictureinPictureController
thành một phiên bản củaIMAPictureInPicturyProxy
. Đối tượng proxy này chuyển tiếp tất cả các thông báoAVPictureinPictureControllerDelegate
đến ứng dụng của bạn, nhưng cũng chuyển tiếp các lệnh gọi đến IMA để bật tính năng hỗ trợ chế độ Hình trong hình. Xin lưu ý rằng bạn cũng phải duy trì một đối tượng xử lý cục bộ cho AVPlayerLayer.