Podziel się opinią i pomóż nam opracować harmonogram rozwoju pakietu SDK do reklam mobilnych Google. Wypełnij roczną ankietę dotyczącą pakietu SDK do reklam mobilnych Google na 2023 r., aby została zakończona 5 maja 2023 roku.

Zaawansowane reklamy natywne

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wyświetlanie zdefiniowanego przez system formatu reklamy natywnej

Po załadowaniu reklamy natywnej aplikacja otrzyma obiekt reklamy natywnej za pomocą jednego z komunikatów protokołu GADAdLoaderDelegate. To ona odpowiada za wyświetlanie reklamy (niekoniecznie musi to jednak nastąpić od razu). Aby ułatwić wyświetlanie formatów reklam zdefiniowanych przez system, pakiet SDK udostępnia przydatne materiały.

GADNativeAdView,

W przypadku obiektu GADNativeAd istnieje klasa „widok reklamy”: GADNativeAdView. Ta klasa wyświetlenia reklamy to UIView, którego wydawcy powinni używać do wyświetlania reklamy. Na przykład pojedyncza właściwość GADNativeAdView może wyświetlać jedno wystąpienie GADNativeAd. Każdy z obiektów UIView używanych do wyświetlania zasobów tej reklamy powinien być podwidokiem tego obiektu GADNativeAdView.

Jeśli na przykład wyświetlasz reklamę w komórce UITableView, hierarchia widoku dla jednej z komórek może wyglądać tak:

Klasa GADNativeAdView udostępnia też właściwość IBOutlets używaną do rejestrowania widoku danych dla poszczególnych zasobów, a także metodę rejestracji obiektu GADNativeAd. Rejestrowanie w ten sposób widoków pozwala pakietowi SDK automatycznie obsługiwać takie zadania jak:

  • Rejestrowanie kliknięć.
  • Rejestruje wyświetlenia (gdy na ekranie jest widoczny pierwszy piksel).
  • Wyświetlanie nakładki Informacja.

Nakładka Informacja

W przypadku pośrednich reklam natywnych (wyświetlanych przez AdMobreklamy zapasowe albo Ad Exchange lub AdSense) nakładka Informacja jest dodawana przez pakiet SDK. Pozostaw miejsce w preferowanym rogu widoku reklamy natywnej na automatycznie wstawione logo Informacja. Upewnij się też, że nakładka Informacja jest na obszarze, który pozwala łatwo zauważyć ikonę. Więcej informacji o wyglądzie i funkcji nakładki znajdziesz w wytycznych dotyczących implementacji natywnych reklam natywnych.

Atrybucja reklamy

Wyświetlając automatyczne reklamy natywne, musisz uwzględnić w atrybucji reklamy informację, że wyświetlenie jest reklamą.

Przykładowy kod

Zobaczmy, jak wyświetlać reklamy natywne za pomocą widoków wczytywanych dynamicznie z plików xib. Może to być bardzo przydatne w przypadku użycia metody GADAdLoaders skonfigurowanej tak, aby żądała wielu formatów.

Układy UIUI

Pierwszym krokiem jest układ UIViews, który będzie wyświetlać zasoby reklamy natywnej. Możesz to zrobić w Kreatorze interfejsu w taki sam sposób jak podczas tworzenia innego pliku XIB. Tak może wyglądać układ reklamy natywnej:

Zanotuj wartość klasy niestandardowej w prawym górnym rogu obrazu. Ustawiono

GADNativeAdView. To jest klasa wyświetlania reklamy używana do wyświetlania atrybutu GADNativeAd.

Musisz też ustawić klasę niestandardową GADMediaView, która służy do wyświetlania filmu lub obrazu reklamy.

Łączenie gniazdek z widokami

Gdy uzyskasz już widok i przypiszesz do układu właściwą klasę wyświetlenia reklamy, połącz wyjścia tego zasobu z utworzonym przez siebie zasobem UIViews. Oto jak można połączyć wyjścia zasobu w widoku reklamy z elementem UIViews utworzonym dla reklamy:

W panelu gniazdek GADNativeAdView zostały połączone z UIViews określonym w konstruktorze interfejsu. Dzięki temu pakiet SDK będzie wiedzieć, który zasób UIView wyświetla dany zasób. Trzeba też pamiętać, że wyjścia te zawierają widoki, które można kliknąć w reklamie.

Wyświetlanie reklamy

Po zakończeniu układu i połączeniu gniazd zewnętrznych ostatnim krokiem jest dodanie do aplikacji kodu, który wyświetli reklamę po jej załadowaniu. Aby wyświetlić reklamę w widoku zdefiniowanym powyżej:

Swift

// Mark: - GADNativeAdLoaderDelegate
func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADNativeAd) {
  print("Received native ad: \(nativeAd)")
  refreshAdButton.isEnabled = true
  // Create and place ad in view hierarchy.
  let nibView = Bundle.main.loadNibNamed("NativeAdView", owner: nil, options: nil)?.first
  guard let nativeAdView = nibView as? GADNativeAdView else {
    return
  }
  setAdView(nativeAdView)

  // Set ourselves as the native ad delegate to be notified of native ad events.
  nativeAd.delegate = self

  // Populate the native ad view with the native ad assets.
  // The headline and mediaContent are guaranteed to be present in every native ad.
  (nativeAdView.headlineView as? UILabel)?.text = nativeAd.headline
  nativeAdView.mediaView?.mediaContent = nativeAd.mediaContent

  // This app uses a fixed width for the GADMediaView and changes its height to match the aspect
  // ratio of the media it displays.
  if let mediaView = nativeAdView.mediaView, nativeAd.mediaContent.aspectRatio > 0 {
    let heightConstraint = NSLayoutConstraint(
      item: mediaView,
      attribute: .height,
      relatedBy: .equal,
      toItem: mediaView,
      attribute: .width,
      multiplier: CGFloat(1 / nativeAd.mediaContent.aspectRatio),
      constant: 0)
    heightConstraint.isActive = true
  }

  // These assets are not guaranteed to be present. Check that they are before
  // showing or hiding them.
  (nativeAdView.bodyView as? UILabel)?.text = nativeAd.body
  nativeAdView.bodyView?.isHidden = nativeAd.body == nil

  (nativeAdView.callToActionView as? UIButton)?.setTitle(nativeAd.callToAction, for: .normal)
  nativeAdView.callToActionView?.isHidden = nativeAd.callToAction == nil

  (nativeAdView.iconView as? UIImageView)?.image = nativeAd.icon?.image
  nativeAdView.iconView?.isHidden = nativeAd.icon == nil

  (nativeAdView.starRatingView as? UIImageView)?.image = imageOfStars(
    fromStarRating: nativeAd.starRating)
  nativeAdView.starRatingView?.isHidden = nativeAd.starRating == nil

  (nativeAdView.storeView as? UILabel)?.text = nativeAd.store
  nativeAdView.storeView?.isHidden = nativeAd.store == nil

  (nativeAdView.priceView as? UILabel)?.text = nativeAd.price
  nativeAdView.priceView?.isHidden = nativeAd.price == nil

  (nativeAdView.advertiserView as? UILabel)?.text = nativeAd.advertiser
  nativeAdView.advertiserView?.isHidden = nativeAd.advertiser == nil

  // In order for the SDK to process touch events properly, user interaction should be disabled.
  nativeAdView.callToActionView?.isUserInteractionEnabled = false

  // Associate the native ad view with the native ad object. This is
  // required to make the ad clickable.
  // Note: this should always be done after populating the ad views.
  nativeAdView.nativeAd = nativeAd
}

Objective-C

#pragma mark GADNativeAdLoaderDelegate implementation

- (void)adLoader:(GADAdLoader *)adLoader didReceiveNativeAd:(GADNativeAd *)nativeAd {
  NSLog(@"Received native ad: %@", nativeAd);
  self.refreshButton.enabled = YES;

  // Create and place ad in view hierarchy.
  GADNativeAdView *nativeAdView =
      [[NSBundle mainBundle] loadNibNamed:@"NativeAdView" owner:nil options:nil].firstObject;
  [self setAdView:nativeAdView];

  // Set the mediaContent on the GADMediaView to populate it with available
  // video/image asset.
  nativeAdView.mediaView.mediaContent = nativeAd.mediaContent;

  // Populate the native ad view with the native ad assets.
  // The headline is guaranteed to be present in every native ad.
  ((UILabel *)nativeAdView.headlineView).text = nativeAd.headline;

  // These assets are not guaranteed to be present. Check that they are before
  // showing or hiding them.
  ((UILabel *)nativeAdView.bodyView).text = nativeAd.body;
  nativeAdView.bodyView.hidden = nativeAd.body ? NO : YES;

  [((UIButton *)nativeAdView.callToActionView)setTitle:nativeAd.callToAction
                                              forState:UIControlStateNormal];
  nativeAdView.callToActionView.hidden = nativeAd.callToAction ? NO : YES;

    ((UIImageView *)nativeAdView.iconView).image = nativeAd.icon.image;
  nativeAdView.iconView.hidden = nativeAd.icon ? NO : YES;

  ((UIImageView *)nativeAdView.starRatingView).image = [self imageForStars:nativeAd.starRating];
  nativeAdView.starRatingView.hidden = nativeAd.starRating ? NO : YES;

  ((UILabel *)nativeAdView.storeView).text = nativeAd.store;
  nativeAdView.storeView.hidden = nativeAd.store ? NO : YES;

  ((UILabel *)nativeAdView.priceView).text = nativeAd.price;
  nativeAdView.priceView.hidden = nativeAd.price ? NO : YES;

  ((UILabel *)nativeAdView.advertiserView).text = nativeAd.advertiser;
  nativeAdView.advertiserView.hidden = nativeAd.advertiser ? NO : YES;

  // In order for the SDK to process touch events properly, user interaction
  // should be disabled.
  nativeAdView.callToActionView.userInteractionEnabled = NO;

  // Associate the native ad view with the native ad object. This is
  // required to make the ad clickable.
  nativeAdView.nativeAd = nativeAd;
}

Nasze repozytorium GitHub zawiera pełne implementacjenatywnych reklam natywnych napisane zarówno w Swift, jak i w celu C.

Pobierz przykład zaawansowanej reklamy natywnej

GADMediaView

Zasoby graficzne i wideo są wyświetlane użytkownikom za pomocą: GADMediaView. Jest to plik UIView, który można zdefiniować w pliku XIB lub utworzyć go dynamicznie. Należy go umieścić w hierarchii widoku GADNativeAdView, tak jak w przypadku każdego innego widoku zasobów.

Podobnie jak w przypadku wszystkich wyświetleń zasobów, widok multimediów musi zawierać swoje treści. Aby to zrobić, użyj właściwości mediaContent w GADMediaView. Właściwość mediaContent elementu GADNativeAd zawiera treści multimedialne, które można przekazać do GADMediaView.

Oto fragment kodu z przykładem Zaawansowane reklamy natywne (Swift | Goal-C) wypełnia GADMediaView zasobami reklam natywnych z wykorzystaniem GADMediaContent z GADNativeAd:

Swift

nativeAdView.mediaView?.mediaContent = nativeAd.mediaContent

Objective-C

nativeAdView.mediaView.mediaContent = nativeAd.mediaContent;

Sprawdź, czy w pliku narzędzia do tworzenia interfejsu natywnego dla widoku reklamy natywnej masz ustawioną klasę niestandardową „GADMediaView” i czy jest ona połączona z gniazdkiem mediaView.

Zmiana trybu treści obrazu

Podczas wyświetlania obrazów klasa GADMediaView przestrzega właściwości UIViewcontentMode. Jeśli chcesz zmienić sposób skalowania obrazu w elemencie GADMediaView, ustaw odpowiednią wartość UIViewContentMode we właściwości contentMode elementu GADMediaView, aby uzyskać ten efekt.

Aby na przykład wypełnić właściwość GADMediaView, gdy wyświetlany jest obraz (reklama nie zawiera wideo):

Swift

nativeAdView.mediaView?.contentMode = .aspectFill

Objective-C

nativeAdView.mediaView.contentMode = UIViewContentModeAspectFill;

Treści GAD

Klasa GADMediaContent zawiera dane związane z treścią multimedialną reklamy natywnej, które są wyświetlane za pomocą klasy GADMediaView. Po ustawieniu właściwości GADMediaView mediaContent:

  • Jeśli zasób wideo jest dostępny, zostanie zbuforowany i zacznie się wyświetlać w obrębie GADMediaView. Zasób filmu jest dostępny, sprawdzając hasVideoContent.

  • Jeśli reklama nie zawiera zasobu wideo, zasób mainImage jest pobierany i umieszczany w sekcji GADMediaView.