Нативная реклама

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

Когда загружается нативное объявление, ваше приложение получает объект объявления, содержащий его ресурсы, и за их отображение отвечает приложение, а не Google Mobile Ads SDK.

Грубо говоря, успешная реализация нативной рекламы состоит из двух частей: загрузка рекламы с помощью SDK и последующее отображение рекламного контента в вашем приложении.

На этой странице показано, как использовать SDK для загрузки нативной рекламы .

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

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

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

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

ca-app-pub-3940256099942544/3986624511

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

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

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

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

Инициализируйте загрузчик рекламы

Прежде чем вы сможете загрузить рекламу, вам необходимо инициализировать загрузчик рекламы. Следующий код демонстрирует, как инициализировать GADAdLoader :

Быстрый

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    // The UIViewController parameter is optional.
    rootViewController: rootViewController,
    adTypes: [ .native ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Цель-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    // The UIViewController parameter is nullable.
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

Вам понадобится идентификатор рекламного блока (вы можете использовать тестовый идентификатор), константы для передачи в массив adTypes , чтобы указать, какие собственные форматы вы хотите запросить, а также любые параметры, которые вы хотите установить в параметре options . Список возможных значений параметра options можно найти на странице «Настройка параметров нативной рекламы» .

Массив adTypes должен содержать эту константу:

Реализуйте делегат загрузчика рекламы

Делегату загрузчика рекламы необходимо реализовать протоколы, специфичные для вашего типа объявления. Для нативной рекламы протокол GADNativeAdLoaderDelegate включает сообщение, которое отправляется делегату при загрузке нативной рекламы.

Быстрый

public func adLoader(_ adLoader: GADAdLoader,
            didReceive nativeAd: GADNativeAd)

Цель-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd;

Запросить рекламу

После инициализации вашего GADAdLoader вызовите его метод loadRequest: чтобы запросить рекламу:

Быстрый

adLoader.load(GADRequest())

Цель-C

[self.adLoader loadRequest:[GADRequest request]];

Метод loadRequest: в GADAdLoader принимает те же объекты GADRequest что и баннеры и межстраничные объявления. Вы можете использовать объекты запроса для добавления информации о таргетинге , как и в случае с другими типами объявлений.

Загрузите несколько объявлений (необязательно)

Чтобы загрузить несколько объявлений в одном запросе, установите объект GADMultipleAdsAdLoaderOptions при инициализации GADAdLoader .

Быстрый

let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    // The UIViewController parameter is optional.
    rootViewController: self,
    adTypes: [ .native ],
    options: [ multipleAdOptions ])

Цель-C

GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
    [[GADMultipleAdsAdLoaderOptions alloc] init];
multipleAdsOptions.numberOfAds = 5;
self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    // The UIViewController parameter is nullable.
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ multipleAdsOptions ]];

Количество объявлений на запрос ограничено пятью, и не гарантируется, что SDK вернет точное количество запрошенных объявлений.

Все возвращенные объявления Google будут отличаться друг от друга, однако уникальность объявлений из зарезервированных ресурсов или объявлений сторонних покупателей не гарантируется.

Не используйте класс GADMultipleAdsAdLoaderOptions , если вы используете медиацию, поскольку запросы на несколько нативных объявлений в настоящее время не работают для идентификаторов рекламных блоков, настроенных для медиации.

Определение момента завершения загрузки

После того как приложение вызывает loadRequest: , оно может получить результаты запроса, используя вызовы:

Запрос одного объявления приведет к одному вызову одного из этих методов.

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

Кроме того, GADAdLoaderDelegate предлагает обратный вызов adLoaderDidFinishLoading . Этот метод делегата указывает, что загрузчик объявлений завершил загрузку объявлений, и по запросу не будет сообщаться о других объявлениях или ошибках. Вот пример того, как его использовать при одновременной загрузке нескольких нативных объявлений:

Быстрый

class ViewController: UIViewController, GADNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdOptions.numberOfAds = 5;
    adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
        // The UIViewController parameter is optional.
        rootViewController: rootViewController,
        adTypes: [ .native ],
        options: [ multipleAdOptions ])

    adLoader.delegate = self
    adLoader.load(GADRequest())
  }

  func adLoader(_ adLoader: GADAdLoader,
       didReceive nativeAd: GADNativeAd) {
    // A native ad has loaded, and can be displayed.
  }

  func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
    // The adLoader has finished loading ads, and a new request can be sent.
  }

}

Цель-C

@interface ViewController () <GADNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;
  self.adLoader = [[GADAdLoader alloc]
        initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
      // The UIViewController parameter is nullable.
      rootViewController:rootViewController
                 adTypes:@[ GADAdLoaderAdTypeNative ]
                 options:@[ multipleAdsOptions ]];

  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd {
  // A native ad has loaded, and can be displayed.
}

- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}

@end

Обработка неудачных запросов

Вышеупомянутые протоколы расширяют протокол GADAdLoaderDelegate , который определяет сообщение, отправляемое, когда реклама не загружается.

Быстрый

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: NSError)

Цель-C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(NSError *)error;

Получайте уведомления о событиях, связанных с нативной рекламой

Чтобы получать уведомления о событиях, связанных с взаимодействием с нативной рекламой, установите свойство делегата нативной рекламы:

Быстрый

nativeAd.delegate = self

Цель-C

nativeAd.delegate = self;

Затем реализуйте GADNativeAdDelegate для получения следующих вызовов делегатов:

Быстрый

func nativeAdDidRecordImpression(_ nativeAd: GADNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADNativeAd) {
  // The native ad will cause the app to become inactive and
  // open a new app.
}

Цель-C

- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd {
  // The native ad will cause the app to become inactive and
  // open a new app.
}

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

Следуйте этим правилам при загрузке рекламы.

  • Приложения, использующие нативную рекламу в списке, должны предварительно кэшировать список рекламы.

  • При предварительном кэшировании рекламы очистите кеш и перезагрузите его через час.

  • Не вызывайте loadRequest: снова для GADAdLoader до тех пор, пока предыдущий запрос не завершит загрузку, как указано в adLoaderDidFinishLoading: .

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

  • Уничтожайте нативную рекламу, когда она больше не используется.

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

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