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

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

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

Предварительные условия

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

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

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

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

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

Выполнение

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

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

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

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

Быстрый

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
  private var interstitialAd: GADInterstitialAd?

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

Цель-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

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

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

Чтобы получать уведомления о событиях презентации, необходимо реализовать протокол GADFullScreenContentDelegate и назначить его свойству fullScreenContentDelegate возвращаемого объявления. Протокол GADFullScreenContentDelegate обрабатывает обратные вызовы при успешном или неудачном показе объявления и при его отклонении. Следующий код показывает, как реализовать протокол и назначить его объявлению:

Быстрый

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
        interstitial?.fullScreenContentDelegate = self
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

SwiftUI

Назначьте свойство fullScreenContentDelegate возвращаемому объявлению:

interstitialAd?.fullScreenContentDelegate = self

Реализуйте протокол:

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

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

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

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

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

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

Цель-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request: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;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

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

Покажите объявление

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

Быстрый

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

// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)

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(fromRootViewController: nil)
}

Цель-C

if (self.interstitial) {
  // The UIViewController parameter is nullable.
  [self.interstitial presentFromRootViewController:nil];
} else {
  NSLog(@"Ad wasn't ready");
}

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

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

Примеры на GitHub

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

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