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

В общих чертах, вот шаги, необходимые для внедрения рекламы при открытии приложения:
- Создайте класс-менеджер, который будет загружать рекламу до того, как её потребуется отобразить.
- Отображать рекламу во время событий, происходящих в фоновом режиме приложения.
- Обработка обратных вызовов презентации.
Предварительные требования
- Настройте Google Mobile Ads SDK .
- Узнайте, как настроить ваше устройство в качестве тестового .
Всегда проводите тестирование с помощью тестовых объявлений.
При разработке и тестировании приложений обязательно используйте тестовые объявления, а не реальные, рабочие объявления. Несоблюдение этого правила может привести к блокировке вашего аккаунта.
Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для рекламы, открывающей приложение:
ca-app-pub-3940256099942544/5575463023
Он специально настроен на возврат тестовых объявлений для каждого запроса, и вы можете свободно использовать его в своих приложениях во время кодирования, тестирования и отладки. Просто убедитесь, что вы заменили его на свой собственный идентификатор рекламного блока перед публикацией приложения.
Для получения дополнительной информации о том, как работают тестовые объявления Google Mobile Ads SDK , см. раздел «Тестовые объявления» .
Реализуйте класс менеджера.
Ваша реклама должна отображаться быстро, поэтому лучше всего загружать её до того, как она понадобится. Таким образом, реклама будет готова к показу, как только пользователь зайдёт в ваше приложение. Реализуйте класс-менеджер, чтобы отправлять запросы на показ рекламы заранее, до того, как она понадобится.
Создайте новый класс-синглтон с именем AppOpenAdManager :
Быстрый
class AppOpenAdManager: NSObject {
/// The app open ad.
var appOpenAd: AppOpenAd?
/// Maintains a reference to the delegate.
weak var appOpenAdManagerDelegate: AppOpenAdManagerDelegate?
/// Keeps track of if an app open ad is loading.
var isLoadingAd = false
/// Keeps track of if an app open ad is showing.
var isShowingAd = false
/// Keeps track of the time when an app open ad was loaded to discard expired ad.
var loadTime: Date?
/// For more interval details, see https://support.google.com/admob/answer/9341964
let timeoutInterval: TimeInterval = 4 * 3_600
static let shared = AppOpenAdManager()
Objective-C
@interface AppOpenAdManager ()
/// The app open ad.
@property(nonatomic, strong, nullable) GADAppOpenAd *appOpenAd;
/// Keeps track of if an app open ad is loading.
@property(nonatomic, assign) BOOL isLoadingAd;
/// Keeps track of if an app open ad is showing.
@property(nonatomic, assign) BOOL isShowingAd;
/// Keeps track of the time when an app open ad was loaded to discard expired ad.
@property(nonatomic, strong, nullable) NSDate *loadTime;
@end
/// For more interval details, see https://support.google.com/admob/answer/9341964
static const NSInteger kTimeoutInterval = 4;
@implementation AppOpenAdManager
+ (nonnull AppOpenAdManager *)sharedInstance {
static AppOpenAdManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[AppOpenAdManager alloc] init];
});
return instance;
}
И реализовать протокол AppOpenAdManagerDelegate :
Быстрый
protocol AppOpenAdManagerDelegate: AnyObject {
/// Method to be invoked when an app open ad life cycle is complete (i.e. dismissed or fails to
/// show).
func appOpenAdManagerAdDidComplete(_ appOpenAdManager: AppOpenAdManager)
}
Objective-C
@protocol AppOpenAdManagerDelegate <NSObject>
/// Method to be invoked when an app open ad life cycle is complete (i.e. dismissed or fails to
/// show).
- (void)adDidComplete;
@end
Загрузить рекламу
Следующий шаг — загрузка рекламного объявления об открытии приложения:
Быстрый
func loadAd() async {
// Do not load ad if there is an unused ad or one is already loading.
if isLoadingAd || isAdAvailable() {
return
}
isLoadingAd = true
do {
appOpenAd = try await AppOpenAd.load(
with: "ca-app-pub-3940256099942544/5575463023", request: Request())
appOpenAd?.fullScreenContentDelegate = self
loadTime = Date()
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
appOpenAd = nil
loadTime = nil
}
isLoadingAd = false
}
Objective-C
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if ([self isAdAvailable] || self.isLoadingAd) {
return;
}
self.isLoadingAd = YES;
[GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest request]
completionHandler:^(GADAppOpenAd * _Nullable appOpenAd, NSError * _Nullable error) {
self.isLoadingAd = NO;
if (error) {
NSLog(@"App open ad failed to load with error: %@", error);
self.appOpenAd = nil;
self.loadTime = nil;
return;
}
self.appOpenAd = appOpenAd;
self.appOpenAd.fullScreenContentDelegate = self;
self.loadTime = [NSDate date];
}];
}
Показать рекламу
Следующий шаг — показ рекламы приложения. Если реклама недоступна, попробуйте загрузить новую рекламу.
Быстрый
func showAdIfAvailable() {
// If the app open ad is already showing, do not show the ad again.
if isShowingAd {
return print("App open ad is already showing.")
}
// If the app open ad is not available yet but is supposed to show, load
// a new ad.
if !isAdAvailable() {
print("App open ad is not ready yet.")
// The app open ad is considered to be complete in this example.
appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
// Load a new ad.
return
}
if let appOpenAd {
appOpenAd.present(from: nil)
isShowingAd = true
}
}
Objective-C
- (void)showAdIfAvailable {
// If the app open ad is already showing, do not show the ad again.
if (self.isShowingAd) {
NSLog(@"App open ad is already showing.");
return;
}
// If the app open ad is not available yet but is supposed to show, load
// a new ad.
if (![self isAdAvailable]) {
NSLog(@"App open ad is not ready yet.");
// The app open ad is considered to be complete in this example.
[self adDidComplete];
// Load a new ad.
return;
}
[self.appOpenAd presentFromRootViewController:nil];
self.isShowingAd = YES;
}
Показывать рекламу во время событий, происходящих в фоновом режиме приложения.
Когда приложение станет активным, вызовите функцию showAdIfAvailable() , чтобы показать рекламу, если она доступна, или загрузить новую.
Быстрый
func applicationDidBecomeActive(_ application: UIApplication) {
// Show the app open ad when the app is foregrounded.
AppOpenAdManager.shared.showAdIfAvailable()
}
Objective-C
- (void) applicationDidBecomeActive:(UIApplication *)application {
// Show the app open ad when the app is foregrounded.
[AppOpenAdManager.sharedInstance showAdIfAvailable];
}
Обработка обратных вызовов презентации
Для получения уведомлений о событиях презентации необходимо присвоить GADFullScreenContentDelegate свойство fullScreenContentDelegate возвращаемого объявления:
Быстрый
appOpenAd?.fullScreenContentDelegate = self
Objective-C
self.appOpenAd.fullScreenContentDelegate = self;
В частности, вам потребуется запросить показ следующей рекламы приложения после завершения показа первой. Следующий код показывает, как реализовать протокол в файле AppOpenAdManager :
Быстрый
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("App open ad recorded an impression.")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("App open ad recorded a click.")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad will be dismissed.")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad will be presented.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad was dismissed.")
appOpenAd = nil
isShowingAd = false
appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
Task {
await loadAd()
}
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("App open ad failed to present with error: \(error.localizedDescription)")
appOpenAd = nil
isShowingAd = false
appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
Task {
await loadAd()
}
}
Objective-C
- (void)adDidRecordImpression:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad recorded an impression.");
}
- (void)adDidRecordClick:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad recorded a click.");
}
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad will be presented.");
}
- (void)adWillDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad will be dismissed.");
}
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad was dismissed.");
self.appOpenAd = nil;
self.isShowingAd = NO;
[self adDidComplete];
[self loadAd];
}
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
NSLog(@"App open ad failed to present with error: %@", error.localizedDescription);
self.appOpenAd = nil;
self.isShowingAd = NO;
[self adDidComplete];
[self loadAd];
}
Учитывайте истечение срока действия рекламы.
Чтобы избежать показа устаревшей рекламы, можно добавить в делегат приложения метод, проверяющий время, прошедшее с момента загрузки ссылки на объявление.
В AppOpenAdManager добавьте свойство типа Date с именем loadTime и устанавливайте это значение при загрузке объявления. Затем вы можете добавить метод, который возвращает true если с момента загрузки объявления прошло меньше определенного количества часов. Перед показом объявления обязательно проверьте действительность ссылки на ваше объявление.
Быстрый
private func wasLoadTimeLessThanNHoursAgo(timeoutInterval: TimeInterval) -> Bool {
// Check if ad was loaded more than n hours ago.
if let loadTime = loadTime {
return Date().timeIntervalSince(loadTime) < timeoutInterval
}
return false
}
private func isAdAvailable() -> Bool {
// Check if ad exists and can be shown.
return appOpenAd != nil && wasLoadTimeLessThanNHoursAgo(timeoutInterval: timeoutInterval)
}
Objective-C
- (BOOL)wasLoadTimeLessThanNHoursAgo:(int)n {
// Check if ad was loaded more than n hours ago.
NSDate *now = [NSDate date];
NSTimeInterval timeIntervalBetweenNowAndLoadTime = [now timeIntervalSinceDate:self.loadTime];
double secondsPerHour = 3600.0;
double intervalInHours = timeIntervalBetweenNowAndLoadTime / secondsPerHour;
return intervalInHours < n;
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return _appOpenAd && [self wasLoadTimeLessThanNHoursAgo:kTimeoutInterval];
}
Холодный запуск и экраны загрузки
В документации предполагается, что вы показываете рекламу приложения только тогда, когда пользователи переводят приложение в активное состояние, когда оно приостановлено в памяти. «Холодный запуск» происходит, когда ваше приложение запускается, но ранее не было приостановлено в памяти.
An example of a cold start is when a user opens your app for the first time. With cold starts, you won't have a previously loaded app open ad that's ready to be shown right away. The delay between when you request an ad and receive an ad back can create a situation where users are able to briefly use your app before being surprised by an out of context ad. This should be avoided because it is a bad user experience.
Предпочтительный способ использования рекламы при холодном запуске приложения — это использование экрана загрузки для отображения игровых или других ресурсов приложения и показ рекламы только с этого экрана. Если загрузка приложения завершена и пользователь перешёл к основному контенту, рекламу показывать не следует.
Передовые методы
Google создала рекламные объявления, появляющиеся при открытии приложений, чтобы помочь вам монетизировать экран загрузки вашего приложения, но важно помнить о лучших практиках, чтобы ваши пользователи получали удовольствие от использования вашего приложения. Убедитесь, что:
- Подождите с показом первой рекламы, прежде чем пользователи начнут пользоваться вашим приложением несколько раз.
- Показывайте рекламу приложения в то время, когда пользователи обычно ждут загрузки приложения.
- Если под открытой рекламой приложения отображается экран загрузки, и загрузка завершается до того, как реклама будет закрыта, возможно, вам следует закрыть экран загрузки в методе
adDidDismissFullScreenContent.
Полный пример на GitHub
Следующие шаги
Узнайте больше о конфиденциальности пользователей .