Formati degli annunci personalizzati
Come le loro controparti definite dal sistema, i formati degli annunci nativi personalizzati vengono caricati utilizzando gli oggetti GADAdLoader. Se includi la costante GADAdLoaderAdTypeCustomNative nell'array adTypes durante l'inizializzazione di un GADAdLoader, quest'ultimo verrà configurato in modo da richiedere formati nativi personalizzati durante il caricamento degli annunci.
GADCustomNativeAdLoaderDelegate
Il protocollo per il caricamento dei formati personalizzati prevede due metodi. Il primo viene utilizzato da GADAdLoader per scoprire quali ID formato deve richiedere:
Swift
public func customNativeAdFormatIDs(for adLoader: AdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(AdLoader *)adLoader;
Ogni formato dell'annuncio nativo personalizzato ha un ID formato corrispondente che lo identifica. Quando viene chiamato questo metodo, l'app deve restituire un array contenente gli ID formato degli annunci che è pronta a visualizzare.
Il secondo messaggio viene inviato quando l'annuncio nativo personalizzato è stato caricato, in modo molto simile a quelli per i formati definiti dal sistema:
Swift
public func adLoader(_ adLoader: AdLoader, didReceive customNativeAd: CustomNativeAd)
Objective-C
- (void)adLoader:(AdLoader *)adLoader didReceiveCustomNativeAd:(CustomNativeAd *)customNativeAd;
ID formato
Gli ID formato utilizzati per fare riferimento in modo univoco ai formati degli annunci nativi personalizzati sono disponibili nell'interfaccia utente di Ad Manager nella sezione Nativo all'interno del menu a discesa Pubblicazione:

L'ID formato di ogni annuncio nativo personalizzato viene visualizzato accanto al nome. Se fai clic su uno dei nomi, viene visualizzata una schermata dei dettagli che mostra le informazioni sui campi del formato:

Da qui, i singoli campi possono essere aggiunti, modificati e rimossi. Prendi nota del nome di ogni asset. Il nome è la chiave utilizzata per ottenere i dati per ogni asset durante la visualizzazione del formato dell'annuncio nativo personalizzato.
Visualizzazione di formati degli annunci nativi personalizzati
I formati degli annunci nativi personalizzati si differenziano da quelli definiti dal sistema in quanto i publisher hanno la possibilità di definire il proprio elenco di asset che compongono un annuncio. Per questo motivo, la procedura per la visualizzazione degli annunci nativi personalizzati differisce da quella per i formati definiti dal sistema in alcuni modi:
- Poiché
GADCustomNativeAdè progettato per gestire qualsiasi formato dell'annuncio nativo personalizzato che crei, non dispone di metodi di accesso agli asset denominati. Offre invece metodi comeimageForKey:estringForKey:che accettano il nome del campo come argomento. - Non esiste una classe di visualizzazione degli annunci dedicata come
GADNativeAdViewda utilizzare conGADCustomNativeAd. Puoi utilizzare qualsiasi visualizzazione che abbia senso per la tua esperienza utente. - Poiché non esiste una classe di visualizzazione dell'annuncio dedicata, non è necessario registrare nessuna delle visualizzazioni utilizzate per mostrare gli asset dell'annuncio.
Ecco un esempio di visualizzazione dell'annuncio in grado di mostrare un semplice annuncio nativo personalizzato:
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: CustomNativeAd) { ... } }
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 (estratto)
Swift
... func populateWithCustomNativeAd(_ customNativeAd: CustomNativeAd) { 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"]; } ...
Esegui il rendering dell'icona Scegli Tu!
Nell'ambito del supporto del Regolamento sui servizi digitali (DSA), gli annunci basati su prenotazione pubblicati nello Spazio economico europeo (SEE) richiedono un'icona Scegli Tu! e un link alla pagina Su questo annuncio di Google. Quando implementi annunci nativi personalizzati, sei responsabile del rendering dell'icona Scegli Tu!. È importante che tu svolga i passaggi per eseguire il rendering e impostare il click listener per l'icona Scegli Tu! durante il rendering degli asset annuncio principali.
L'esempio seguente esegue il rendering dell'icona Scegli Tu! e configura il comportamento dei clic.
Swift
class MySimpleNativeAdView: UIView {
@IBOutlet weak var adChoicesView: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Enable clicks on AdChoices.
adChoicesView.addGestureRecognizer(
UITapGestureRecognizer(
target: self,
action: #selector(performClickOnAdChoices(_:))))
adChoicesView.isUserInteractionEnabled = true
}
@objc func performClickOnAdChoices(_ sender: UIImage!) {
customNativeAd.performClickOnAsset(withKey:
NativeAssetIdentifier.adChoicesViewAsset.rawValue)
}
func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {
// Render the AdChoices image.
let adChoicesKey = NativeAssetIdentifier.adChoicesViewAsset.rawValue
let adChoicesImage = customNativeAd.image(forKey: adChoicesKey)?.image
adChoicesView.image = adChoicesImage
adChoicesView.isHidden = adChoicesImage == nil
...
}
}
Objective-C
@interface MySimpleNativeAdView ()
@property(nonatomic, weak) IBOutlet UIImageView *adChoicesView;
@end
@implementation MySimpleNativeAdView
- (void)awakeFromNib {
[super awakeFromNib];
// Enable clicks on AdChoices.
[self.adChoicesView addGestureRecognizer:[[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(performClickOnAdChoices:)]];
self.adChoicesView.userInteractionEnabled = YES;
}
- (void)performClickOnAdChoices:(UITapGestureRecognizer *)sender {
[self.customNativeAd performClickOnAssetWithKey:GADNativeAdChoicesViewAsset];
}
- (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd {
// Render the AdChoices image.
GADNativeAdImage *adChoicesAsset = [customNativeAd
imageForKey:GADNativeAdChoicesViewAsset];
self.adChoicesView.image = adChoicesAsset.image;
self.adChoicesView.hidden = (adChoicesAsset == nil);
...
}
Video nativo per formati degli annunci nativi personalizzati
Quando crei un formato personalizzato, hai la possibilità di renderlo idoneo per i video.
Nell'implementazione dell'app, utilizza la proprietà GADCustomNativeAd.mediaContent per ottenere l'istanza GADMediaContent dell'annuncio.
Per determinare se l'annuncio contiene contenuti video, controlla la proprietà hasVideoContent. Se l'annuncio include contenuti video, crea una visualizzazione GADMediaView, assegna la proprietà mediaContent e aggiungi la visualizzazione multimediale alla gerarchia di oggetti View. Se l'annuncio non contiene contenuti video, esegui il rendering di un asset alternativo, ad esempio un'immagine.
L'esempio seguente verifica se l'annuncio ha contenuti video e mostra un'immagine al suo posto se un video non è disponibile:
Swift
func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {
// Remove all the media placeholder's subviews.
for subview: UIView in mainPlaceholder.subviews {
subview.removeFromSuperview()
}
// This custom native ad has both a video and image associated with it. Use the video
// asset if available, or fall back to the image asset.
let mainView: UIView
if customNativeAd.mediaContent.hasVideoContent {
let mediaView = MediaView()
mediaView.mediaContent = customNativeAd.mediaContent
mainView = mediaView
} else {
let image: UIImage? = customNativeAd.image(forKey: "MainImage")?.image
mainView = UIImageView(image: image)
}
mainPlaceholder.addSubview(mainView)
// Size the media view to fill the container size.
mainView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
mainView.leadingAnchor.constraint(equalTo: mainPlaceholder.leadingAnchor),
mainView.trailingAnchor.constraint(equalTo: mainPlaceholder.trailingAnchor),
mainView.topAnchor.constraint(equalTo: mainPlaceholder.topAnchor),
mainView.bottomAnchor.constraint(equalTo: mainPlaceholder.bottomAnchor),
])
}
Objective-C
- (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd {
// Remove all the media placeholder's subviews.
for (UIView *subview in self.mainPlaceholder.subviews) {
[subview removeFromSuperview];
}
// This custom native ad has both a video and image associated with it. Use the video
// asset if available, or fall back to the image asset.
UIView *mainView = nil;
if (customNativeAd.mediaContent.hasVideoContent) {
GADMediaView *mediaView = [[GADMediaView alloc] init];
mediaView.mediaContent = customNativeAd.mediaContent;
mainView = mediaView;
} else {
UIImage *image = [customNativeAd imageForKey:@"MainImage"].image;
mainView = [[UIImageView alloc] initWithImage:image];
}
[self.mainPlaceholder addSubview:mainView];
// Size the media view to fill the container size.
mainView.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[
[mainView.leadingAnchor constraintEqualToAnchor:self.mainPlaceholder.leadingAnchor],
[mainView.trailingAnchor constraintEqualToAnchor:self.mainPlaceholder.trailingAnchor],
[mainView.topAnchor constraintEqualToAnchor:self.mainPlaceholder.topAnchor],
[mainView.bottomAnchor constraintEqualToAnchor:self.mainPlaceholder.bottomAnchor],
]];
}
Per maggiori dettagli sulla personalizzazione di un video dell'annuncio nativo personalizzato, consulta la classe GADVideoController.
Per un'implementazione di video nativi personalizzati, visualizza l'esempio di rendering personalizzato di Ad Manager in Swift e Objective-C.
Gestione di clic e impressioni degli annunci nativi personalizzati
Per i formati degli annunci nativi personalizzati, l'app è responsabile della registrazione delle impressioni e della segnalazione degli eventi di clic all'SDK.
Registrazione delle impressioni
Per registrare un'impressione per un annuncio nativo personalizzato, chiama il metodo recordImpression sul GADCustomNativeAd corrispondente:
Swift
myCustomNativeAd.recordImpression()
Objective-C
[myCustomNativeAd recordImpression];
L'SDK impedisce la registrazione di impressioni duplicate per una singola richiesta, se l'app chiama accidentalmente il metodo più volte per lo stesso annuncio.
Clic sui report
Per segnalare all'SDK che è stato fatto clic su una visualizzazione asset, chiama il metodo performClickOnAssetWithKey: sull'oggetto GADCustomNativeAd corrispondente e passa il nome dell'asset su cui è stato fatto clic.
Ad esempio, se nel tuo formato personalizzato avevi un asset denominato "MainImage"
e volevi generare un report su un clic sulla visualizzazione corrispondente a quell'asset,
il codice sarebbe simile al seguente:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
Tieni presente che non è necessario chiamare questo metodo per ogni visualizzazione di asset associata al tuo annuncio. Se, ad esempio, hai un altro asset chiamato "Didascalia" che deve essere visualizzato, ma non deve essere selezionato o toccato dall'utente, l'app non deve chiamare performClickOnAssetWithKey: per quella visualizzazione.
Risposta alle azioni di clic personalizzate
GADCustomNativeAd ha una proprietà customClickHandler di tipo GADNativeAdCustomClickHandler
Swift
typealias NativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
Si tratta di un blocco (Objective-C) / chiusura (Swift) che accetta un assetID come parametro di input, che identifica l'asset su cui è stato fatto clic.
Quando viene eseguito un clic su un annuncio nativo personalizzato, l'SDK può fornire tre possibili risposte, tentate in questo ordine:
- Richiama il blocco
customClickHandlerin Objective-C o la chiusura in Swift, se ne è stata impostata una. - Scorri gli URL dei deep link dell'annuncio e apri il primo per cui è possibile trovare un'app corrispondente.
- Apri un browser e vai all'URL di destinazione tradizionale dell'annuncio.
La proprietà customClickHandler accetta un blocco in Objective-C e una chiusura in Swift. Se imposti un blocco o una chiusura, l'SDK lo eseguirà e non intraprenderà altre azioni. Tuttavia, se imposti un valore nil, l'SDK utilizzerà il deep link
e/o gli URL di destinazione registrati con l'annuncio.
I gestori di clic personalizzati consentono alla tua app di decidere autonomamente l'azione migliore da intraprendere in risposta a un clic, ad esempio aggiornare l'UI, presentare un altro view controller o semplicemente registrare il clic. Ecco un esempio che mostra un avviso:
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"];
Testa il codice dell'annuncio nativo
Annunci venduti direttamente
Se vuoi provare gli annunci nativi venduti direttamente, puoi utilizzare questo ID unità pubblicitaria di Ad Manager:
/21775744923/example/native
È configurato per erogare annunci di app di esempio e annunci di contenuti, nonché un formato dell'annuncio nativo personalizzato con i seguenti asset:
- Headline (testo)
- MainImage (immagine)
- Didascalia (testo)
Annunci di backfill nativi
Per testare il comportamento degli annunci di backfill nativi, utilizza questa unità pubblicitaria di Ad Manager:
/21775744923/example/native-backfill
Pubblicherà annunci di esempio per l'installazione di app e per i contenuti che includono l'overlay Scegli Tu!
Prima di pubblicare il codice, ricordati di aggiornarlo in modo che faccia riferimento agli ID effettivi dell'unità pubblicitaria e del formato.