Niestandardowe formaty reklam
Podobnie jak ich odpowiedniki zdefiniowane przez system, niestandardowe formaty reklam natywnych są wczytywane za pomocą obiektów GADAdLoader
. Umieszczenie stałej GADAdLoaderAdTypeCustomNative
w tablicy adTypes
podczas inicjowania GADAdLoader
spowoduje skonfigurowanie jej tak, aby podczas wczytywania reklam wysyłała żądania niestandardowych formatów natywnych.
GADCustomNativeAdLoaderDelegate
Protokół wczytywania formatów niestandardowych ma 2 metody. Pierwszy jest używany przez GADAdLoader
, aby określić, o które identyfikatory formatów ma prosić:
Swift
public func customNativeAdFormatIDs(for adLoader: AdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(AdLoader *)adLoader;
Każdy niestandardowy format reklamy natywnej ma odpowiadający mu identyfikator formatu, który go identyfikuje. Gdy ta metoda jest wywoływana, aplikacja powinna zwracać tablicę zawierającą identyfikatory formatów reklam, które są gotowe do wyświetlenia.
Druga wiadomość jest wysyłana po wczytaniu niestandardowej reklamy natywnej, podobnie jak w przypadku formatów zdefiniowanych w systemie:
Swift
public func adLoader(_ adLoader: AdLoader, didReceive customNativeAd: CustomNativeAd)
Objective-C
- (void)adLoader:(AdLoader *)adLoader didReceiveCustomNativeAd:(CustomNativeAd *)customNativeAd;
Identyfikatory formatów
Identyfikatory formatów używane do jednoznacznego odwoływania się do niestandardowych formatów reklam natywnych znajdują się w interfejsie Ad Managera w sekcji Reklama natywna w menu Wyświetlanie:
Identyfikator formatu każdej niestandardowej reklamy natywnej pojawia się obok jej nazwy. Kliknięcie jednej z nazw powoduje przejście do ekranu szczegółów, na którym wyświetlane są informacje o polach formatu:
Możesz tu dodawać, edytować i usuwać poszczególne pola. Zanotuj nazwę każdego komponentu. Nazwa jest kluczem używanym do pobierania danych poszczególnych komponentów podczas wyświetlania niestandardowego formatu reklamy natywnej.
Wyświetlanie niestandardowych formatów reklam natywnych
Niestandardowe formaty reklam natywnych różnią się od formatów zdefiniowanych przez system tym, że wydawcy mogą definiować własną listę komponentów, które składają się na reklamę. Z tego powodu proces wyświetlania niestandardowych reklam natywnych różni się od procesu wyświetlania formatów zdefiniowanych przez system na kilka sposobów:
- Ponieważ
GADCustomNativeAd
ma obsługiwać wszystkie tworzone przez Ciebie niestandardowe formaty reklam natywnych, nie ma nazwanych metod dostępu do komponentów. Zamiast tego oferuje metody takie jakimageForKey:
istringForKey:
, które przyjmują nazwę pola jako argument. - Nie ma specjalnej klasy widoku reklamy, takiej jak
GADNativeAdView
, której można by używać zGADCustomNativeAd
. Możesz używać dowolnego widoku, który jest odpowiedni dla Twoich użytkowników. - Nie ma specjalnej klasy widoku reklamy, więc nie musisz rejestrować żadnych widoków używanych do wyświetlania komponentów reklamy.
Oto przykład widoku reklamy, który może wyświetlać prostą niestandardową reklamę natywną:
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 (fragment)
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"]; } ...
Renderowanie ikony Informacja
W ramach wspierania aktu prawnego o usługach cyfrowych (DSA) reklamy z rezerwacji wyświetlane w Europejskim Obszarze Gospodarczym (EOG) muszą zawierać ikonę Informacja i link do strony „O tej reklamie” w Google. Implementując niestandardowe reklamy natywne, odpowiadasz za renderowanie ikony Informacja. Pamiętaj, aby zadbać o renderowanie i ustawienie detektora kliknięć tej ikony podczas renderowania głównych komponentów reklamy.
W przykładzie poniżej renderowana jest ikona Informacja i konfigurowane jest odpowiednie zachowanie po kliknięciu.
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);
...
}
Natywne reklamy wideo w niestandardowych formatach reklam natywnych
Podczas tworzenia formatu niestandardowego możesz włączyć obsługę formatu w przypadku reklam wideo.
W implementacji aplikacji możesz użyć właściwości
GADCustomNativeAd.mediaView
do pobrania widoku filmu. Następnie dodaj ten widok do hierarchii widoków. Jeśli reklama nie zawiera treści wideo, przygotuj alternatywne plany wyświetlania reklamy bez filmu.
Poniższy przykład sprawdza, czy reklama zawiera treści wideo, a jeśli nie, wyświetla w ich miejsce obraz:
Swift
... /// Populates the ad view with the custom native ad object. func populate(withCustomNativeAd customNativeAd: CustomNativeAd) { 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]]; } ...
Więcej informacji o dostosowywaniu odtwarzania filmów w niestandardowych reklamach natywnych znajdziesz w artykule GADVideoController.
Pobierz przykład renderowania niestandardowego w usłudze Ad Manager, aby zobaczyć działanie natywnych reklam wideo.
Obsługa kliknięć i wyświetleń niestandardowych reklam natywnych
W przypadku niestandardowych formatów reklam natywnych aplikacja odpowiada za rejestrowanie wyświetleń i zgłaszanie zdarzeń kliknięć do pakietu SDK.
Rejestrowanie wyświetleń
Aby zarejestrować wyświetlenie niestandardowej reklamy natywnej, wywołaj metodę
recordImpression
w odpowiednim obiekcie GADCustomNativeAd
:
Swift
myCustomNativeAd.recordImpression()
Objective-C
[myCustomNativeAd recordImpression];
Pakiet SDK zapobiega rejestrowaniu zduplikowanych wyświetleń w przypadku jednego żądania, jeśli aplikacja przypadkowo wywoła metodę wiele razy w przypadku tej samej reklamy.
Raportowanie kliknięć
Aby zgłosić do pakietu SDK, że w widoku komponentu nastąpiło kliknięcie, wywołaj metodę
performClickOnAssetWithKey:
w odpowiednim obiekcie
GADCustomNativeAd
i przekaż nazwę klikniętego komponentu.
Jeśli np. masz komponent w formacie niestandardowym o nazwie „Główny obraz” i chcesz raportować kliknięcie widoku odpowiadającego temu komponentowi, Twój kod będzie wyglądać tak:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
Pamiętaj, że nie musisz wywoływać tej metody w przypadku każdego wyświetlenia komponentu powiązanego z reklamą. Jeśli na przykład masz inny komponent o nazwie „Podpis”, który ma się wyświetlać, ale użytkownik nie ma go klikać ani w niego stukać, aplikacja nie musi wywoływać funkcji performClickOnAssetWithKey:
w przypadku tego widoku.
Reagowanie na niestandardowe działania po kliknięciu
GADCustomNativeAd
ma właściwość customClickHandler
, która jest typu
GADNativeAdCustomClickHandler
Swift
typealias NativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
Jest to blok (Objective-C) lub zamknięcie (Swift), które przyjmuje jako parametr wejściowy wartość assetID
, która identyfikuje kliknięty zasób.
Gdy użytkownik kliknie niestandardową reklamę natywną, pakiet SDK może zwrócić 3 rodzaje odpowiedzi w tej kolejności:
- Wywołaj blok
customClickHandler
w Objective-C lub zamknięcie w Swift, jeśli zostały ustawione. - Przejdź w pętli przez adresy URL linków bezpośrednich reklamy i otwórz pierwszy, dla którego można znaleźć pasującą aplikację.
- Otwórz przeglądarkę i przejdź do tradycyjnego docelowego adresu URL reklamy.
Właściwość customClickHandler
akceptuje blok w Objective-C i zamknięcie w Swift. Jeśli ustawisz blokadę lub zamknięcie, pakiet SDK uruchomi je i nie podejmie żadnych dalszych działań. Jeśli jednak ustawisz wartość nil, pakiet SDK powróci do linku do aplikacji lub adresów URL miejsca docelowego zarejestrowanych w reklamie.
Niestandardowe procedury obsługi kliknięć pozwalają aplikacji samodzielnie decydować o najlepszym działaniu w odpowiedzi na kliknięcie, np. o aktualizacji interfejsu, wyświetleniu innego kontrolera widoku lub po prostu zarejestrowaniu kliknięcia. Oto przykład, który pokazuje alert:
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"];
Testowanie kodu reklamy natywnej
Reklamy sprzedawane bezpośrednio
Jeśli chcesz sprawdzić, jak wyglądają sprzedawane bezpośrednio reklamy natywne, możesz użyć tego identyfikatora jednostki reklamowej Ad Managera:
/21775744923/example/native
Jest on skonfigurowany do wyświetlania przykładowych reklam promujących instalacje aplikacji i reklam z treścią, a także niestandardowego formatu reklamy natywnej z tymi komponentami:
- Nagłówek (tekst)
- MainImage (obraz)
- Podpis (text)
Zapasowe reklamy natywne
Aby przetestować działanie natywnych reklam zapasowych, użyj tej jednostki reklamowej Ad Managera:
/21775744923/example/native-backfill
Będzie wyświetlać reklamy instalacji przykładowych aplikacji i reklamy treści z nakładką Informacja.
Pamiętaj, aby przed opublikowaniem kodu zaktualizować go, tak aby odwoływał się do rzeczywistych identyfikatorów jednostki reklamowej i formatu.