Реклама в режиме «картинка в картинке» (PiP) отображается в плавающем окне, которое остается поверх контента на экране, например, статей, лент новостей или игрового процесса. Этот формат позволяет пользователям взаимодействовать с вашим приложением, пока реклама остается видимой. Чтобы показывать рекламу, которая не занимает весь экран, выберите этот формат. Узнайте больше о рекламе в режиме «картинка в картинке» .
В этом руководстве рассматривается запрос и отображение рекламных объявлений в режиме «картинка в картинке» в вашем приложении с помощью Google Mobile Ads SDK .
Прежде чем начать
Прежде чем продолжить, выполните следующие действия:
Установите Google Mobile Ads SDK версии
13.10.0или более поздней.Включите тестовые объявления и используйте следующий идентификатор тестового рекламного блока:
ca-app-pub-3940256099942544/8810945611
Загрузить рекламу
Для загрузки объекта GADPictureInPictureAd создайте запрос на показ рекламы и вызовите метод load :
Быстрый
Замените adUnitID на идентификатор вашего рекламного блока.
Objective-C
Замените kAdUnitID на идентификатор вашего рекламного блока.
Показать рекламу
Чтобы отобразить рекламное объявление в режиме «картинка в картинке» на экране, настройте параметры этого режима и вызовите метод show . В следующем примере устанавливается положение объявления по умолчанию и область отображения на экране:
Быстрый
private func showPictureInPictureAd() { // Use the loaded PictureInPictureAd instance. guard let pipAd else { print("No ad to show.") return } let options = PictureInPictureAdOptions() // Uses the Google Mobile Ads SDK's default screen position. options.position = .default // Binds the ad lifecycle to the host screen. options.presentationScope = .screen pipAd.show(with: options) }
Objective-C
- (void)showPictureInPictureAd { // Use the loaded PictureInPictureAd instance. if (!self.pipAd) { NSLog(@"No ad to show."); return; } GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Uses the Google Mobile Ads SDK's default screen position. options.position = GADPictureInPictureAdPositionDefault; // Binds the ad lifecycle to the host screen. options.presentationScope = GADPictureInPictureAdPresentationScopeScreen; [self.pipAd showWithOptions:options]; }
Установить положение
По умолчанию Google Mobile Ads SDK отображает рекламу в режиме «картинка в картинке» в правом нижнем углу экрана при первом показе или в последнем известном месте, если реклама была показана ранее. Чтобы настроить местоположение рекламы, задайте его в параметрах режима «картинка в картинке». В следующем примере местоположение рекламы устанавливается поверх контента в левом верхнем углу экрана:
Быстрый
private func createTopLeftPositionOptions() -> PictureInPictureAdOptions { let options = PictureInPictureAdOptions() // Sets the ad position to the top-left corner of the screen. options.position = .topLeft return options }
Objective-C
- (GADPictureInPictureAdOptions *)createTopLeftPositionOptions { GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Sets the ad position to the top-left corner of the screen. options.position = GADPictureInPictureAdPositionTopLeft; return options; }
Список всех доступных вакансий смотрите на GADPictureInPictureAdPosition .
Установите область презентации
По умолчанию Google Mobile Ads SDK привязывает рекламное объявление в режиме «картинка в картинке» к текущему основному экрану. Google Mobile Ads SDK закрывает объявление, когда иерархия представлений основного экрана больше не находится в памяти. Чтобы объявление оставалось видимым после удаления основного экрана из памяти, установите область отображения в соответствии с приложением:
Быстрый
private func createApplicationScopedOptions() -> PictureInPictureAdOptions { let options = PictureInPictureAdOptions() // Keeps the ad visible beyond the host screen's lifecycle. options.presentationScope = .application return options }
Objective-C
- (GADPictureInPictureAdOptions *)createApplicationScopedOptions { GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Keeps the ad visible beyond the host screen's lifecycle. options.presentationScope = GADPictureInPictureAdPresentationScopeApplication; return options; }
Для получения дополнительной информации см. раздел «Обеспечение видимости рекламы на разных экранах» .
Настройте функцию обратного вызова для события показа рекламы.
Для обработки событий жизненного цикла объявления в режиме «картинка в картинке» установите обратный вызов события для вашего объявления перед его отображением. Этот обратный вызов сообщает о стандартных событиях, таких как клики и показы. Этот обратный вызов также сообщает о событиях, специфичных для режима «картинка в картинке», например, когда объявление отображается или скрывается:
Быстрый
func pictureInPictureAdDidShow(_ pictureInPictureAd: PictureInPictureAd) { print("Picture-in-Picture ad shown.") } func pictureInPictureAdDidHide(_ pictureInPictureAd: PictureInPictureAd) { print("Picture-in-Picture ad hidden.") } func pictureInPictureAdDidFailToShow( _ pictureInPictureAd: PictureInPictureAd, error: Error ) { print("Picture-in-Picture ad failed to show: \(error.localizedDescription)") } func pictureInPictureAdDidRecordImpression( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad recorded an impression.") } func pictureInPictureAdDidRecordClick( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad recorded a click.") } func pictureInPictureAdWillPresentScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad will present screen.") } func pictureInPictureAdWillDismissScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad will dismiss screen.") } func pictureInPictureAdDidDismissScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad dismissed screen.") }
Objective-C
- (void)pictureInPictureAdDidShow:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad shown."); } - (void)pictureInPictureAdDidHide:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad hidden."); } - (void)pictureInPictureAdDidFailToShow:(GADPictureInPictureAd *)pictureInPictureAd withError:(NSError *)error { NSLog(@"Picture-in-Picture ad failed to show: %@", error); } - (void)pictureInPictureAdDidRecordImpression:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad recorded an impression."); } - (void)pictureInPictureAdDidRecordClick:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad recorded a click."); } - (void)pictureInPictureAdWillPresentScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad will present screen."); } - (void)pictureInPictureAdWillDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad will dismiss screen."); } - (void)pictureInPictureAdDidDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad dismissed screen."); }
Скрыть рекламу
Чтобы убрать плавающую рекламу с экрана, вызовите метод hide . Этот метод вызывает функцию обратного вызова события скрытия рекламы:
Быстрый
private func hidePictureInPictureAd() { // Use the loaded PictureInPictureAd instance. guard let pipAd else { print("No ad to hide.") return } pipAd.hide() }
Objective-C
- (void)hidePictureInPictureAd { // Use the loaded PictureInPictureAd instance. if (!self.pipAd) { NSLog(@"No ad to hide."); return; } [self.pipAd hide]; }
Очистка рекламных ресурсов
Во избежание утечек памяти удаляйте ссылку на объект рекламы, когда ваше приложение закончит использовать рекламу. Например, когда ваше приложение больше не отображает рекламу и не взаимодействует с ней. Для рекламы, ограниченной экраном, удаляйте ссылку, когда ваше приложение удаляет основной экран из памяти. Для рекламы, ограниченной приложением, сохраняйте ссылку на рекламу, пока пользователь перемещается между экранами, и удаляйте ссылку, когда пользователь закрывает рекламу.
Быстрый
private func cleanUpPictureInPictureAd() { pipAd?.hide() pipAd = nil }
Objective-C
- (void)cleanUpPictureInPictureAd { [self.pipAd hide]; self.pipAd = nil; }
Обеспечьте видимость рекламы на всех экранах.
Если вы установите область отображения на приложение, реклама в режиме «картинка в картинке» останется видимой даже после удаления основного экрана из памяти. Для взаимодействия с рекламой или её закрытия при переходе пользователя с основного экрана, ваше приложение должно сохранять доступ к рекламе в режиме «картинка в картинке». Мы рекомендуем хранить рекламу в синглтоне на уровне приложения или в общем менеджере состояний, а не в переменной экземпляра отдельного экрана.