Межстраничные объявления – это полноэкранные объявления, которые закрывают интерфейс приложения, пока пользователь не закроет их. Обычно такая реклама показывается при естественных переходах между разделами приложения или уровнями игры. Когда в приложении показывается межстраничное объявление, пользователь может нажать на него и перейти на целевую страницу или закрыть его и вернуться в приложение. Пример из практики
В этом руководстве рассказывается, как интегрировать межстраничные объявления в приложение для iOS.
Требования
Прежде чем продолжить, настройте Google Mobile Ads SDK.
Всегда используйте тестовые объявления
При создании и тестировании приложений используйте тестовые объявления, а не реальные. В противном случае ваш аккаунт может быть заблокирован.
Проще всего загрузить тестовые объявления, используя специальный идентификатор тестового рекламного блока для межстраничных объявлений iOS:
ca-app-pub-3940256099942544/4411468910
Он специально настроен так, чтобы возвращать тестовые объявления для каждого запроса. Вы можете использовать его в своих приложениях при написании кода, тестировании и отладке. Перед публикацией приложения не забудьте заменить его на идентификатор своего рекламного блока.
Подробнее о тестовых объявлениях Google Mobile Ads SDK рассказывается в статье Как включить тестовые объявления.
Реализация
Основные этапы интеграции межстраничных объявлений:
- Загрузите объявление.
- Зарегистрируйте обратные вызовы.
- Показ объявления.
Загрузка объявления
Объявление загружается с помощью метода load(adUnitID:request) класса GADInterstitialAd.
Swift
fileprivate func loadInterstitial() async {
do {
interstitial = try await InterstitialAd.load(
with: "ca-app-pub-3940256099942544/4411468910", request: Request())
interstitial?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
SwiftUI
import GoogleMobileAds
class InterstitialViewModel: NSObject, FullScreenContentDelegate {
private var interstitialAd: InterstitialAd?
func loadAd() async {
do {
interstitialAd = try await InterstitialAd.load(
with: "ca-app-pub-3940256099942544/4411468910", request: Request())
interstitialAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
Objective-C
[GADInterstitialAd
loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
request:[GADRequest request]
completionHandler:^(GADInterstitialAd *ad, NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
return;
}
self.interstitial = ad;
self.interstitial.fullScreenContentDelegate = self;
}];
Регистрация обратных вызовов
Чтобы получать уведомления о событиях показа, необходимо назначить GADFullScreenContentDelegate свойству fullScreenContentDelegate возвращенного объявления:
Swift
interstitial?.fullScreenContentDelegate = self
SwiftUI
interstitialAd?.fullScreenContentDelegate = self
Objective-C
self.interstitial.fullScreenContentDelegate = self;
Протокол GADFullScreenContentDelegate обрабатывает обратные вызовы, когда объявление показывается успешно или нет, а также когда оно закрывается. В приведенном ниже коде показано, как реализовать протокол.
Swift
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("\(#function) called with error: \(error.localizedDescription)")
// Clear the interstitial ad.
interstitial = nil
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitial = nil
}
SwiftUI
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitialAd = nil
}
Objective-C
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)ad:(id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(NSError *)error {
NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
// Clear the interstitial ad.
self.interstitial = nil;
}
- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
// Clear the interstitial ad.
self.interstitial = nil;
}
GADInterstitialAd – это одноразовый объект. Это означает, что межстраничное объявление не может быть показано повторно. Рекомендуется загружать следующее межстраничное объявление в методе adDidDismissFullScreenContent: объекта GADFullScreenContentDelegate, чтобы оно начинало загружаться сразу после закрытия предыдущего.
Показ объявления
Межстраничные объявления должны показываться во время естественных пауз в работе приложения, например между уровнями игры или после выполнения задачи.
Swift
ad.present(from: self!)
SwiftUI
Отслеживайте события пользовательского интерфейса в представлении, чтобы определить, когда показывать объявление.
var body: some View {
// ...
}
.onChange(of: countdownTimer.isComplete) { newValue in
showGameOverAlert = newValue
}
.alert(isPresented: $showGameOverAlert) {
Alert(
title: Text("Game Over"),
message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
dismissButton: .cancel(
Text("OK"),
action: {
viewModel.showAd()
}))
Покажите межстраничное объявление из модели представления:
func showAd() {
guard let interstitialAd = interstitialAd else {
return print("Ad wasn't ready.")
}
interstitialAd.present(from: nil)
}
Objective-C
[self.interstitial presentFromRootViewController:self];
Рекомендации
- Подумайте, подходят ли межстраничные объявления для вашего приложения.
- Межстраничные объявления лучше всего подходят для приложений с естественными переходами между экранами. Например, переходом может быть выполнение задачи в приложении, такой как отправка изображения или завершение игрового уровня. Поскольку пользователь ожидает перерыва в действии, межстраничное объявление не помешает ему. Подумайте, в какие моменты лучше показывать межстраничные объявления и как на них будут реагировать пользователи.
- Не забудьте приостановить действие при показе межстраничного объявления.
- Существует несколько типов межстраничных объявлений: текстовые, графические, видеообъявления и т. д. Важно, чтобы при показе межстраничного объявления приложение приостанавливало использование некоторых ресурсов, чтобы их могло использовать объявление. Например, при вызове межстраничного объявления необходимо приостановить воспроизведение звука в приложении. Возобновить его можно в обработчике событий
adDidDismissFullScreenContent:, который вызывается, когда пользователь завершает взаимодействие с объявлением. Кроме того, на время показа объявления рекомендуется приостанавливать выполнение ресурсоемких задач, например игрового цикла. Это позволит избежать задержек при воспроизведении видео и графики. - Убедитесь, что страница загружается достаточно быстро.
- Важно не только показывать межстраничные объявления в подходящий момент, но и сделать так, чтобы пользователю не приходилось ждать их загрузки. Загрузка объявления заранее, до того как вы собираетесь его показать, гарантирует, что в вашем приложении будет полностью загруженное межстраничное объявление, готовое к показу в нужный момент.
- Не показывайте пользователю слишком много объявлений.
- Увеличение частоты показа межстраничных объявлений может показаться отличным способом повысить доход, но это также может ухудшить удобство для пользователей и снизить CTR. Убедитесь, что реклама не показывается слишком часто и не мешает пользователям работать с приложением.
- Не используйте обратный вызов завершения загрузки для показа межстраничного объявления.
- Это может быть неудобно для пользователей. Вместо этого загружайте объявление заранее. Затем проверьте метод
canPresentFromRootViewController:error:вGADInterstitialAd, чтобы узнать, готово ли объявление к показу.
Дополнительные ресурсы
Примеры на GitHub
Посмотрите примеры межстраничных объявлений на разных языках:
Видеоуроки Mobile Ads Garage
Истории успеха
Дальнейшие действия
- Если вы ещё этого не сделали, создайте собственный межстраничный рекламный блок в интерфейсе AdMob.
- Подробнее о таргетинге объявлений и правилах в отношении межстраничных объявлений…
- Подробнее о конфиденциальности пользователей…