Niestandardowe formaty reklam
Podobnie jak formaty zdefiniowane przez system, niestandardowe formaty reklam natywnych są wczytywane za pomocą obiektów GADAdLoader
. Uwzględnienie stałej GADAdLoaderAdTypeCustomNative
w tablicy adTypes
podczas inicjowania obiektu GADAdLoader
spowoduje, że podczas wczytywania reklam będzie on wysyłać żądania niestandardowych formatów natywnych.
GADCustomNativeAdLoaderDelegate
Protokół wczytywania formatów niestandardowych ma 2 metody. Pierwszy z nich jest używany przez GADAdLoader
do określania, których identyfikatorów formatów powinien poprosić:
Swift
public func customNativeAdFormatIDs(for adLoader: GADAdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(GADAdLoader *)adLoader;
Każdy niestandardowy format reklamy natywnej ma odpowiadający mu identyfikator formatu. Po wywołaniu tej metody aplikacja powinna zwrócić tablicę zawierającą identyfikatory formatów reklam, które są gotowe do wyświetlenia.
Druga wiadomość jest wysyłana po załadowaniu niestandardowej reklamy natywnej, podobnie jak w przypadku formatów zdefiniowanych przez system:
Swift
public func adLoader(_ adLoader: GADAdLoader, didReceive customNativeAd: GADCustomNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader didReceiveCustomNativeAd:(GADCustomNativeAd *)customNativeAd;
Identyfikatory formatów
Identyfikatory formatów używane do jednoznacznego identyfikowania niestandardowych formatów reklam natywnych można znaleźć w interfejsie Ad Managera w sekcji Natywna w menu Wyświetlanie:
Obok nazwy każdej niestandardowej reklamy natywnej wyświetla się identyfikator formatu. Kliknięcie jednego z tych nazw spowoduje wyświetlenie ekranu z informacjami o polach formatu:
Tutaj możesz dodawać, edytować i usuwać poszczególne pola. Zanotuj nazwę każdego zasobu. Nazwa jest kluczem używanym do uzyskiwania danych o każdym komponencie podczas wyświetlania niestandardowego formatu reklamy natywnej.
Wyświetlanie niestandardowych formatów reklam natywnych
Niestandardowe formaty reklam natywnych różnią się od zdefiniowanych przez system tym, że wydawcy mogą samodzielnie zdefiniować listę komponentów reklamy. Z tego powodu proces wyświetlania niestandardowych reklam natywnych różni się od procesu wyświetlania formatów zdefiniowanych przez system w kilku aspektach:
- Funkcja
GADCustomNativeAd
obsługuje wszystkie utworzone przez Ciebie niestandardowe formaty natywne reklam, dlatego nie ma nazwanych metod dostępu do zasobów. Zamiast tego oferuje metody takie jakimageForKey:
istringForKey:
, które przyjmują nazwę pola jako argument. - Nie ma dedykowanej klasy widoku reklamy, takiej jak
GADNativeAdView
, która mogłaby być używana zGADCustomNativeAd
. Możesz używać dowolnego widoku, który jest odpowiedni dla Twoich użytkowników. - Ponieważ nie ma osobnej klasy widoku reklamy, nie musisz rejestrować widoków, których używasz 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: 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 (wycinek)
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"]; } ...
Renderowanie ikony Informacja
W ramach wsparcia aktu prawnego o usługach cyfrowych (DSA) reklamy z rezerwacją wyświetlane w Europejskim Obszarze Gospodarczym (EOG) muszą zawierać ikonę Informacje i link do strony „O tej reklamie” w Google. Implementując niestandardowe reklamy natywne, odpowiadasz za renderowanie ikony Informacja. Pamiętaj, aby zadbać o prawidłowe renderowanie tej ikony i odpowiednie działanie detektora kliknięć tej ikony podczas renderowania głównych komponentów reklamy.
W tym przykładzie renderujemy ikonę Informacja i konfigurujemy 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:
GADNativeAssetIdentifier.adChoicesViewAsset.rawValue)
}
func populate(withCustomNativeAd customNativeAd: GADCustomNativeAd) {
// Render the AdChoices image.
let adChoicesKey = GADNativeAssetIdentifier.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);
...
}
Natywny film w niestandardowych formatach reklam natywnych
Podczas tworzenia formatu niestandardowego możesz określić, czy ma on być odpowiedni do wyświetlania reklam wideo.
W implementacji aplikacji możesz użyć właściwości GADCustomNativeAd.mediaView
, aby uzyskać wyświetlenie 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.
Przykład poniżej sprawdza, czy reklama zawiera treści wideo, i wyświetla obraz, jeśli film nie jest dostępny:
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]]; } ...
Więcej informacji o dostosowywaniu wyświetlania filmów w niestandardowych reklamach natywnych znajdziesz w artykule GADVideoController.
Aby zobaczyć, jak działają natywne reklamy wideo, pobierz przykład niestandardowego renderowania w usłudze Ad Manager.
Obsługa kliknięć i wyświetleń niestandardowych reklam natywnych
W przypadku niestandardowych formatów reklam natywnych aplikacja odpowiada za rejestrowanie wyświetleń oraz raportowanie zdarzeń kliknięcia 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 pojedynczego żądania, jeśli Twoja aplikacja przypadkowo wywoła metodę wielokrotnie w przypadku tej samej reklamy.
Raportowanie kliknięć
Aby zgłosić do SDK, że nastąpiło kliknięcie widoku zasobu, wywołaj metodę performClickOnAssetWithKey:
w odpowiednim obiekcie GADCustomNativeAd
i przekaż nazwę zasobu, który został kliknięty.
Jeśli np. masz komponent w formacie niestandardowym o nazwie „MainImage” i chcesz zgłaszać kliknięcia widoku odpowiadające 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 widoku komponentu powiązanego z reklamą. Jeśli masz inny zasób o nazwie „Caption”, który ma być wyświetlany, ale nie może być klikany przez użytkownika, aplikacja nie musi wywoływać funkcji performClickOnAssetWithKey:
w tym widoku.
Odpowiedzi na działania niestandardowe po kliknięciu
GADCustomNativeAd
ma właściwość customClickHandler
, która jest typu GADNativeAdCustomClickHandler
Swift
typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
To jest blok (Objective-C) lub zamknięcie (Swift), który akceptuje parametr wejściowy assetID
, który identyfikuje zasób, który został kliknięty.
Gdy użytkownik kliknie niestandardową reklamę natywną, pakiet SDK może w tej kolejności podjąć 3 działania:
- Wywołaj blok
customClickHandler
w Objective-C lub zamknięcie w Swift, jeśli zostało ono ustawione. - Przeglądaj adresy URL głębokich linków reklamy i otwieraj pierwszy, dla którego można znaleźć pasującą aplikację.
- Otwórz przeglądarkę i otwórz tradycyjny adres URL docelowy reklamy.
Właściwość customClickHandler
akceptuje blok w Objective-C i zamknięcie w Swift. Jeśli ustawisz blokowanie lub zamknięcie, SDK wykona tę funkcję i nie podejmie żadnych dalszych działań. Jeśli jednak ustawisz wartość zerową, pakiet SDK użyje domyślnych adresów URL przekierowania lub docelowych zarejestrowanych w reklamie.
Niestandardowe metody obsługi kliknięć umożliwiają aplikacji samodzielne wybranie najlepszego działania w odpowiedzi na kliknięcie, np. zaktualizowanie interfejsu użytkownika, wyświetlenie innego kontrolera widoku lub po prostu odnotowanie kliknięcia. Oto przykład alertu:
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 reklam natywnych
Reklamy sprzedawane bezpośrednio
Jeśli chcesz przetestować natywne reklamy sprzedawane bezpośrednio, możesz użyć tego identyfikatora jednostki reklamowej w usłudze Ad Manager:
/21775744923/example/native
Jest skonfigurowana tak, aby wyświetlać przykładowe reklamy promujące instalacje aplikacji i reklamy z treścią, a także niestandardowy format reklamy natywnej z tymi komponentami:
- Nagłówek (tekst)
- MainImage (obraz)
- Podpis (tekst)
Natywne reklamy zastępcze
Aby przetestować działanie reklam natywnych, użyj tej jednostki reklamowej Ad Managera:
/21775744923/example/native-backfill
Będzie on wyświetlać przykładowe reklamy dotyczące instalacji aplikacji i treści, które zawierają nakładkę AdChoices.
Pamiętaj, aby przed uruchomieniem reklam zaktualizować kod, podając w nim rzeczywiste identyfikatory jednostek reklamowych i formatów.