Полноэкранная реклама — это полноэкранная реклама, которая закрывает интерфейс приложения до тех пор, пока пользователь её не закроет. Обычно она отображается в естественных переходных точках в процессе работы приложения, например, между действиями или во время паузы между уровнями в игре. Когда приложение показывает полноэкранную рекламу, у пользователя есть выбор: нажать на неё и продолжить просмотр или закрыть её и вернуться в приложение. Пример .
В этом руководстве показано, как интегрировать полноэкранную рекламу в приложение iOS.
Предпосылки
- Заполните руководство по началу работы .
Всегда проверяйте с помощью тестовых объявлений
При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.
 Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для полноэкранной рекламы iOS:
 /21775744923/example/interstitial
Он специально настроен для возврата тестовых объявлений при каждом запросе, и вы можете использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой идентификатор рекламного блока перед публикацией приложения.
Дополнительную информацию о работе тестовых объявлений Mobile Ads SDK см. в разделе Тестовые объявления .
Выполнение
Основные шаги по интеграции полноэкранной рекламы:
- Загрузить объявление.
- Зарегистрируйтесь для получения обратных звонков.
- Покажите объявление.
Загрузить объявление
 Загрузка рекламы осуществляется с помощью метода 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 свойству 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
Посмотрите полные примеры полноэкранной рекламы на предпочитаемом вами языке:
Следующие шаги
- Узнайте больше о правилах таргетинга рекламы и межстраничной рекламы .
- Узнайте больше о конфиденциальности пользователей .