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 :
- Créez une classe administrateur qui charge une annonce avant que vous ayez besoin de la diffuser.
- Afficher l'annonce lors des événements de premier plan de l'application
- Gérer les rappels de présentation
Prérequis
- Suivez les instructions de configuration figurant dans notre Guide de démarrage guide de démarrage.
- Sachez comment configurer votre appareil en tant qu'appareil de test.
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
Étapes suivantes
En savoir plus sur la confidentialité des utilisateurs