Hướng dẫn này dành cho các nhà xuất bản IMA muốn thêm Hình ảnh vào Hỗ trợ hình ảnh cho triển khai IMA hiện tại của họ.
Đ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ừ SDK phiên bản 3.1.0, IMA hỗ trợ chế độ Hình trong hình của Apple cho iPad. Để hỗ trợ tính năng Hình trong hình cho ứng dụng của mình, bạn cần tinh chỉnh một vài cài đặt và triển khai một vài lớp IMA mới, như được trình bày 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 ở chế độ nền ứng dụng của bạn.
Đặt Chế độ nền thành BẬT cho Âm thanh, AirPlay và hình trong hình Hình ảnh như minh hoạ dưới đây:
Đặt các thuộc tính
AVAudioSession
để hỗ trợ phát ở chế độ nền, cũng như bật chế độ phát ở chế độ 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 đối tượng iOS và IMA mới cho tính năng hình trong hình
Để hỗ trợ chế độ Hình trong hình, Apple đã thêm AVPictureInPictureController
và AVPictureinPictureControllerDelegate
. Về phần mình, IMA
IMAPictureInPictureProxy
. Để kết hợp các lớp này trong dự á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 của bạn
Bạn có thể tạo một đối tượng mới nữa: IMAAVPlayerVideoDisplay
. Giá trị này được truyền vào 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 đ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 quảng cáo
Không thể bắt đầu quảng cáo SDK IMA trong 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 của bạn ở
chế độ phát 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; } }
Đang 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 phải
thêm nút Hình trong hình của riêng bạn. Chúng tôi đã triển khai một trong 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 chạy quảng cáo khi video ở chế độ Hình trong hình?
- Quảng cáo không thể bắt đầu chạy khi video đang ở chế độ Hình trong hình; chúng bạn chỉ có thể bắt đầu chạy ở chế độ phát tiêu chuẩn.
- Công cụ tích hợp Hình trong hình hiện có của tôi cần đặt
self.pictureInPictureController.delegate
thành lớp của riêng tôi. Làm cách nào để triển khai quảng cáo IMA trong tính năng Hình trong hình mà tôi vẫn được uỷ quyền? - SDK IMA cũng cần nhận được
AVPictureinPictureControllerDelegate
để bật tính năng phát quảng cáo ở chế độ Hình trong hình. Đây là lý do chúng tôi yêu cầu bạn phải đặt ủy quyền choAVPictureinPictureController
thành một thực thể củaIMAPictureInPicturyProxy
. Đối tượng proxy này chuyển tiếp trên tất cảAVPictureinPictureControllerDelegate
tin nhắn đế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 chế độ hỗ trợ Hình trong hình. Xin lưu ý rằng bạn cũng phải duy trì một tay cầm cục bộ cho AVPlayerLayer.