Formats d'annonces personnalisés
Tout comme leurs homologues définis par le système, les formats d'annonces natives personnalisés sont chargés à l'aide d'objets GADAdLoader
. Si vous incluez la constante GADAdLoaderAdTypeCustomNative
dans le tableau adTypes
lors de l'initialisation d'un GADAdLoader
, il est configuré pour demander des formats natifs personnalisés lors du chargement des annonces.
GADCustomNativeAdLoaderDelegate
Le protocole de chargement des formats personnalisés comporte deux méthodes. Le premier est utilisé par GADAdLoader
pour connaître les ID de format qu'il doit demander:
Swift
public func customNativeAdFormatIDs(for adLoader: GADAdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(GADAdLoader *)adLoader;
Chaque format personnalisé d'annonce native est associé à un ID qui l'identifie. Lorsque cette méthode est appelée, votre application doit renvoyer un tableau contenant les identifiants des formats des annonces qu'elle est prête à diffuser.
Le second message est envoyé lors du chargement de l'annonce native personnalisée, comme pour les formats définis par le système:
Swift
public func adLoader(_ adLoader: GADAdLoader, didReceive customNativeAd: GADCustomNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader didReceiveCustomNativeAd:(GADCustomNativeAd *)customNativeAd;
ID de format
Les ID de format utilisés pour faire référence de manière unique aux formats d'annonces natives personnalisés se trouvent dans Ad Manager l'UI, dans la section Native du menu déroulant Diffusion:
L'ID du format de chaque annonce native personnalisée s'affiche à côté de son nom. Cliquez sur l'un des noms pour accéder à un écran de détails contenant des informations sur les champs du format:
Vous pouvez alors ajouter, modifier et supprimer des champs individuels. Notez le nom de chacun des éléments. Le nom est la clé utilisée pour obtenir les données de chaque élément lors de l'affichage de votre format personnalisé d'annonce native.
Afficher des formats personnalisés d'annonces natives
Les formats d'annonces natives personnalisés diffèrent de ceux définis par le système dans la mesure où les éditeurs peuvent définir leur propre liste d'éléments qui composent une annonce. De ce fait, le processus d'affichage des annonces natives personnalisées diffère de celui des formats définis par le système à plusieurs égards:
- Étant donné que
GADCustomNativeAd
est destiné à gérer tous les formats d'annonces natives personnalisés que vous créez, il ne possède pas d'accesseurs d'éléments nommés. À la place, il propose des méthodes telles queimageForKey:
etstringForKey:
, qui utilisent le nom du champ comme argument. - Il n'existe pas de classe d'affichage d'annonce dédiée comme
GADNativeAdView
à utiliser avecGADCustomNativeAd
. Vous êtes libre d'utiliser l'affichage qui convient le mieux à votre expérience utilisateur. - Comme il n'existe pas de classe d'affichage d'annonce dédiée, vous n'avez pas besoin d'enregistrer les vues que vous utilisez pour afficher les composants de l'annonce.
Voici un exemple de vue d'annonce capable d'afficher une annonce native personnalisée simple:
MySimpleNativeAdView.h
Swift
import UIKit import GoogleMobileAds /// Custom native ad view class with format ID 10063170. class MySimpleNativeAdView: UIView { /// Weak references to this ad's asset views. @IBOutlet weak var headlineView: UILabel! @IBOutlet weak var mainImageView: UIImageView! @IBOutlet weak var captionView: UILabel! ... /// Populates the ad view with the custom native ad object. func populateWithCustomNativeAd(_ customNativeAd: GADCustomNativeAd) { ... } }
Objective-C
@import UIKit; @import GoogleMobileAds; /// View representing a custom native ad format with format ID 10063170. @interface MySimpleNativeAdView : UIView // Weak references to this ad's asset views. @property(weak, nonatomic) IBOutlet UILabel *headlineView; @property(weak, nonatomic) IBOutlet UIImageView *mainImageView; @property(weak, nonatomic) IBOutlet UILabel *captionView; /// Populates the ad view with the custom native ad object. - (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd; @end
MySimpleNativeAdView.m (extrait)
Swift
... func populateWithCustomNativeAd(_ customNativeAd: GADCustomNativeAd) { self.customNativeAd = customNativeAd // Populate the custom native ad assets. headlineView.text = self.customNativeAd.stringForKey("Headline") mainImageView.image = self.customNativeAd.imageForKey("MainImage")?.image captionView.text = self.customNativeAd.stringForKey("Caption") } ...
Objective-C
... - (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd { self.customNativeAd = customNativeAd; // Populate the custom native ad assets. self.headlineView.text = [customNativeAd stringForKey:@"Headline"]; self.mainImageView.image = [customNativeAd imageForKey:@"MainImage"].image; self.captionView.text = [customNativeAd stringForKey:@"Caption"]; } ...
Vidéo native pour les formats d'annonces natives personnalisés
Lorsque vous créez un format personnalisé, vous pouvez le rendre éligible pour les vidéos.
Dans l'implémentation de votre application, vous pouvez utiliser la propriété GADCustomNativeAd.mediaView
pour obtenir la vue de la vidéo. Ajoutez ensuite cette vue à votre hiérarchie de vues. Si l'annonce ne comporte pas de contenu vidéo, envisagez d'autres plans afin de la diffuser sans vidéo.
L'exemple ci-dessous vérifie si l'annonce comporte du contenu vidéo et affiche une image à la place si aucune vidéo n'est disponible:
Swift
... /// Populates the ad view with the custom native ad object. func populate(withCustomNativeAd customNativeAd: GADCustomNativeAd) { if customNativeAd.videoController.hasVideoContent(), let mediaView = customNativeAd.mediaView { updateMainView(mediaView) } else { // Assumes your native format has an image asset with the name MainImage. let image: UIImage? = customNativeAd.image(forKey: "MainImage")?.image updateMainView(UIImageView(image: image)) } } private func updateMainView(_ mainView:UIView) { // Assumes you have a placeholder view for your media content. // Remove all the placeholder's subviews. for subview: UIView in mainPlaceholder.subviews { subview.removeFromSuperview() } mainPlaceholder.addSubview(mainView) // Size the media view to fill our container size. mainView.translatesAutoresizingMaskIntoConstraints = false let viewDictionary: [AnyHashable: Any] = ["mainView":mainView] mainPlaceholder.addConstraints(NSLayoutConstraint.constraints( withVisualFormat: "H:|[mainView]|", options: [], metrics: nil, views: viewDictionary as? [String : Any] ?? [String : Any]())) mainPlaceholder.addConstraints(NSLayoutConstraint.constraints( withVisualFormat: "V:|[mainView]|", options: [], metrics: nil, views: viewDictionary as? [String : Any] ?? [String : Any]())) } ...
Objective-C
... - (void)populateWithCustomNativeAd:(GADCustomNativeAd *)ad { UIView *mainView = nil; if (ad.videoController.hasVideoContent) { mainView = ad.mediaView; } else { // Assumes your native format has an image asset with the name MainImage. UIImage *image = [ad imageForKey:@"MainImage"].image; mainView = [[UIImageView alloc] initWithImage:image]; } // Assumes you have a placeholder view for your media content. for (UIView *subview in self.mainPlaceholder.subviews) { [subview removeFromSuperview]; } [self.mainPlaceholder addSubview:mainView]; // Size the main view to fill our container size. [mainView setTranslatesAutoresizingMaskIntoConstraints:NO]; NSDictionary *viewDictionary = NSDictionaryOfVariableBindings(mainView); [self.mainPlaceholder addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mainView]|" options:0 metrics:nil views:viewDictionary]]; [self.mainPlaceholder addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mainView]|" options:0 metrics:nil views:viewDictionary]]; } ...
Pour en savoir plus sur la personnalisation de l'expérience vidéo d'une annonce native personnalisée, consultez la section GADVideoController.
Téléchargez l'exemple d'affichage personnalisé Ad Manager pour voir un exemple pratique de vidéo native.
Gérer les impressions et les clics personnalisés sur des annonces natives
Pour les formats d'annonces natives personnalisés, votre application est chargée d'enregistrer les impressions et de signaler les événements de clic au SDK.
Impressions enregistrées
Pour enregistrer une impression pour une annonce native personnalisée, il vous suffit d'appeler la méthode recordImpression
sur le GADCustomNativeAd
correspondant:
Swift
myCustomNativeAd.recordImpression()
Objective-C
[myCustomNativeAd recordImpression];
Le SDK empêche l'enregistrement d'impressions en double pour une seule requête, si votre application appelle accidentellement la méthode plusieurs fois pour la même annonce.
Générer des rapports sur les clics
Pour signaler au SDK qu'un clic s'est produit sur une vue d'asset, appelez la méthode performClickOnAssetWithKey:
au niveau de l'GADCustomNativeAd
correspondant et transmettez le nom de l'asset sur lequel l'utilisateur a cliqué.
Par exemple, si vous disposez d'un élément dans votre format personnalisé appelé "MainImage" et que vous souhaitez enregistrer un clic sur la vue correspondant à cet élément, votre code se présente comme suit:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
Notez qu'il n'est pas nécessaire d'appeler cette méthode pour chaque vue de composant associée à votre annonce. Par exemple, si vous disposez d'un autre asset appelé "Caption" (Sous-titre), et que l'utilisateur ne clique pas dessus, votre application n'a pas besoin d'appeler performClickOnAssetWithKey:
pour cette vue.
Répondre aux actions de clic personnalisé
GADCustomNativeAd
comporte une propriété customClickHandler
de type GADNativeAdCustomClickHandler
.
Swift
typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
Un bloc (Objectif-C) ou une route fermée (Swift) acceptent un assetID
comme paramètre d'entrée, qui identifie l'élément sur lequel l'utilisateur a cliqué.
Lorsqu'un clic est effectué sur une annonce native personnalisée, trois réponses possibles du SDK sont renvoyées dans l'ordre suivant:
- Appelez le bloc
customClickHandler
dans Objectif-C ou le bloc Fermé dans Swift, le cas échéant. - Parcourez les URL des liens profonds de l'annonce et ouvrez la première pour laquelle une application correspondante peut être trouvée.
- Ouvrez un navigateur et accédez à l'URL de destination standard de l'annonce.
La propriété customClickHandler
accepte un bloc dans Goal-C et une route fermée dans Swift. Si vous définissez un blocage ou une fermeture, le SDK l'exécutera et n'effectuera aucune autre action. Toutefois, si vous définissez une valeur nulle, le SDK utilisera le lien profond et/ou les URL de destination enregistrés avec l'annonce.
Les gestionnaires de clics personnalisés permettent à votre application de déterminer elle-même la meilleure action à effectuer en réponse à un clic, qu'il s'agisse de mettre à jour l'UI, de présenter un autre contrôleur de vue ou simplement de consigner le clic. Voici un exemple d'alerte:
Swift
myCustomNativeAd.customClickHandler = { assetID in if assetID == "MainImage" { let alertView = UIAlertView(title: "Custom Click", message: "You just clicked on the image!", delegate: self, cancelButtonTitle: "OK") alertView.alertViewStyle = .default alertView.show() } } myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[self.customNativeAd setCustomClickHandler:^(NSString *assetID){ if ([assetID isEqualToString:@"MainImage"]) { [[[UIAlertView alloc] initWithTitle:@"Custom Click" message:@"You just clicked on the image!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; } }]; [self.customNativeAd performClickOnAssetWithKey:@"MainImage"];
Tester le code d'annonce natif
Annonces vendues directement
Si vous souhaitez tester le fonctionnement des annonces natives vendues directement, vous pouvez utiliser cet Ad Manager ID de bloc d'annonces:
/6499/example/native
Elle est configurée pour diffuser des exemples d'annonces incitant à installer une application et d'annonces de contenu, ainsi qu'un format personnalisé d'annonce native avec les éléments suivants:
- Titre (texte)
- MainImage (image)
- Légende (texte)
Annonces de remplissage natives
Pour tester le comportement des annonces de remplissage natives, utilisez ce bloc d'annoncesAd Manager :
/6499/example/native-backfill
Elle diffusera des exemples d'annonces de contenu et d'installation d'applications incluant la superposition "Choisir sa pub".
N'oubliez pas de mettre à jour votre code de sorte qu'il fasse référence à vos identifiants réels de bloc d'annonces et de format avant de le diffuser.