Это руководство предназначено для издателей, интегрирующих рекламу при открытии приложений.
Реклама при открытии приложения — это специальный формат рекламы, предназначенный для издателей, желающих монетизировать экраны загрузки своих приложений. Реклама при открытии приложения может быть закрыта вашими пользователями в любое время. Реклама при открытии приложения может быть показана, когда пользователи выводят ваше приложение на передний план.
Реклама при открытии приложения автоматически показывает небольшую область брендинга, чтобы пользователи знали, что они в вашем приложении. Вот пример того, как выглядит реклама при открытии приложения:
Ниже приведены шаги, необходимые для внедрения рекламы при открытии приложения:
- Создайте класс менеджера, который загружает рекламу до того, как вам потребуется ее отобразить.
- Показывать рекламу во время событий перехода приложения на передний план.
- Обработка обратных вызовов презентаций.
Предпосылки
- Следуйте инструкциям по настройке в нашем руководстве по началу работы .
- Узнайте, как настроить ваше устройство в качестве тестового .
Всегда проводите тестирование с помощью тестовых объявлений
При создании и тестировании приложений убедитесь, что вы используете тестовые объявления, а не живые, производственные объявления. Невыполнение этого требования может привести к блокировке вашего аккаунта.
Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для рекламы при открытии приложения:
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
Следующие шаги
Узнайте больше о конфиденциальности пользователей .