Native Ads – Custom Rendering

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

Из этого руководства вы узнаете, как с помощью Google Mobile Ads SDK реализовать нативные объявления DFP в приложении для iOS, а также получите другую полезную информацию.

Требования

Для изучения этого руководства требуется опыт использования Google Mobile Ads SDK. Если у вас его нет, обратитесь к руководству по началу работы.

Что такое нативные объявления

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

Стандартные форматы нативных объявлений

Есть два стандартных формата нативной рекламы: объявления, ориентированные на установку приложения, и обычные объявления. Первые представлены классом GADNativeAppInstallAd, вторые – классом GADNativeContentAd. Компоненты нативного объявления содержатся в экземплярах этих классов.

Собственные форматы нативных объявлений

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

Собственные форматы также называют собственными шаблонами, потому что издатели сами создают основу для объявлений – списки с указанием названий компонентов и их типов. Это станет понятно в ходе изучения настоящего руководства, а пока запомните: "собственные шаблоны объявлений" и "собственные форматы нативных объявлений" – это одно и то же.

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

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

Инициализация объекта GADAdLoader

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

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"/6499/example/native"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

Swift

adLoader = GADAdLoader(adUnitID: "/6499/example/native",
    rootViewController: self,
    adTypes: [ ... ad type constants ... ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Параметр-массив adTypes позволяет приложению передавать константы, которые указывают, какие нативные форматы нужно запросить. В массиве должна быть одна или несколько следующих констант:

  • kGADAdLoaderAdTypeNativeAppInstall
  • kGADAdLoaderAdTypeNativeContent
  • kGADAdLoaderAdTypeNativeCustomTemplate

Запрос нативного объявления

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

Objective-C

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

Swift

adLoader.loadRequest(DFPRequest())

Метод loadRequest в классе GADAdLoader принимает те же объекты DFPRequest, что и баннеры и межстраничные объявления. При помощи этих объектов можно добавлять информацию о таргетинге так же, как в объявления других типов.

Один объект GADAdLoader может отправлять несколько запросов, но не сразу, а по очереди. Чтобы отправить запрос с помощью GADAdLoader, нужно дождаться завершения предыдущего и лишь потом вызывать loadRequest. Если нужно отправить несколько запросов сразу, вы всегда можете использовать несколько объектов GADAdLoader.

Протоколы GADAdLoaderDelegate

Для каждого запрошенного шаблона нативного объявления делегат загрузчика объявлений должен реализовать соответствующий протокол.

GADNativeAppInstallAdLoaderDelegate

Этот протокол содержит сообщение, которое отправляется делегату после загрузки объявления, ориентированного на установку приложения.

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAppInstallAd:(GADNativeAppInstallAd *)nativeAppInstallAd;

Swift

public func adLoader(adLoader: GADAdLoader!,
    didReceiveNativeAppInstallAd nativeAppInstallAd: GADNativeAppInstallAd!)

GADNativeContentAdLoaderDelegate

Этот протокол определяет сообщение, отправляемое после загрузки обычного объявления.

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeContentAd:(GADNativeContentAd *)nativeContentAd;

Swift

public func adLoader(adLoader: GADAdLoader!,
    didReceiveNativeContentAd nativeContentAd: GADNativeContentAd!)

Обработка сбоя при запросе

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

Objective-C

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

Swift

public func adLoader(adLoader: GADAdLoader!,
    didFailToReceiveAdWithError error: GADRequestError!)

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

Параметры нативного объявления

Последний параметр, который указывается при создании упомянутого выше объекта GADAdLoader, – необязательный массив объектов:

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"/6499/example/native"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];

Swift

adLoader = GADAdLoader(adUnitID: "/6499/example/native",
    rootViewController: self,
    adTypes: [ ... ad type constants ... ],
    options: [ ... ad loader options objects ... ])

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

Свойства объекта GADNativeAdImageAdLoaderOptions перечислены ниже.

disableImageLoading Графические компоненты нативных объявлений возвращаются через экземпляры класса GADNativeAdImage, который содержит свойства image и imageURL. Если параметру disableImageLoading присвоено значение false (по умолчанию), SDK будет получать графические компоненты автоматически и присваивать значения свойствам image и imageURL вместо вас. Если же ему присвоено значение true, SDK присвоит значение только свойству imageURL, что позволит вам скачивать изображения по своему усмотрению.

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

  • GADNativeAdImageAdLoaderOptionsOrientationAny
  • GADNativeAdImageAdLoaderOptionsOrientationLandscape
  • GADNativeAdImageAdLoaderOptionsOrientationPortrait

Если этот метод не вызывается, используется значение по умолчанию GADNativeAdImageAdLoaderOptionsOrientationAny.

shouldRequestMultipleImages Некоторые графические компоненты содержат не одно изображение, а их последовательность. Если для этого свойства задано значение true, приложение может показывать все изображения любого компонента, содержащего несколько графических объектов. В противном случае (значение false, которое используется по умолчанию) SDK предоставит для любых компонентов с сериями изображений только первое изображение.

Если при инициализации GADAdLoader объекты GADAdLoaderOptions не передаются, для каждого параметра применяется значение по умолчанию.

GADNativeAdViewOptions

Класс GADNativeAdViewAdOptions содержит свойство preferredAdChoicesPosition, с помощью которого издатели могут указывать местоположение значка "Выбор рекламы". Он может показываться в любом углу объявления, по умолчанию – в правом верхнем: GADAdChoicesPositionTopRightCorner.

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

Objective-C

GADNativeAdViewAdOptions *adViewOptions = [[GADNativeAdViewAdOptions alloc] init];
adViewOptions.preferredAdChoicesPosition = GADAdChoicesPositionTopLeftCorner;
self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"/6499/example/native"
    rootViewController:self
               adTypes:@[ kGADAdLoaderAdTypeNativeAppInstall, kGADAdLoaderAdTypeNativeContent ]
               options:@[ adViewOptions ]];

Swift

let adViewOptions = GADNativeAdViewAdOptions()
adViewOptions.preferredAdChoicesPosition = .TopLeftCorner
adLoader = GADAdLoader(adUnitID: "/6499/example/native",
    rootViewController: self,
    adTypes: [ kGADAdLoaderAdTypeNativeAppInstall, kGADAdLoaderAdTypeNativeContent],
    options: [ adViewOptions ])

Когда запрашивать объявления

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

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

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

При загрузке нативного объявления приложение получает объект с этим объявлением через одно из сообщений протокола GADAdLoaderDelegate. Далее показ объявления зависит уже от приложения (оно может выполнить его не сразу). В SDK есть полезные ресурсы, которые позволяют упростить показ нативных объявлений стандартных форматов.

Классы представления объявления

Для стандартных шаблонов используются два класса представления объявления: GADNativeAppInstallAdView – для рекламы, ориентированной на установку приложения, и GADNativeContentAdView – для обычных объявлений. Оба они относятся к классу UIViews. Например, один объект GADNativeAppInstallAdView может показать один экземпляр объявления GADNativeAppInstallAd. Каждый объект UIView, используемый для показа компонентов этого объявления, должен наследоваться от объекта GADNativeAppInstallAdView.

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

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

  • учитывать клики;
  • учитывать показы (когда первый пиксель появляется на экране);
  • отображать значок "Выбор рекламы" в нативных креативах для заполнения.

Значок "Выбор рекламы"

При непрямых продажах нативных объявлений (через Ad Exchange, AdSense или в качестве объявлений DFP для заполнения) SDK добавляет значок "Выбор рекламы". Поэтому мы рекомендуем оставлять для него место в нужном углу нативного объявления. Также убедитесь, что значок не сливается с контентом, в котором он размещен. Подробнее…

Пример кода

Рассмотрим на примере, как показывать нативные объявления с помощью представлений, загружаемых динамически из файлов XIB. Такой подход может пригодиться при использовании объектов GADAdLoaders, настроенных на запрос нескольких форматов.

Создание макета объектов UIView в файле XIB

Прежде всего нужно задать схему размещения объектов UIViews, которые будут показывать компоненты нативных объявлений. Как и при создании других файлов XIB, такая разметка выполняется в приложении Interface Builder. Вот пример макета для объявления, ориентированного на установку приложения:

А это пример макета для обычного объявления:

Обратите внимание на значения в поле Custom Class (Пользовательский класс) справа вверху на обеих иллюстрациях: GADNativeAppInstallAdView и GADNativeContentAdView. Это классы представления объявления, с помощью которых выполняется показ объектов GADNativeAppInstallAd и GADNativeContentAd. При показе стандартных шаблонов нативной рекламы нужно выбрать класс представления, который соответствует формату объявления.

Связывание выходов с представлениями

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

Связь с объектом UIViews для обычного объявления устанавливается так:

На панели настроек выходы в GADNativeAppInstallAdView и GADNativeContentAdView связаны объектами UIViews, макет которых задан в Interface Builder. Таким образом SDK определяет, какой объект UIView показывает тот или иной компонент нативного объявления. Также нужно помнить, что эти выходы соответствуют представлениям, на которые можно нажать в объявлении.

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

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

Objective-C

#pragma mark GADNativeAppInstallAdLoaderDelegate implementation

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAppInstallAd:(GADNativeAppInstallAd *)nativeAppInstallAd {
  // Create and place ad in view hierarchy.
  GADNativeAppInstallAdView *appInstallAdView =
      [[[NSBundle mainBundle] loadNibNamed:@"NativeAppInstallAdView"
                                     owner:nil
                                   options:nil] firstObject];
  // TODO: Make sure to add the GADNativeAppInstallAdView to the view hierarchy.

  // Associate the app install ad view with the app install ad object. This is required to make the
  // ad clickable.
  appInstallAdView.nativeAppInstallAd = nativeAppInstallAd;

  // Populate the app install ad view with the app install ad assets.
  // Some assets are guaranteed to be present in every app install ad.
  ((UILabel *)appInstallAdView.headlineView).text = nativeAppInstallAd.headline;
  ((UIImageView *)appInstallAdView.iconView).image = nativeAppInstallAd.icon.image;
  ((UILabel *)appInstallAdView.bodyView).text = nativeAppInstallAd.body;
  ((UIImageView *)appInstallAdView.imageView).image =
      ((GADNativeAdImage *)[nativeAppInstallAd.images firstObject]).image;
  [((UIButton *)appInstallAdView.callToActionView)setTitle:nativeAppInstallAd.callToAction
                                                  forState:UIControlStateNormal];

  // Other assets are not, however, and should be checked first.
  if (nativeAppInstallAd.starRating) {
    ((UIImageView *)appInstallAdView.starRatingView).image =
        [self imageForStars:nativeAppInstallAd.starRating];
    appInstallAdView.starRatingView.hidden = NO;
  } else {
    appInstallAdView.starRatingView.hidden = YES;
  }

  if (nativeAppInstallAd.store) {
    ((UILabel *)appInstallAdView.storeView).text = nativeAppInstallAd.store;
    appInstallAdView.storeView.hidden = NO;
  } else {
    appInstallAdView.storeView.hidden = YES;
  }

  if (nativeAppInstallAd.price) {
    ((UILabel *)appInstallAdView.priceView).text = nativeAppInstallAd.price;
    appInstallAdView.priceView.hidden = NO;
  } else {
    appInstallAdView.priceView.hidden = YES;
  }

  // In order for the SDK to process touch events properly, user interaction should be disabled on
  // all views associated with the GADNativeAppInstallAdView. Since UIButton has
  // userInteractionEnabled set to YES by default, views of this type must explicitly set
  // userInteractionEnabled to NO.
  appInstallAdView.callToActionView.userInteractionEnabled = NO;
}

Swift

// Mark: - GADNativeAppInstallAdLoaderDelegate

func adLoader(adLoader: GADAdLoader!,
    didReceiveNativeAppInstallAd nativeAppInstallAd: GADNativeAppInstallAd!) {
  // Create and place the ad in the view hierarchy.
  let appInstallAdView = NSBundle.mainBundle().loadNibNamed("NativeAppInstallAdView", owner: nil,
      options: nil).first as! GADNativeAppInstallAdView
  // TODO: Make sure to add the GADNativeAppInstallAdView to the view hierarchy.

  // Associate the app install ad view with the app install ad object. This is required to make
  // the ad clickable.
  appInstallAdView.nativeAppInstallAd = nativeAppInstallAd

  // Populate the app install ad view with the app install ad assets.
  // Some assets are guaranteed to be present in every app install ad.
  (appInstallAdView.headlineView as! UILabel).text = nativeAppInstallAd.headline
  (appInstallAdView.iconView as! UIImageView).image = nativeAppInstallAd.icon?.image
  (appInstallAdView.bodyView as! UILabel).text = nativeAppInstallAd.body
  (appInstallAdView.imageView as! UIImageView).image =
      (nativeAppInstallAd.images?.first as! GADNativeAdImage).image
  (appInstallAdView.callToActionView as! UIButton).setTitle(
      nativeAppInstallAd.callToAction, forState: UIControlState.Normal)

  // Other assets are not, however, and should be checked first.
  let starRatingView = appInstallAdView.starRatingView
  if let starRating = nativeAppInstallAd.starRating {
    (starRatingView as! UIImageView).image = imageOfStarsFromStarRating(starRating)
    starRatingView.hidden = false
  } else {
    starRatingView.hidden = true
  }

  let storeView = appInstallAdView.storeView
  if let store = nativeAppInstallAd.store {
    (storeView as! UILabel).text = store
    storeView.hidden = false
  } else {
    storeView.hidden = true
  }

  let priceView = appInstallAdView.priceView
  if let price = nativeAppInstallAd.price {
    (priceView as! UILabel).text = price
    priceView.hidden = false
  } else {
    priceView.hidden = true
  }

  // In order for the SDK to process touch events properly, user interaction should be disabled on
  // all views associated with the GADNativeAppInstallAdView. Since UIButton has
  // userInteractionEnabled set to true by default, views of this type must explicitly set
  // userInteractionEnabled to false.
  (appInstallAdView.callToActionView as! UIButton).userInteractionEnabled = false
}

Обычное объявление показывается в заданном выше представлении с помощью этого метода:

Objective-C

#pragma mark GADNativeContentAdLoaderDelegate implementation

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeContentAd:(GADNativeContentAd *)nativeContentAd {
  // Create and place ad in view hierarchy.
  GADNativeContentAdView *contentAdView =
      [[[NSBundle mainBundle] loadNibNamed:@"NativeContentAdView"
                                     owner:nil
                                   options:nil] firstObject];
  // TODO: Make sure to add the GADNativeContentAdView to the view hierarchy.

  // Associate the content ad view with the content ad object. This is required to make the ad
  // clickable.
  contentAdView.nativeContentAd = nativeContentAd;

  // Populate the content ad view with the content ad assets.
  // Some assets are guaranteed to be present in every content ad.
  ((UILabel *)contentAdView.headlineView).text = nativeContentAd.headline;
  ((UILabel *)contentAdView.bodyView).text = nativeContentAd.body;
  ((UIImageView *)contentAdView.imageView).image =
      ((GADNativeAdImage *)[nativeContentAd.images firstObject]).image;
  ((UILabel *)contentAdView.advertiserView).text = nativeContentAd.advertiser;
  [((UIButton *)contentAdView.callToActionView)setTitle:nativeContentAd.callToAction
                                               forState:UIControlStateNormal];

  // Other assets are not, however, and should be checked first.
  if (nativeContentAd.logo && nativeContentAd.logo.image) {
    ((UIImageView *)contentAdView.logoView).image = nativeContentAd.logo.image;
    contentAdView.logoView.hidden = NO;
  } else {
    contentAdView.logoView.hidden = YES;
  }

  // In order for the SDK to process touch events properly, user interaction should be disabled on
  // all views associated with the GADNativeContentAdView. Since UIButton has userInteractionEnabled
  // set to YES by default, views of this type must explicitly set userInteractionEnabled to NO.
  contentAdView.callToActionView.userInteractionEnabled = NO;
}

Swift

// Mark: - GADNativeContentAdLoaderDelegate

func adLoader(adLoader: GADAdLoader!,
    didReceiveNativeContentAd nativeContentAd: GADNativeContentAd!) {
  // Create and place the ad in the view hierarchy.
  let contentAdView = NSBundle.mainBundle().loadNibNamed("NativeContentAdView", owner: nil,
      options: nil).first as! GADNativeContentAdView
  // TODO: Make sure to add the GADNativeContentAdView to the view hierarchy.

  // Associate the content ad view with the content ad object. This is required to make the ad
  // clickable.
  contentAdView.nativeContentAd = nativeContentAd

  // Populate the content ad view with the content ad assets.
  // Some assets are guaranteed to be present in every content ad.
  (contentAdView.headlineView as! UILabel).text = nativeContentAd.headline
  (contentAdView.bodyView as! UILabel).text = nativeContentAd.body
  (contentAdView.imageView as! UIImageView).image =
      (nativeContentAd.images?.first as! GADNativeAdImage).image
  (contentAdView.advertiserView as! UILabel).text = nativeContentAd.advertiser
  (contentAdView.callToActionView as! UIButton).setTitle(
      nativeContentAd.callToAction, forState: UIControlState.Normal)

  // Other assets are not, however, and should be checked first.
  let logoView = contentAdView.logoView
  if let logoImage = nativeContentAd.logo?.image {
    (logoView as! UIImageView).image = logoImage
    logoView.hidden = false
  } else {
    logoView.hidden = true
  }

  // In order for the SDK to process touch events properly, user interaction should be disabled on
  // all views associated with the GADNativeContentAdView. Since UIButton has userInteractionEnabled
  // set to true by default, views of this type must explicitly set userInteractionEnabled to false.
  (contentAdView.callToActionView as! UIButton).userInteractionEnabled = false
}

Как видно из этих примеров кода, взаимодействие с пользователем отключается для объекта UIButton, который показывает призыв к действию. Если вы применяете объекты UIButton для показа компонентов нативных объявлений, вам также понадобится отключить для них взаимодействие с пользователем, чтобы Google Mobile Ads SDK мог получать и обрабатывать события интерфейса. Из-за этого дополнительного шага зачастую лучше избегать объектов UIButton, заменяя их на UILabel и UIImageView.

В хранилище GitHub есть примеры полного кода пользовательской обработки нативных объявлений – как обычных, так и ориентированных на установку приложения – на языках Swift и Objective-C.

Скачать пример пользовательской обработки DFP

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

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

GADNativeCustomTemplateAdLoaderDelegate

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

Objective-C

- (NSArray *)nativeCustomTemplateIDsForAdLoader:(GADAdLoader *)adLoader;

Swift

public func nativeCustomTemplateIDsForAdLoader(adLoader: GADAdLoader!) -> [AnyObject]!

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

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

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeCustomTemplateAd:(GADNativeCustomTemplateAd *)nativeCustomTemplateAd;

Swift

public func adLoader(adLoader: GADAdLoader!,
    didReceiveNativeCustomTemplateAd nativeCustomTemplateAd: GADNativeCustomTemplateAd!)

Идентификаторы шаблонов

Уникальные идентификаторы для собственных шаблонов нативных объявлений можно найти в интерфейсе DFP на вкладке Выполнение в разделе Объявления > Нативные стили.

Идентификаторы указаны под названиями шаблонов. Чтобы просмотреть данные, содержащиеся в шаблоне, нажмите на его название.

На открывшемся экране можно добавлять, изменять и удалять поля. Обратите внимание на столбец Идентификатор переменной справа. Указанные в нем идентификаторы используются для доступа к отдельным компонентам. Мы рассмотрим это подробнее в следующем разделе.

Показ собственных форматов нативных объявлений

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

  1. Поскольку класс GADNativeCustomTemplateAd должен обрабатывать любые собственные шаблоны нативной рекламы, которые вы задаете в DFP, у него нет именованных средств доступа к компонентам. Вместо этого применяются такие методы, как imageForKey: и stringForKey:, в которых в качестве аргумента выступает идентификатор переменной для поля шаблона.
  2. Для класса GADNativeCustomTemplateAd не предусмотрен специальный класс представления объявления, например GADNativeContentAdView. Вы можете использовать любой интерфейс, подходящий для вашего приложения.
  3. Поскольку отдельного класса нет, вам не нужно регистрировать представления, используемые для показа компонентов объявления.

Вот пример класса, который может показывать простые объекты GADNativeCustomTemplateAd:

MySimpleNativeAdView.h

Objective-C

@import UIKit;
@import GoogleMobileAds;

/// View representing a custom native ad format with template ID 10063170.
@interface MySimpleNativeAdView : UIView

// Weak references to this ad's asset views.
@property(weak, nonatomic) IBOutlet UILabel *headlineView;
@property(weak, nonatomic) IBOutlet UIImageView *mainImageView;
@property(weak, nonatomic) IBOutlet UILabel *captionView;

/// Populates the ad view with the custom native ad object.
- (void)populateWithCustomNativeAd:(GADNativeCustomTemplateAd *)customNativeAd;

@end

Swift

import UIKit
import GoogleMobileAds

/// Custom native ad view class with template ID 10063170.
class MySimpleNativeAdView: UIView {

  /// Weak references to this ad's asset views.
  @IBOutlet weak var headlineView: UILabel!
  @IBOutlet weak var mainImageView: UIImageView!
  @IBOutlet weak var captionView: UILabel!

  ...

  /// Populates the ad view with the custom native ad object.
  func populateWithCustomNativeAd(customNativeAd: GADNativeCustomTemplateAd) {
    ...
  }
}

MySimpleNativeAdView.m (фрагмент кода)

Objective-C

...
- (void)populateWithCustomNativeAd:(GADNativeCustomTemplateAd *)customNativeAd {
  self.customNativeAd = customNativeAd;

  // Populate the custom native ad assets.
  self.headlineView.text = [customNativeAd stringForKey:@"Headline"];
  self.mainImageView.image = [customNativeAd imageForKey:@"MainImage"].image;
  self.captionView.text = [customNativeAd stringForKey:@"Caption"];
}
...

Swift

...
func populateWithCustomNativeAd(customNativeAd: GADNativeCustomTemplateAd) {
  self.customNativeAd = customNativeAd

  // Populate the custom native ad assets.
  headlineView.text = self.customNativeAd.stringForKey("Headline")
  mainImageView.image = self.customNativeAd.imageForKey("MainImage")?.image
  captionView.text = self.customNativeAd.stringForKey("Caption")
}
...

Обработка кликов и показов для собственных форматов нативной рекламы

Если вы размещаете в приложении нативную рекламу собственных форматов, оно должно регистрировать показы и передавать события кликов в SDK.

Регистрация показов

Чтобы зарегистрировать показ объявления на основе собственного шаблона, необходимо вызвать метод recordImpression для соответствующего класса GADNativeCustomTemplateAd.

Objective-C

[myCustomTemplateAd recordImpression];

Swift

myCustomTemplateAd.recordImpression()

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

Передача данных о кликах

Чтобы сообщить SDK, что пользователь сделал клик по представлению компонента, необходимо вызвать метод performClickOnAssetWithKey:customClickHandler: для соответствующего объекта GADNativeCustomTemplateAd и передать название компонента вместе с необязательным пользовательским обработчиком кликов (подробнее об этом читайте ниже). Например, если в собственном шаблоне есть компонент под названием MainImage и вам нужно отправить данные о клике по представлению, которое соответствует этому компоненту, потребуется следующий код:

Objective-C

[myCustomTemplateAd performClickOnAssetWithKey:@"MainImage"
                            customClickHandler:^{ /* an optional block */ }];

Swift

myCustomTemplateAd.performClickOnAssetWithKey(
    assetKey: "MainImage", customClickHandler: { /* an optional closure */ })

Этот метод не нужно вызывать для каждого представления, связанного с объявлением. Если, к примеру, у вас есть другой компонент под названием Caption, который должен быть показан, но на который не будут нажимать пользователи, то приложению не нужно вызывать для представления этого компонента обработчик performClickOnAssetWithKey:customClickHandler:.

Реагирование на пользовательские действия-клики

При клике по собственному шаблону объявления SDK выполняет перечисленные ниже действия в следующем порядке:

  1. Вызывает блок (на языке Objective-C) или замыкание (closure – на языке Swift) customClickHandler, если они были заданы.
  2. Перебирает в цикле ссылки объявления на контент и открывает первую, для которой нашлось подходящее приложение.
  3. Открывает браузер и загружает веб-страницу по обычному целевому URL.

Метод performClickOnAssetWithKey:customClickHandler: принимает блок (на языке Objective-C) и замыкание (closure – на языке Swift) в качестве второго параметра. Если вы передали блок или замыкание, SDK выполнит его, не предпринимая дальнейших действий. Если же передано нулевое значение, SDK использует ссылку на контент и/или целевые URL, зарегистрированные с объявлением.

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

Objective-C

[self.customTemplateAd
    performClickOnAssetWithKey:@"MainImage"
            customClickHandler:^{
              [[[UIAlertView alloc] initWithTitle:@"Custom Click"
                                          message:@"You just clicked on the image!"
                                         delegate:self
                                cancelButtonTitle:@"OK"
                                otherButtonTitles:nil] show];
            }
];

Swift

customTemplateAd.performClickOnAssetWithKey(
    assetKey: "MainImage",
    customClickHandler: {
      let alertView = UIAlertView(title: "Custom Click",
          message: "You just clicked on the image!",
          delegate: self,
          cancelButtonTitle: "OK")
      alertView.alertViewStyle = .Default
      alertView.show()
    }
)

Тестирование кода нативного объявления

Объявления с прямой продажей

Если вы хотите протестировать нативные объявления с прямой продажей, воспользуйтесь следующим идентификатором рекламного блока DFP:

/6499/example/native

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

  • Headline (текстовый заголовок);
  • MainImage (изображение);
  • Caption (текстовая подпись).

Идентификатор шаблона для собственного формата адаптивного объявления: 10063170. Обратите внимание, что в настоящее время издателям не следует использовать свойство testDevices с запросами нативных объявлений. Мы рекомендуем применять для тестирования указанный выше идентификатор рекламного блока, не регистрируя устройства через свойство testDevices.

Нативные объявления для заполнения

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

/6499/example/native-backfill

В нем показываются тестовые объявления – обычные и ориентированные на установку приложения – со значком "Выбор рекламы".

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

Оставить отзыв о...

Текущей странице
SDK for DFP Users on iOS
Нужна помощь? Обратитесь в службу поддержки.