Межстраничные объявления

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

Полноэкранная реклама — это полноэкранная реклама, которая закрывает интерфейс приложения до тех пор, пока пользователь её не закроет. Обычно она отображается в естественных переходных точках в процессе работы приложения, например, между действиями или во время паузы между уровнями в игре. Когда приложение показывает полноэкранную рекламу, у пользователя есть выбор: нажать на неё и продолжить просмотр или закрыть её и вернуться в приложение. Пример .

В этом руководстве показано, как интегрировать полноэкранную рекламу в приложение iOS.

Предпосылки

Всегда проверяйте с помощью тестовых объявлений

При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.

Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для полноэкранной рекламы iOS:
/21775744923/example/interstitial

Он специально настроен для возврата тестовых объявлений при каждом запросе, и вы можете использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой идентификатор рекламного блока перед публикацией приложения.

Дополнительную информацию о работе тестовых объявлений Mobile Ads SDK см. в разделе Тестовые объявления .

Выполнение

Основные шаги по интеграции полноэкранной рекламы:

  1. Загрузить объявление.
  2. Зарегистрируйтесь для получения обратных звонков.
  3. Покажите объявление.

Загрузить объявление

Загрузка рекламы осуществляется с помощью метода load(adUnitID:request) класса GAMInterstitialAd .

Быстрый

fileprivate func loadInterstitial() async {
  do {
    interstitial = try await AdManagerInterstitialAd.load(
      with: "/21775744923/example/interstitial", request: AdManagerRequest())
    interstitial?.fullScreenContentDelegate = self
  } catch {
    print("Failed to load interstitial ad with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, FullScreenContentDelegate {
  private var interstitialAd: InterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await InterstitialAd.load(
        with: "ca-app-pub-3940256099942544/4411468910", request: Request())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
                                     request:[GAMRequest request]
                           completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
                             if (error) {
                               NSLog(@"Failed to load interstitial ad with error: %@",
                                     [error localizedDescription]);
                               return;
                             }
                             self.interstitial = ad;
                             self.interstitial.fullScreenContentDelegate = self;
                           }];

Зарегистрируйтесь для обратных звонков

Чтобы получать уведомления о событиях презентации, необходимо назначить GADFullScreenContentDelegate to the свойству fullScreenContentDelegate возвращаемого объявления:

Быстрый

interstitial?.fullScreenContentDelegate = self

SwiftUI

interstitialAd?.fullScreenContentDelegate = self

Objective-C

self.interstitial.fullScreenContentDelegate = self;

Протокол GADFullScreenContentDelegate обрабатывает обратные вызовы при успешном или неудачном показе рекламы, а также при её закрытии. Следующий код демонстрирует реализацию протокола:

Быстрый

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
  print("\(#function) called with error: \(error.localizedDescription)")
  // Clear the interstitial ad.
  interstitial = nil
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitial = nil
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)ad:(id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

GAMInterstitialAd — это одноразовый объект. Это означает, что после показа полноэкранной рекламы она не может быть показана снова. Рекомендуется загружать другую полноэкранную рекламу в методе adDidDismissFullScreenContent: объекта GADFullScreenContentDelegate , чтобы следующая полноэкранная реклама начинала загружаться сразу после закрытия предыдущей.

Показывать рекламу

Вставные объявления следует показывать во время естественных пауз в работе приложения. Хорошим примером служат паузы между уровнями игры или после того, как пользователь выполнил задание.

Быстрый

ad.present(from: self!)

SwiftUI

Прослушивайте события пользовательского интерфейса в представлении, чтобы определить, когда показывать рекламу.

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

Представьте рекламное объявление из модели представления:

func showAd() {
  guard let interstitialAd = interstitialAd else {
    return print("Ad wasn't ready.")
  }

  interstitialAd.present(from: nil)
}

Objective-C

[self.interstitial presentFromRootViewController:self];

Лучшие практики

Подумайте, является ли полноэкранная реклама подходящим типом рекламы для вашего приложения.
Полосатая реклама лучше всего работает в приложениях с естественными точками перехода. Завершение задачи в приложении, например, публикация изображения или прохождение уровня в игре, создаёт такую точку. Поскольку пользователь ожидает перерыва в действии, легко показать полноэкранную рекламу, не прерывая его взаимодействие с пользователем. Обязательно продумайте, на каких этапах рабочего процесса приложения вы будете показывать полноэкранную рекламу и как, скорее всего, отреагирует пользователь.
Не забудьте приостановить действие при отображении рекламного объявления.
Существует ряд различных типов полноэкранной рекламы: текстовая, графическая, видео и другие. Важно убедиться, что при отображении полноэкранной рекламы приложение также приостанавливает использование некоторых ресурсов, чтобы реклама могла ими воспользоваться. Например, при вызове полноэкранной рекламы обязательно приостановите воспроизведение звука в приложении. Вы можете возобновить воспроизведение звука в обработчике событий adDidDismissFullScreenContent: который будет вызван после завершения взаимодействия пользователя с рекламой. Кроме того, рассмотрите возможность временной остановки любых ресурсоёмких вычислительных задач (например, игрового цикла) на время отображения рекламы. Это гарантирует, что пользователь не столкнётся с медленной или зависшей графикой, а также с подтормаживанием видео.
Уделите достаточно времени загрузке.
Важно не только показывать полноэкранную рекламу в подходящее время, но и не допускать необходимости ожидания её загрузки. Загрузка рекламы заранее, до её показа, гарантирует, что ваше приложение будет иметь полностью загруженную полноэкранную рекламу, готовую к показу.
Не перегружайте пользователя рекламой.
Хотя увеличение частоты показа полноэкранной рекламы в вашем приложении может показаться отличным способом увеличить доход, это также может ухудшить пользовательский опыт и снизить CTR. Убедитесь, что пользователи не будут отвлекаться так часто, чтобы не потерять возможность пользоваться вашим приложением.
Не используйте обратный вызов завершения загрузки для показа промежуточной рекламы.
Это может негативно сказаться на пользовательском опыте. Вместо этого предварительно загрузите объявление до его показа. Затем проверьте метод canPresentFromRootViewController:error: объекта GAMInterstitialAd , чтобы узнать, готово ли оно к показу.

Примеры на GitHub

Посмотрите полные примеры полноэкранной рекламы на предпочитаемом вами языке:

Следующие шаги