Niestandardowe formaty reklam natywnych

Niestandardowe formaty reklam

Podobnie jak ich odpowiedniki zdefiniowane w systemie, niestandardowe formaty reklam natywnych są wczytywane przy użyciu obiektów GADAdLoader. Wpisanie stałej GADAdLoaderAdTypeCustomNative w tablicy adTypes podczas inicjowania obiektu GADAdLoader spowoduje, że podczas wczytywania reklam będzie ona wysyłać do niej żądania niestandardowych formatów natywnych.

GADCustomNativeAdLoaderDelegate

Protokół wczytywania formatów niestandardowych ma 2 metody. Pierwszy z nich jest używany przez funkcję GADAdLoader do sprawdzania, o jakie identyfikatory formatów powinna prosić:

Swift

public func customNativeAdFormatIDs(for adLoader: GADAdLoader) -> [Any]

Objective-C

- (NSArray *)customNativeAdFormatIDsForAdLoader:(GADAdLoader *)adLoader;

Każdy niestandardowy format reklamy natywnej ma odpowiedni identyfikator, który go identyfikuje. Po wywołaniu tej metody aplikacja powinna zwrócić tablicę zawierającą identyfikatory formatów reklam, które jest przygotowane do wyświetlenia.

Druga wiadomość jest wysyłana po wczytaniu 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, które służą do jednoznacznego odwoływania się do niestandardowych formatów reklam natywnych, znajdziesz w interfejsie Ad Manager w sekcji Natywna w menu Wyświetlanie:

Identyfikator formatu każdej niestandardowej reklamy natywnej jest widoczny obok jej nazwy. Kliknij jedną z nazwy, aby wyświetlić ekran ze szczegółowymi informacjami o polach formatu:

W tym miejscu można dodawać, edytować i usuwać poszczególne pola. Zapisz nazwę każdego zasobu. Nazwa to klucz służący do pobierania danych dla każdego zasobu 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 w systemie tym, że wydawcy mogą definiować własną listę zasobów, z których składa się reklama. Z tego powodu proces wyświetlania niestandardowych reklam natywnych różni się od procedury dla formatów zdefiniowanych przez system pod kilkoma względami:

  1. GADCustomNativeAd ma obsługiwać wszystkie utworzone przez Ciebie niestandardowe formaty reklam natywnych, dlatego nie ma nazwanych akcesorów zasobów. Zamiast tego udostępniane są metody takie jak imageForKey: i stringForKey:, które wykorzystują nazwę pola jako argument.
  2. Nie ma żadnej dedykowanej klasy widoku reklamy, takiej jak GADNativeAdView, której można użyć w komponencie GADCustomNativeAd. Możesz wybrać dowolny widok, który ma sens w przypadku Twoich oczekiwań.
  3. Nie ma żadnej dedykowanej klasy wyświetlenia reklamy, więc nie musisz rejestrować żadnych obejrzeń, z których korzystasz do wyświetlania zasobó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

My SimpleNativeAdView.m (fragment)

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"];
}
...

Natywne reklamy wideo do niestandardowych formatów reklam natywnych

Podczas tworzenia formatu niestandardowego możesz dodać go do filmów.

W implementacji aplikacji możesz użyć właściwości GADCustomNativeAd.mediaView, aby uzyskać widok filmu. Następnie dodaj ten widok do hierarchii widoków. Jeśli reklama nie zawiera treści wideo, zaplanuj alternatywne wyświetlanie reklamy bez filmu.

W podanym niżej przykładzie sprawdzamy, czy reklama zawiera treści wideo, i jeśli reklama wideo jest niedostępna, wyświetla się w jej miejscu obraz:

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]];
}
...

Więcej informacji o sposobie dostosowywania sposobu wyświetlania reklam wideo w niestandardowej reklamie natywnej znajdziesz w artykule GADVideoController.

Pobierz przykład renderowania niestandardowego w usłudze Ad Manager, aby zobaczyć przykład działania natywnej reklamy wideo w praktyce.

Obsługa niestandardowych kliknięć i wyświetleń reklam natywnych

W przypadku niestandardowych formatów reklam natywnych aplikacja odpowiada za rejestrowanie wyświetleń i raportowanie zdarzeń kliknięć do pakietu SDK.

Rejestrowanie wyświetleń

Aby zarejestrować wyświetlenie niestandardowej reklamy natywnej, wywołaj po prostu metodę recordImpression w odpowiednim elemencie GADCustomNativeAd:

Swift

myCustomNativeAd.recordImpression()

Objective-C

[myCustomNativeAd recordImpression];

SDK zapobiega rejestrowaniu zduplikowanych wyświetleń w przypadku pojedynczego żądania. Jeśli aplikacja przypadkowo wywoła tę metodę wiele razy w przypadku tej samej reklamy.

Raportowanie kliknięć

Aby zgłosić do pakietu SDK, że wystąpiło kliknięcie w widoku zasobów, wywołaj metodę performClickOnAssetWithKey: w odpowiednim elemencie GADCustomNativeAd i przekaż nazwę klikniętego zasobu. Jeśli np. masz zasób w formacie niestandardowym o nazwie „Obraz główny” i chcesz zgłosić kliknięcie widoku powiązanego z tym zasobem, 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 komponentów powiązanego z Twoją reklamą. Jeśli masz na przykład inny zasób o nazwie „Napisy”, który miał zostać wyświetlony, ale nie został kliknięty ani kliknięty przez użytkownika, aplikacja nie musi wywoływać funkcji performClickOnAssetWithKey: dla tego wyświetlenia.

Reagowanie na niestandardowe działania dotyczące kliknięć

GADCustomNativeAd ma właściwość customClickHandler typu GADNativeAdCustomClickHandler

Swift

typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void

Objective-C

typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);

Jest to blok (Objective-C) / zamknięcie (Swift), który akceptuje assetID jako parametr wejściowy, który identyfikuje kliknięty zasób.

Po kliknięciu niestandardowej reklamy natywnej pakiet SDK może odpowiedzieć na 3 sposoby w tej kolejności:

  1. Wywołaj blok customClickHandler w języku Objective-C lub zamknięcie w Swift, jeśli został ustawiony.
  2. Przejrzyj adresy URL precyzyjnych linków w reklamie i otwórz pierwszy z nich, który pasuje do aplikacji.
  3. Otwórz przeglądarkę i przejdź do tradycyjnego docelowego adresu URL reklamy.

Właściwość customClickHandler akceptuje blokadę w języku Objective-C i zamknięcie w Swift. Jeśli ustawisz blokadę lub zamknięcie, pakiet SDK uruchomi ją i nie będzie podejmować żadnych dalszych działań. Jeśli jednak ustawisz wartość zerową, pakiet SDK użyje precyzyjnego linku lub docelowych adresów URL zarejestrowanych w reklamie.

Dzięki niestandardowym modułom obsługi kliknięć aplikacja może samodzielnie zdecydować, jakie działanie najlepiej podjąć w odpowiedzi na kliknięcie – może to być aktualizacja interfejsu, prezentacja innego kontrolera widoku danych, czy tylko zarejestrowanie kliknięcia. Oto przykład, który pokazuje taki 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 działają reklamy natywne sprzedawane bezpośrednio, możesz użyć tego Ad Manager identyfikatora jednostki reklamowej:

/6499/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 zasobami:

  • Nagłówek (text)
  • MainImage (obraz)
  • Podpis (tekst)

Natywne reklamy zapasowe

Aby przetestować działanie natywnych reklam zapasowych, użyj tej jednostki reklamowejAd Manager :

/6499/example/native-backfill

Wyświetla przykładowe reklamy promujące instalacje aplikacji i reklamy z treścią zawierające nakładkę Informacja.

Pamiętaj, aby przed publikacją zaktualizować kod, tak aby odwołuje się do rzeczywistych identyfikatorów jednostek reklamowych i formatu.