Объявления типа "Картинка в картинке" показываются в плавающем окне, которое всегда находится поверх контента на экране, например статей, фидов или игрового процесса. Этот формат позволяет пользователям взаимодействовать с приложением, пока объявление остаётся видимым. Этот формат позволяет показывать объявления, которые не занимают весь экран.
В этом руководстве рассказывается, как запрашивать и показывать в приложении объявления в режиме "Картинка в картинке", используя Google Mobile Ads SDK.
Подготовка
Прежде чем продолжить, выполните следующие действия:
Установите версию Google Mobile Ads SDK
13.10.0или более позднюю.Включите тестовые объявления и используйте следующий идентификатор тестового рекламного блока:
/21775744923/example/picture-in-picture
Как загрузить объявление
Чтобы загрузить объект GADPictureInPictureAd, создайте запрос объявления и вызовите метод load:
Swift
Замените adUnitID идентификатором рекламного блока.
Objective-C
Замените kAdUnitID идентификатором рекламного блока.
Показ объявления
Чтобы показать объявление в режиме "Картинка в картинке", настройте параметры этого режима и вызовите метод show. В следующем примере задается позиция объявления по умолчанию и область показа на экране:
Swift
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 показывает плавающее окно с объявлением в правом нижнем углу экрана при первом показе или в последнем известном положении, если оно уже показывалось. Чтобы настроить место показа объявления, задайте позицию в параметрах режима "Картинка в картинке". В следующем примере показано, как разместить элемент поверх контента в верхнем левом углу экрана:
Swift
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 отклоняет объявление, когда иерархия View экрана организатора больше не хранится в памяти. Чтобы объявление оставалось видимым после того, как экран хоста будет удален из памяти, задайте область показа на уровне приложения:
Swift
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; }
Подробнее о том, как сделать объявление видимым на разных экранах…
Как задать обратный вызов события объявления
Чтобы обрабатывать события жизненного цикла рекламы в режиме "картинка в картинке", задайте обратный вызов события для объявления до его показа. Этот метод обратного вызова сообщает о стандартных событиях, таких как клики и показы. Этот обратный вызов также сообщает о событиях, связанных с режимом "Картинка в картинке", например о том, когда объявление показывается или скрывается:
Swift
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. Этот метод вызывает обратный вызов события скрытия объявления:
Swift
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]; }
Как удалить рекламные ресурсы
Чтобы избежать утечек памяти, удалите ссылку на объект объявления, когда приложение перестанет его использовать. Например, когда ваше приложение перестает показывать объявление или взаимодействовать с ним. Для объявлений с областью действия на экране удалите ссылку, когда приложение удалит из памяти экран, на котором показывается объявление. Для объявлений, относящихся к приложению, сохраняйте ссылку на объявление, пока пользователь переходит между экранами, и удаляйте ссылку, когда пользователь закрывает объявление:
Swift
private func cleanUpPictureInPictureAd() { pipAd?.hide() pipAd = nil }
Objective-C
- (void)cleanUpPictureInPictureAd { [self.pipAd hide]; self.pipAd = nil; }
Как сделать так, чтобы объявление было видно на разных экранах
Если задать в качестве области показа приложение, то реклама в режиме "картинка в картинке" будет видна, даже если приложение удалит из памяти экран, на котором она показывается. Чтобы пользователь мог взаимодействовать с объявлением или закрыть его, когда он переходит с основного экрана, приложению необходимо сохранить доступ к объявлению в режиме "Картинка в картинке". Мы рекомендуем хранить объявление в одноэлементном объекте на уровне приложения или в общем менеджере состояний, а не в переменной экземпляра одного экрана.
Примеры того, как обеспечить видимость объявления на разных экранах, можно найти в следующих приложениях: