Annonces à l'ouverture d'une application

Ce guide est destiné aux éditeurs qui intègrent des annonces à l'ouverture d'une application.

Les annonces à l'ouverture d'une application sont un format d'annonce spécial destiné aux éditeurs qui souhaitent monétiser les écrans de chargement de l'application. Les utilisateurs peuvent fermer les annonces à l'ouverture d'une application à tout moment. Les annonces à l'ouverture d'une application peuvent être diffusées lorsque les utilisateurs mettent votre application au premier plan.

Les annonces à l'ouverture affichent automatiquement une petite zone de branding pour faire savoir aux utilisateurs qu'ils se trouvent dans votre application. Voici un exemple d'annonce à l'ouverture d'une application :

Voici les grandes étapes à suivre pour implémenter des annonces à l'ouverture d'une application :

  1. Créez une classe administrateur qui charge une annonce avant que vous ayez besoin de la diffuser.
  2. Afficher l'annonce lors des événements de premier plan de l'application
  3. Gérer les rappels de présentation

Prérequis

Effectuez toujours des tests avec des annonces tests

Lorsque vous créez et testez vos applications, assurez-vous d'utiliser des annonces tests plutôt que des annonces de production. À défaut, votre compte risque d'être suspendu.

Le moyen le plus simple de charger des annonces tests consiste à utiliser notre ID de bloc d'annonces tests dédié pour les annonces d'ouverture d'application :

/21775744923/example/app-open

Il a été spécialement configuré pour renvoyer des annonces tests pour chaque demande. de l'utiliser dans vos propres applications lors du codage, des tests et du débogage. Il suffit de créer remplacez-le par votre propre ID de bloc d'annonces avant de publier votre application.

Pour en savoir plus sur le fonctionnement des annonces tests du SDK Mobile Ads, consultez la section Annonces :

Implémenter une classe de gestionnaire

Votre annonce doit s'afficher rapidement. Il est donc préférable de la charger avant que vous n'ayez besoin de l'afficher. Ainsi, votre annonce est prête à être diffusée dès que l'utilisateur saisit votre application. Implémentez une classe Manager pour effectuer des demandes d'annonces à l'avance lorsque vous en avez besoin. pour diffuser l'annonce.

Créez une classe Singleton appelée AppOpenAdManager et remplissez-la comme suit : ce qui suit:

Swift

class AppOpenAdManager: NSObject {
  var appOpenAd: GADAppOpenAd?
  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

Charger une annonce

L'étape suivante consiste à remplir la méthode loadAd().

Swift

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 GADAppOpenAd.load(
      withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
  } 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:@"/21775744923/example/app-open"
                       request:[GAMRequest 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;
             }];
}

Diffuser une annonce

L'étape suivante consiste à remplir la méthode showAdIfAvailable(). Si aucune annonce n'est disponible, la méthode tente de charger une annonce.

Swift

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(fromRootViewController: 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];
}

Diffuser l'annonce lors des événements de premier plan de l'application

Lorsque l'application devient active, appelez showAdIfAvailable() pour diffuser une annonce si ou en charge une nouvelle.

Swift

@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

Gérer les rappels de présentation

Lorsque votre application affiche une annonce à l'ouverture d'une application, vous devez utiliser GADFullScreenContentDelegate pour gérer certains événements de présentation. Dans vous devrez demander l'annonce à l'ouverture d'après la première annonce se termine la présentation.

Dans votre classe AppOpenAdManager, ajoutez les éléments suivants:

Swift

class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
  // ...

  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 GADAppOpenAd.load(
        withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
      appOpenAd?.fullScreenContentDelegate = self
    } catch {
      print("App open ad failed to load with error: \(error.localizedDescription)")
    }
    isLoadingAd = false
  }

  // ...

  // MARK: - GADFullScreenContentDelegate methods

  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("App open ad will be presented.")
  }

  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    appOpenAd = nil
    isShowingAd = false
    // Reload an ad.
    Task {
      await loadAd()
    }
  }

  func ad(
    _ ad: GADFullScreenPresentingAd,
    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:@"/21775744923/example/app-open"
                       request:[GAMRequest 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

Prendre en compte l'expiration des annonces

Pour vous assurer de ne pas diffuser une annonce arrivée à expiration, vous pouvez ajouter une méthode au délégué d'application qui vérifie le temps écoulé depuis le chargement de la référence de votre annonce.

Dans votre AppOpenAdManager, ajoutez une propriété Date appelée loadTime et définissez-la lorsque votre annonce se charge. Vous pouvez ensuite ajouter une méthode qui renvoie true si moins d'un certain nombre d'heures se sont écoulées depuis le chargement de votre annonce. Assurez-vous que vous vérifiez la validité de la référence de votre annonce avant d'essayer de la diffuser.

Swift

class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
  var appOpenAd: GADAppOpenAd?
  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 GADAppOpenAd.load(
        withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
      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:@"/21775744923/example/app-open"
                       request:[GAMRequest 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

Démarrages à froid et écrans de chargement

La documentation suppose que vous ne diffusez des annonces à l'ouverture d'une application que lorsque les utilisateurs au premier plan de votre application lorsqu'elle est suspendue en mémoire. Les "démarrages à froid" se produisent lorsque votre application est lancée, mais qu'elle n'était pas suspendue en mémoire auparavant.

Un exemple de démarrage à froid est lorsqu'un utilisateur ouvre votre application pour la première fois. Avec les démarrages à froid, vous n'avez pas d'annonce à l'ouverture d'une application chargée s'affichent immédiatement. Délai entre le moment où vous demandez une annonce et celui où vous en recevez une peut créer une situation où les utilisateurs peuvent utiliser brièvement votre application avant être surpris par une annonce hors contexte. Cela doit être évité, car il s'agit d'un mauvaise expérience utilisateur.

Pour les démarrages à froid, il est préférable d'utiliser des annonces à l'ouverture d'une application via un écran de chargement. pour charger vos composants de jeu ou d'application, et pour ne diffuser l'annonce qu'à partir du moment l'écran. Si le chargement de votre application est terminé et que l'utilisateur a été redirigé vers la page le contenu de votre application, ne la diffusez pas.

Bonnes pratiques

Google a conçu les annonces à l'ouverture d'une application pour vous aider à monétiser l'écran de chargement de votre application. il est important de garder à l'esprit les meilleures pratiques afin que vos utilisateurs aient plaisir à utiliser votre application. Veillez à:

  • Avant de diffuser votre première annonce à l'ouverture d'une application, les utilisateurs doivent avoir utilisé votre l'application à plusieurs reprises.
  • Diffuser des annonces à l'ouverture de l'application lorsque vos utilisateurs attendent que votre application se charge
  • Si un écran de chargement s'affiche sous l'annonce à l'ouverture et que votre écran de chargement jusqu'à ce que l'annonce soit ignorée, essayez d'ignorer écran de chargement dans la méthode adDidDismissFullScreenContent.

Exemple complet sur GitHub

Swift Objective-C

Étapes suivantes

En savoir plus sur la confidentialité des utilisateurs