С помощью API Native Ad вы можете создавать индивидуально настроенную рекламу для своего приложения. Выбирая API Native Ad вместо готовой к показу рекламы, вы получаете набор свойств рекламы (название, изображение, призыв к действию и т. п.), позволяющих разработать для нее индивидуальное представление.
Разработать оформление нативной рекламы в приложении вам поможет наше руководство по нативной рекламе.
Давайте реализуем следующее место размещения нативной рекламы. Вам предстоит создать следующие представления для нативной рекламы.
Представление №1: значок рекламодателяПредставление №2: заголовок рекламыПредставление №3: метка "Реклама"Представление №4: выбор рекламодателя | Представление №5: медиаданные рекламыПредставление №6: социальный контекстПредставление №7: текст рекламыПредставление №8: кнопка призыва к действию |
Прежде чем продолжить, обязательно ознакомьтесь с руководствами по началу работы с Audience Network и iOS.
Убедитесь, что ваша нативная и баннерная реклама соответствуют руководству по компоновке для iOS.
Main.storyboard
. Добавьте элемент UIView в главный элемент View и присвойте ему имя adUIView
. adIconImageView
(FBMediaView), adTitleLabel
(UILabel), adCoverMediaView
(FBMediaView), adSocialContext
(UILabel), adCallToActionButton
(UIButton), adOptionsView
(FBAdOptionsView), adBodyLabel
(UILabel) и sponsoredLabel
(UILabel) в adUIView
, как показано здесь: ViewController.m
(ViewController.swift
, если вы используете Swift), затем перетащите adUIView
вовнутрь объекта ViewController. Можете присвоить ему имя adUIView
. Затем сделайте то же самое для adIconImageView
, adTitleLabel
, adCoverMediaView
, adSocialContext
, adCallToActionButton
, adOptionsView
, adBodyLabel
и sponsoredLabel
.Теперь, когда вы создали все элементы пользовательского интерфейса для показа нативной рекламы, нужно загрузить нативную рекламу и привязать эти материалы к элементам пользовательского интерфейса.
ViewController
соблюдает протокол FBNativeAdDelegate
и добавьте переменную экземпляра FBNativeAd
import UIKit
import FBAudienceNetwork
class ViewController: UIViewController, FBNativeAdDelegate {
private var nativeAd: FBNativeAd?
}
viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
let nativeAd = FBNativeAd(placementID: "YOUR_PLACEMENT_ID")
nativeAd.delegate = self
nativeAd.loadAd()
}
В YOUR_PLACEMENT_ID
, показан временный ID, который используется только для тестирования.
Если вы будете использовать этот временный ID в рабочем коде, вместо рекламных объявлений пользователи будут получать ошибку No Fill. После тестирования необходимо вернуться к этому шагу и подставить вместо этого временного ID рабочий ID места размещения.
Инструкции по генерации рабочего ID места размещения см. в этой статье.
ViewController
для реализации метода делегата nativeAdDidLoad
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
// 1. If there is an existing valid native ad, unregister the view
if let previousNativeAd = self.nativeAd, previousNativeAd.isAdValid {
previousNativeAd.unregisterView()
}
// 2. Retain a reference to the native ad object
self.nativeAd = nativeAd
// 3. Register what views will be tappable and what the delegate is to notify when a registered view is tapped
// Here only the call-to-action button and the media view are tappable, and the delegate is the view controller
nativeAd.registerView(
forInteraction: adUIView,
mediaView: adCoverMediaView,
iconView: adIconImageView,
viewController: self,
clickableViews: [adCallToActionButton, adCoverMediaView]
)
// 4. Render the ad content onto the view
adTitleLabel.text = nativeAd.advertiserName
adBodyLabel.text = nativeAd.bodyText
adSocialContextLabel.text = nativeAd.socialContext
sponsoredLabel.text = nativeAd.sponsoredTranslation
adCallToActionButton.setTitle(nativeAd.callToAction, for: .normal)
adOptionsView.nativeAd = nativeAd
}
Если вы хотите сделать свою рекламу удобной для пользователей и результативной, всегда старайтесь настроить интерактивную область так, чтобы пользователи не нажимали на нее по ошибке. Подробнее о правилах в отношении некликабельного свободного пространства см. на странице Политика Facebook Audience Network.
Чтобы смотреть тестовую рекламу, при ее запуске в симуляторе включите тестовый режим. Подробнее см. в разделе Использование тестового режима.
В примере выше медиаматериалы рекламы демонстрируются в adCoverMediaView
, а тип объекта — FBMediaView
. На предыдущем шаге мы показали, как с помощью FBMediaView загрузить медиаматериалы из определенного объекта FBNativeAd
. Это представление позволяет не загружать обложку вручную. При создании FBMediaView
ширина и высота определяются автоматическими границами макета, указанными в раскадровке, либо задаются в программном коде. Однако ширина и высота представления могут не совпасть со скачанной позже обложкой рекламы. Чтобы исправить это, нужно узнать соотношение сторон материалов и применить естественную ширину и высоту (см. ниже):
FBMediaViewDelegate
class ViewController: UIViewController, FBNativeAdDelegate, FBMediaViewDelegate {
...
}
FBMediaView
в качестве вашего контроллера представления
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
adCoverMediaView.delegate = self
}
mediaViewDidLoad
в вашем контроллере представления
func mediaViewDidLoad(_ mediaView: FBMediaView) {
let currentAspect = mediaView.frame.size.width / mediaView.frame.size.height
print(currentAspect)
let actualAspect = mediaView.aspectRatio
print(actualAspect)
}
mediaView.aspectRatio
возвращает позитивный CGFloat, или же 0.0 в случае отсутствия загружаемой рекламы. Значение станет действительным после загрузки медиапредставления. Есть удобные методы, которые позволяют настроить ширину и высоту объекта FBMediaView с учетом соотношения сторон загружаемых медиаматериалов. Вы можете вызвать applyNaturalWidth
или applyNaturalHeight
, чтобы обновить высоту или ширину объекта FBMediaView
с учетом соотношения сторон медиаматериалов.
При необходимости можно также добавить следующие функции для обработки случаев, когда нативная реклама закрывается или пользователь нажимает на нее
func nativeAdDidClick(_ nativeAd: FBNativeAd) {
print("Native ad was clicked.")
}
func nativeAdDidFinishHandlingClick(_ nativeAd: FBNativeAd) {
print("Native ad did finish click handling.")
}
func nativeAdWillLogImpression(_ nativeAd: FBNativeAd) {
print("Native ad impression is being captured.")
}
Добавьте в ваш контроллер представления и реализуйте следующую функцию, чтобы обрабатывать случаи сбоя загрузки рекламы
func nativeAd(_ nativeAd: FBNativeAd, didFailWithError error: Error) {
print("Native ad failed to load with error: \(error.localizedDescription)")
}
let nativeAd = FBNativeAd(placementID: "YOUR_PLACEMENT_ID")
nativeAd.delegate = self
nativeAd.loadAd(withMediaCachePolicy: .none)
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
...
self.adCoverMediaView.delegate = self
nativeAd.downloadMedia()
self.nativeAd = nativeAd
...
}
registerViewForInteraction
и показать рекламу после обратного вызова mediaViewDidLoad
. Чтобы показ был засчитан, должны быть загружены и отображены все медиаматериалы
func mediaViewDidLoad(_ mediaView: FBMediaView) {
guard let nativeAd = nativeAd else {
return
}
// 1. Register what views will be tappable and what the delegate is to notify when a registered view is tapped
// Here only the call-to-action button and the media view are tappable, and the delegate is the view controller
nativeAd.registerView(
forInteraction: adUIView,
mediaView: mediaView,
iconView: adIconImageView,
viewController: self,
clickableViews: [adCallToActionButton, mediaView]
)
// 2. Render the ad content onto the view
adTitleLabel.text = nativeAd.advertiserName
adBodyLabel.text = nativeAd.bodyText
adSocialContextLabel.text = nativeAd.socialContext
sponsoredLabel.text = nativeAd.sponsoredTranslation
adCallToActionButton.setTitle(nativeAd.callToAction, for: .normal)
adOptionsView.nativeAd = nativeAd
}
NativeAdSample
является частью SDK и находится в папке FBAudienceNetwork/samples
. Откройте проект в Xcode и запустите его на устройстве или в эмуляторе. Дополнительные ресурсы |
Руководство по началу работыТехническое руководство по началу работы с Audience Network Примеры кодаПримеры интеграции рекламы из Audience Network | Часто задаваемые вопросыЧасто задаваемые вопросы о Audience Network Шаблон нативной рекламыАвтоматизированная интеграция нативной рекламы |