Внедрить рекламу в режиме «картинка в картинке» (бета-версия)

Выберите платформу: Android iOS

Картинка в картинке

Реклама в режиме «картинка в картинке» (PiP) отображается в плавающем окне, которое остается поверх контента на экране, например, статей, лент новостей или игрового процесса. Этот формат позволяет пользователям взаимодействовать с вашим приложением, пока реклама остается видимой. Чтобы показывать рекламу, которая не занимает весь экран, выберите этот формат. Узнайте больше о рекламе в режиме «картинка в картинке» .

В этом руководстве рассматривается запрос и отображение рекламных объявлений в режиме «картинка в картинке» в вашем приложении с помощью Google Mobile Ads SDK .

Прежде чем начать

Прежде чем продолжить, выполните следующие действия:

Загрузить рекламу

Для загрузки объекта GADPictureInPictureAd создайте запрос на показ рекламы и вызовите метод load :

Быстрый

private func loadPictureInPictureAd() async {
  do {
    // Capture the PictureInPictureAd reference for later use.
    pipAd = try await PictureInPictureAd.load(
      with: adUnitID, request: Request())
    // Set the delegate to be notified of ad events.
    pipAd?.delegate = self
  } catch {
    print(
      "Picture-in-Picture ad failed to load: \(error.localizedDescription)")
  }
}

Замените adUnitID на идентификатор вашего рекламного блока.

Objective-C

- (void)loadPictureInPictureAd {
  GADRequest *request = [GADRequest request];

  [GADPictureInPictureAd
       loadWithAdUnitID:kAdUnitID
                request:request
      completionHandler:^(GADPictureInPictureAd *_Nullable ad, NSError *_Nullable error) {
        if (error) {
          NSLog(@"Picture-in-Picture ad failed to load: %@", error);
          return;
        }
        // Capture the PictureInPictureAd reference for later use.
        self.pipAd = ad;
        // Set the delegate to be notified of ad events.
        self.pipAd.delegate = self;
      }];
}

Замените 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;
}

Обеспечьте видимость рекламы на всех экранах.

Если вы установите область отображения на приложение, реклама в режиме «картинка в картинке» останется видимой даже после удаления основного экрана из памяти. Для взаимодействия с рекламой или её закрытия при переходе пользователя с основного экрана, ваше приложение должно сохранять доступ к рекламе в режиме «картинка в картинке». Мы рекомендуем хранить рекламу в синглтоне на уровне приложения или в общем менеджере состояний, а не в переменной экземпляра отдельного экрана.