Это руководство предназначено для издателей, интегрирующих рекламу в приложениях.
Реклама при запуске приложения — это специальный формат рекламы, предназначенный для издателей, желающих монетизировать загрузочные экраны своих приложений. Пользователи могут закрыть рекламу при запуске приложения в любой момент. Реклама при запуске приложения может отображаться, когда пользователи выводят приложение на передний план.
Реклама при запуске приложения автоматически отображает небольшую область с фирменным стилем, чтобы пользователи знали, что они находятся в вашем приложении. Вот пример того, как выглядит реклама при запуске приложения:
Ниже приведены шаги, необходимые для внедрения рекламы при открытии приложения:
- Создайте класс менеджера, который загружает рекламу до того, как она вам понадобится для отображения.
- Показывать рекламу во время событий выхода приложения на передний план.
- Обработка обратных вызовов презентации.
Предпосылки
- Следуйте инструкциям по настройке, приведенным в нашем руководстве по началу работы .
- Узнайте, как настроить ваше устройство в качестве тестового .
Всегда проверяйте с помощью тестовых объявлений
При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для рекламы при открытии приложения:
ca-app-pub-3940256099942544/5575463023
Он специально настроен для возврата тестовых объявлений при каждом запросе, и вы можете использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой идентификатор рекламного блока перед публикацией приложения.
Дополнительную информацию о работе тестовых объявлений Mobile Ads SDK см. в разделе Тестовые объявления .
Реализовать класс менеджера
Ваша реклама должна отображаться быстро, поэтому лучше всего загружать её до того, как она появится на экране. Таким образом, реклама будет готова к показу сразу после входа пользователя в приложение. Реализуйте класс-менеджер, чтобы отправлять запросы на показ рекламы заранее, до того, как она появится на экране.
Создайте новый класс-синглтон с именем AppOpenAdManager
и заполните его следующим образом:
Быстрый
class AppOpenAdManager: NSObject {
var appOpenAd: AppOpenAd?
var isLoadingAd = false.
var isShowingAd = false
static let shared = AppOpenAdManager()
private func loadAd() async {
// TODO: Implement loading an ad.
}
func showAdIfAvailable() {
// TODO: Implement showing an ad.
}
private func isAdAvailable() -> Bool {
// Check if ad exists and can be shown.
return appOpenAd != nil
}
}
Objective-C
@interface AppOpenAdManager ()
@property(nonatomic, strong) GADAppOpenAd *appOpenAd;
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@end
@implementation AppOpenAdManager
+ (nonnull AppOpenAdManager *)sharedInstance {
static AppOpenAdManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[AppOpenAdManager alloc] init];
});
return instance;
}
- (void)loadAd {
// TODO: Implement loading an ad.
}
// Add this method to the .h file.
- (void)showAdIfAvailable {
// TODO: Implement showing an ad.
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd != nil;
}
@end
Загрузить объявление
Следующим шагом будет заполнение метода loadAd()
.
Быстрый
private 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())
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
}
isLoadingAd = false
}
Objective-C
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if (self.isLoadingAd || [self isAdAvailable]) {
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(@"Failed to load app open ad: %@", error);
return;
}
self.appOpenAd = appOpenAd;
}];
}
Показать рекламу
Следующий шаг — заполнение метода showAdIfAvailable()
. Если доступной рекламы нет, метод пытается её загрузить.
Быстрый
func showAdIfAvailable() {
// If the app open ad is already showing, do not show the ad again.
guard !isShowingAd else { return }
// If the app open ad is not available yet but is supposed to show, load
// a new ad.
if !isAdAvailable() {
Task {
await loadAd()
}
return
}
if let ad = appOpenAd {
isShowingAd = true
ad.present(from: nil)
}
}
Objective-C
- (void)showAdIfAvailable {
// If the app open ad is already showing, do not show the ad again.
if (self.isShowingAd) {
return;
}
// If the app open ad is not available yet but is supposed to show, load a
// new ad.
if (![self isAdAvailable]) {
[self loadAd];
return;
}
self.isShowingAd = YES;
[self.appOpenAd presentFromRootViewController:nil];
}
Показывать рекламу во время событий выхода приложения на передний план
Когда приложение становится активным, вызовите showAdIfAvailable()
чтобы показать рекламу, если она доступна, или загрузить новую.
Быстрый
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
func applicationDidBecomeActive(_ application: UIApplication) {
// Show the app open ad when the app is foregrounded.
AppOpenAdManager.shared.showAdIfAvailable()
}
}
Objective-C
@implementation AppDelegate
// ...
- (void) applicationDidBecomeActive:(UIApplication *)application {
// Show the app open ad when the app is foregrounded.
[AppOpenAdManager.sharedInstance showAdIfAvailable];
}
@end
Обработка обратных вызовов презентации
Когда ваше приложение отображает рекламу при открытии приложения, вам следует использовать GADFullScreenContentDelegate
для обработки определённых событий презентации. В частности, вам может потребоваться запросить следующую рекламу при открытии приложения после завершения отображения первой.
В классе AppOpenAdManager
добавьте следующее:
Быстрый
class AppOpenAdManager: NSObject, FullScreenContentDelegate {
// ...
private 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
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
}
isLoadingAd = false
}
// ...
// MARK: - FullScreenContentDelegate methods
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad will be presented.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
appOpenAd = nil
isShowingAd = false
// Reload an ad.
Task {
await loadAd()
}
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
appOpenAd = nil
isShowingAd = false
// Reload an ad.
Task {
await loadAd()
}
}
}
Objective-C
@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@end
@implementation AppOpenAdManager
// ...
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if (self.isLoadingAd || [self isAdAvailable]) {
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(@"Failed to load app open ad: %@", error);
return;
}
self.appOpenAd = appOpenAd;
self.appOpenAd.fullScreenContentDelegate = self;
}];
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd != nil;
}
// ...
#pragma mark - GADFullScreenContentDelegate methods
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad is will be presented.");
}
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
self.appOpenAd = nil;
self.isShowingAd = NO;
// Reload an ad.
[self loadAd];
}
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
self.appOpenAd = nil;
self.isShowingAd = NO;
// Reload an ad.
[self loadAd];
}
@end
Учитывайте срок действия объявления
Чтобы убедиться, что вы не показываете просроченную рекламу, вы можете добавить метод к делегату приложения, который проверяет время, прошедшее с момента загрузки ссылки на вашу рекламу.
В AppOpenAdManager
добавьте свойство Date
loadTime
и задайте его при загрузке объявления. Затем вы можете добавить метод, который возвращает true
если с момента загрузки объявления прошло менее определённого количества часов. Перед показом объявления обязательно проверьте корректность ссылки на него.
Быстрый
class AppOpenAdManager: NSObject, FullScreenContentDelegate {
var appOpenAd: AppOpenAd?
var isLoadingAd = false.
var isShowingAd = false
var loadTime: Date?
let fourHoursInSeconds = TimeInterval(3600 * 4)
// ...
private 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)")
}
isLoadingAd = false
}
private func wasLoadTimeLessThanFourHoursAgo() -> Bool {
guard let loadTime = loadTime else { return false }
// Check if ad was loaded more than four hours ago.
return Date().timeIntervalSince(loadTime) < fourHoursInSeconds
}
private func isAdAvailable() -> Bool {
// Check if ad exists and can be shown.
return appOpenAd != nil && wasLoadTimeLessThanFourHoursAgo()
}
}
Objective-C
static NSTimeInterval const fourHoursInSeconds = 3600 * 4;
@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@property(weak, nonatomic) NSDate *loadTime;
@end
@implementation AppOpenAdManager
// ...
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if (self.isLoadingAd || [self isAdAvailable]) {
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(@"Failed to load app open ad: %@", error);
return;
}
self.appOpenAd = appOpenAd;
self.appOpenAd.fullScreenContentDelegate = self;
self.loadTime = [NSDate date];
}];
}
- (BOOL)wasLoadTimeLessThanFourHoursAgo {
// Check if ad was loaded more than four hours ago.
return [[NSDate Date] timeIntervalSinceDate:self.loadTime] < fourHoursInSeconds;
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd != nil && [self wasLoadTimeLessThanFourHoursAgo];
}
@end
Холодные старты и загрузочные экраны
В документации предполагается, что вы показываете рекламу при запуске приложения только тогда, когда пользователи выводят приложение на передний план, когда оно приостановлено в памяти. «Холодные запуски» происходят, когда приложение запускается, но ранее не было приостановлено в памяти.
Примером холодного запуска является первый запуск приложения пользователем. При холодном запуске у вас не будет ранее загруженной рекламы, готовой к немедленному показу. Задержка между запросом рекламы и её получением может привести к тому, что пользователи смогут немного попользоваться приложением, прежде чем столкнутся с внеконтекстной рекламой. Этого следует избегать, поскольку это негативно сказывается на пользовательском опыте.
Предпочтительный способ использования рекламы при запуске приложения при холодном запуске — использовать загрузочный экран для загрузки ресурсов игры или приложения и показывать рекламу только на загрузочном экране. Если приложение уже загрузилось и перенаправило пользователя на основной контент, не показывайте рекламу.
Лучшие практики
Google создала рекламу при запуске приложения, чтобы помочь вам монетизировать загрузочный экран, но важно помнить о передовых практиках, чтобы пользователи получали удовольствие от использования вашего приложения. Обязательно:
- Подождите, пока вы покажете первую рекламу при запуске приложения, пока пользователи не воспользуются им несколько раз.
- Показывайте рекламу при открытии приложения в то время, когда пользователям пришлось бы ждать загрузки приложения.
- Если под рекламой при открытии приложения отображается загрузочный экран, и загрузка экрана завершается до закрытия рекламы, вы можете закрыть загрузочный экран с помощью метода
adDidDismissFullScreenContent
.
Полный пример на GitHub
Следующие шаги
Узнайте больше о конфиденциальности пользователей .