Реклама с вознаграждением — это реклама, с которой пользователи могут взаимодействовать в обмен на вознаграждения в приложении . В этом руководстве показано, как интегрировать рекламу с вознаграждением из AdMobв приложение iOS.Прочтите несколько историй успеха клиентов: практический пример 1 , практический пример 2 .
Предварительные условия
- Google Mobile Ads SDK 8.0.0 или более поздней версии.
- Заполните руководство по началу работы .
Всегда тестируйте с помощью тестовых объявлений
При создании и тестировании приложений убедитесь, что вы используете тестовые объявления, а не действующие, рабочие. Несоблюдение этого требования может привести к блокировке вашего аккаунта.
Самый простой способ загрузить тестовые объявления — использовать наш специальный идентификатор тестового рекламного блока для объявлений с вознаграждением для iOS:
ca-app-pub-3940256099942544/1712485313
Он был специально настроен для возврата тестовых объявлений по каждому запросу, и вы можете использовать его в своих приложениях при написании кода, тестировании и отладке. Просто убедитесь, что вы заменили его собственным идентификатором рекламного блока перед публикацией приложения.
Дополнительную информацию о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .
Выполнение
Основные шаги по интеграции межстраничной рекламы с вознаграждением следующие:
- Загрузить объявление
- [Необязательно] Проверка обратных вызовов SSV
- Зарегистрируйтесь для обратных звонков
- Отобразите рекламу и обработайте событие вознаграждения
Загрузить объявление
Загрузка объявления осуществляется с помощью статического метода loadWithAdUnitID:request:completionHandler:
класса GADRewardedAd
. Для метода загрузки требуется идентификатор рекламного блока, объект GADRequest
и обработчик завершения, который вызывается при успешной или неудачной загрузке объявления. Загруженный объект GADRewardedAd
предоставляется в качестве параметра обработчика завершения. В приведенном ниже примере показано, как загрузить GADRewardedAd
в класс ViewController
.
Быстрый
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GADRequest() GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") } ) } }
Цель-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)loadRewardedAd { GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); }]; }
[Необязательно] Проверка обратных вызовов проверки на стороне сервера (SSV).
Приложения, которым требуются дополнительные данные в обратных вызовах проверки на стороне сервера , должны использовать функцию пользовательских данных объявлений с вознаграждением. Любое строковое значение, установленное для объекта рекламы с вознаграждением, передается в параметр запроса custom_data
обратного вызова SSV. Если значение настраиваемых данных не установлено, значение параметра запроса custom_data
не будет присутствовать в обратном вызове SSV.
В следующем примере кода показано, как установить пользовательские данные для объекта рекламы с вознаграждением перед запросом рекламы.
Быстрый
GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error != error { rewardedInterstitialAd = ad let options = GADServerSideVerificationOptions() options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING" rewardedInterstitialAd.serverSideVerificationOptions = options }
Цель-C
GADRequest *request = [GADRequest request]; [GADRewardedInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) { if (error) { // Handle Error return; } self.rewardedInterstitialAd = ad; GADServerSideVerificationOptions *options = [[GADServerSideVerificationOptions alloc] init]; options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING"; ad.serverSideVerificationOptions = options; }];
Зарегистрируйтесь для обратных звонков
Чтобы получать уведомления о событиях презентации, необходимо реализовать протокол GADFullScreenContentDelegate
и назначить его свойству fullScreenContentDelegate
возвращаемого объявления. Протокол GADFullScreenContentDelegate
обрабатывает обратные вызовы при успешном или неудачном показе объявления и при его отклонении. Следующий код показывает, как реализовать протокол и назначить его объявлению:
Быстрый
class ViewController: UIViewController, GADFullScreenContentDelegate { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GADRequest() GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") rewardedAd?.fullScreenContentDelegate = self } ) } /// 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.") } }
Цель-C
@interface ViewController ()<GADFullScreenContentDelegate> @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)loadRewardedAd { GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); self.rewardedAd.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."); }
GADRewardedAd
— это объект одноразового использования. Это означает, что после показа объявления с вознаграждением его нельзя будет показать снова. Лучше всего загрузить еще одно объявление с вознаграждением в методе adDidDismissFullScreenContent:
в GADFullScreenContentDelegate
, чтобы следующее объявление с вознаграждением начало загружаться, как только предыдущее будет закрыто.
Отобразите рекламу и обработайте событие вознаграждения
Прежде чем показывать пользователям рекламу с вознаграждением, вы должны предоставить пользователю явный выбор просмотра контента рекламы с вознаграждением в обмен на вознаграждение. Реклама с вознаграждением всегда должна быть добровольной.
При представлении объявления вы должны предоставить объект GADUserDidEarnRewardHandler
для обработки вознаграждения для пользователя.
Следующий код представляет лучший метод отображения рекламы с вознаграждением.
Быстрый
func show() { if let ad = rewardedAd { ad.present(fromRootViewController: self) { let reward = ad.adReward print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)") // TODO: Reward the user. } } else { print("Ad wasn't ready") } }
Цель-C
- (void)show { ... if (self.rewardedAd) { [self.rewardedAd presentFromRootViewController:self userDidEarnRewardHandler:^{ GADAdReward *reward = self.rewardedAd.adReward; // TODO: Reward the user! }]; } else { NSLog(@"Ad wasn't ready"); } }
Часто задаваемые вопросы
- Могу ли я получить информацию о вознаграждении за
GADRewardedAd
? - Да, если вам нужна сумма вознаграждения до того, как будет запущен обратный вызов
userDidEarnReward
, уGADRewardedAd
есть свойствоadReward
, которое вы можете проверить, чтобы проверить сумму вознаграждения после загрузки объявления. - Есть ли тайм-аут для вызова инициализации?
- Через 10 секунд Google Mobile Ads SDK вызывает
GADInitializationCompletionHandler
предоставленный методуstartWithCompletionHandler:
даже если сеть медиации еще не завершила инициализацию. - Что, если некоторые сети-посредники не будут готовы, когда я получу обратный вызов инициализации?
Мы рекомендуем загружать объявление внутри
GADInitializationCompletionHandler
. Даже если сеть медиации не готова, Google Mobile Ads SDK все равно запрашивает у этой сети объявление. Таким образом, если сеть медиации завершит инициализацию по истечении времени ожидания, она все равно сможет обслуживать будущие запросы объявлений в этом сеансе.Вы можете продолжать опрашивать состояние инициализации всех адаптеров на протяжении всего сеанса приложения, вызывая
GADMobileAds.initializationStatus
.- Как узнать, почему конкретная сеть медиации не готова?
Свойство
description
объектаGADAdapterStatus
описывает, почему адаптер не готов обслуживать запросы объявлений.- Всегда ли обработчик завершения
userDidEarnRewardHandler
вызывается перед методом делегатаadDidDismissFullScreenContent:
:? Для рекламы Google все вызовы
userDidEarnRewardHandler
происходят доadDidDismissFullScreenContent:
. Для объявлений, показываемых через медиацию , порядок обратного вызова определяет реализация SDK сторонней рекламной сети. Для SDK рекламных сетей, которые предоставляют один метод делегата с информацией о вознаграждении, адаптер-посредник вызываетuserDidEarnRewardHandler
передadDidDismissFullScreenContent:
.
Примеры на GitHub
Следующие шаги
Узнайте больше о конфиденциальности пользователей .