Видеореклама с бонусом — это полноэкранная видеореклама, за просмотр которой пользователи получают вознаграждение: виртуальную валюту, игровые предметы, эксклюзивный контент и другие преимущества. Сама реклама представляет собой видео длительностью 15–30 секунд и содержит конечную карточку с призывом к действию. Пропустить такую рекламу нельзя. После воспроизведения видео до конца вы получаете обратный вызов, позволяющий отправить бонус пользователю.
Ниже вы найдете инструкции по интеграции видеорекламы с бонусом из Audience Network в приложения для iOS.
Обратите внимание: видео с бонусом поддерживается только в iOS 9 и более поздних версиях.
Формат видео с бонусом из Audience Network теперь входит в общедоступный SDK. В ближайшем будущем видео с бонусом можно будет добавлять во все игровые приложения. Если у вас установлена последняя версия SDK, но видео с бонусом в Monetization Manager отсутствует, запросите эту возможность.
Прежде чем продолжить, обязательно ознакомьтесь с руководствами по началу работы с Audience Network и iOS.
Импортируйте FBAudienceNetwork
в файл заголовка контроллера представления (или файл Swift, если вы используете Swift), объявите соответствие протоколу FBRewardedVideoAdDelegate
и добавьте переменную экземпляра в рекламный блок видео с бонусом:
import UIKit
import FBAudienceNetwork
class ViewController: UIViewController, FBRewardedVideoAdDelegate {
private var rewardedVideoAd: FBRewardedVideoAd?
}
Добавьте в контроллер представления функцию, которая инициализирует объект видео с бонусом и выполняет предварительное кэширование видеоматериалов:
override func viewDidLoad() {
super.viewDidLoad()
// Instantiate an rewarded video object.
// NOTE: the placement ID will eventually identify this as your app. You can ignore it while you are testing
// and replace it later when you have signed up.
// While you are using this temporary code you will only get test ads and if you release
// your code like this to the App Store your users will not receive ads (you will get a 'No Fill' error).
let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
rewardedVideoAd.delegate = self
// For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
rewardedVideoAd.load()
self.rewardedVideoAd = rewardedVideoAd
}
В YOUR_PLACEMENT_ID
, показан временный ID, который используется только для тестирования.
Если вы будете использовать этот временный ID в рабочем коде, вместо рекламных объявлений пользователи будут получать ошибку No Fill. После тестирования необходимо вернуться к этому шагу и подставить вместо этого временного ID рабочий ID места размещения.
Инструкции по генерации рабочего ID места размещения см. в этой статье.
Теперь, когда вы добавили код, загружающий рекламу, можно добавить функции для обработки различных событий.
Например:
rewardedVideoAdDidLoad
— информирует приложение о том, что кэширование рекламы завершено и она готова к показу;rewardedVideoAdVideoComplete
— сообщает о том, что просмотр видео завершен и пользователь должен получить бонус.func rewardedVideoAdDidLoad(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Video ad is loaded and ready to be displayed")
}
func rewardedVideoAd(_ rewardedVideoAd: FBRewardedVideoAd, didFailWithError error: Error) {
print("Rewarded video ad failed to load")
}
func rewardedVideoAdDidClick(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Video ad clicked")
}
func rewardedVideoAdDidClose(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded Video ad closed - this can be triggered by closing the application, or closing the video end card")
}
func rewardedVideoAdVideoComplete(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded Video ad video completed - this is called after a full video view, before the ad end card is shown. You can use this event to initialize your reward")
}
Когда вы будете готовы показывать видеорекламу с бонусом, используйте в собственной функции вознаграждения следующий код:
private func showRewardedVideoAd() {
guard let rewardedVideoAd = rewardedVideoAd, rewardedVideoAd.isAdValid else {
return
}
rewardedVideoAd.show(fromRootViewController: self)
}
Метод показа видеорекламы с бонусом содержит логический флаг animated
, который позволяет анимировать представление. По умолчанию для него используется значение YES
/true
, но его можно изменить.
При запуске на эмуляторе по умолчанию будет отображаться тестовая реклама. Чтобы активировать тестовую рекламу на устройстве, добавьте перед загрузкой рекламы следующую строку кода: AdSettings.addTestDevice(HASHED ID)
. Когда вы впервые запрашиваете загрузку рекламы на устройство, используйте хэшированный ID, записанный в LogCat.
При необходимости можно добавить следующие дополнительные функции для обработки случаев закрытия видеорекламы с бонусом или записи ее показа:
func rewardedVideoAdWillClose(_ rewardedVideoAd: FBRewardedVideoAd) {
print("The user clicked on the close button, the ad is just about to close")
}
func rewardedVideoAdWillLogImpression(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded Video impression is being captured")
}
Если вы управляете бонусами пользователей на стороне сервера, то можете использовать решение Facebook, обеспечивающее безопасность этого процесса. Наш сервер будет подтверждать каждый показ рекламы и каждый бонус, обращаясь к специальной конечной точке.
onRewardServerSuccess
— только если на шаге 3 получен ответ с кодом 200; onRewardServerFailed
— если на шаге 3 получен ответ с другим кодом. Пример URL, который будет отправлен на конечную точку вашего издателя сервером Facebook:
https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
Для использования этой функции предоставьте конечную точку своего издателя представителю Facebook.
Указывать данные бонуса (USER_ID
и CURRENCY
) можно как до, так и после вызова метода loadAd
. Оба способа показаны во фрагменте кода ниже.
let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
rewardedVideoAd.delegate = self
// Set the rewarded ad data before or after `load` method is called
rewardedVideoAd.setRewardDataWithUserID("USER_ID", withCurrency: "CURRENCY")
// For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
rewardedVideoAd.load()
self.rewardedVideoAd = rewardedVideoAd
Помимо функций, показанных выше в FBRewardedVideoAdDelegate
, для предоставления бонусов в приложении необходимо использовать следующие события. Следующий код можно использовать с упомянутыми выше событиями.
func rewardedVideoAdServerRewardDidFail(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded video ad not validated, or no response from server")
}
func rewardedVideoAdServerRewardDidSucceed(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded video ad validated by server")
}
Обратите внимание: обратные вызовы, связанные с подтверждением бонуса на сервере, выполняются, только когда пользователь закроет конечную карточку. Не следует освобождать память, занимаемую объектом видео с бонусом, пока не будет выполнен один из таких обратных вызовов.
Relevant code samples in both Swift and Objective C are available on our GitHub sample app repository
Test your ads integration with your app
Submit your app for review