Özel Yerel Reklam Biçimleri

Özel reklam biçimleri

Sistem tarafından tanımlanan benzerleri gibi özel doğal reklam biçimleri de GADAdLoader nesneleri kullanılarak yüklenir. Bir GADAdLoader nesnesi başlatırken GADAdLoaderAdTypeCustomNative sabit değerini adTypes dizisine dahil etmek, reklam yüklerken özel yerel biçimler isteyecek şekilde yapılandırır.

GADCustomNativeAdLoaderDelegate

Özel biçimleri yükleme protokolünde iki yöntem vardır. İlki, GADAdLoader tarafından hangi biçim kimliklerini istemesi gerektiğini bulmak için kullanılır:

Swift

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

Objective-C

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

Her özel doğal reklam biçiminin, onu tanımlayan bir biçim kimliği vardır. Bu yöntem çağrıldığında uygulamanız, göstermeye hazırlandığı reklamların biçim kimliklerini içeren bir dizi döndürmelidir.

Özel yerel reklam yüklendiğinde ikinci mesaj gönderilir. Bu mesaj, sistem tanımlı biçimler için gönderilenlere benzer:

Swift

public func adLoader(_ adLoader: GADAdLoader,
    didReceive customNativeAd: GADCustomNativeAd)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveCustomNativeAd:(GADCustomNativeAd *)customNativeAd;

Biçim kimlikleri

Özel yerel reklam biçimlerini benzersiz şekilde belirtmek için kullanılan biçim kimlikleri, Ad Manager kullanıcı arayüzündeki Yayınlama açılır menüsünün altındaki Yerel bölümünde bulunabilir:

Her özel doğal reklamın biçim kimliği, adının yanında görünür. Adlardan birini tıkladığınızda, biçimin alanlarıyla ilgili bilgileri gösteren bir ayrıntılar ekranına yönlendirilirsiniz:

Buradan tek tek alanlar eklenebilir, düzenlenebilir ve kaldırılabilir. Her bir öğenin adını not edin. Ad, özel yerel reklam biçiminizi görüntülerken her öğenin verilerini almak için kullanılan anahtardır.

Özel yerel reklam biçimlerini görüntüleme

Özel doğal reklam biçimleri, yayıncıların reklamı oluşturan kendi öğe listelerini tanımlama yetkisine sahip olması açısından sistem tarafından tanımlanan biçimlerden farklıdır. Bu nedenle, özel doğal reklamları gösterme süreci, sistem tanımlı biçimler için olandan birkaç açıdan farklıdır:

  1. GADCustomNativeAd, oluşturduğunuz özel doğal reklam biçimlerinin tümünü işleyeceğinden adlandırılmış öğe erişicileri yoktur. Bunun yerine, alanın adını bağımsız değişken olarak alan imageForKey: ve stringForKey: gibi yöntemler sunar.
  2. GADCustomNativeAd ile birlikte kullanılacak GADNativeAdView gibi özel bir reklam görüntüleme sınıfı yoktur. Kullanıcı deneyiminiz için uygun olan görünümü kullanabilirsiniz.
  3. Özel bir reklam görüntüleme sınıfı olmadığından, reklamın öğelerini görüntülemek için kullandığınız görünümlerin hiçbirini kaydetmeniz gerekmez.

Aşağıda, basit bir özel doğal reklam gösterebilen bir reklam görünümü örneği verilmiştir:

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 (alıntı)

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

Reklam Seçenekleri simgesini oluşturma

Dijital Hizmetler Yasası'nı (DSA) destekleme kapsamında, Avrupa Ekonomik Alanı'nda (AEA) yayınlanan rezervasyon reklamlarında bir Reklam Seçenekleri simgesi ve Google'ın Bu Reklam Hakkında sayfasının bağlantısı yer almalıdır. Özel doğal reklamları uygularken Reklam Seçenekleri simgesini oluşturma sorumluluğu size aittir. Ana reklam öğelerini oluştururken Reklam Seçenekleri simgesi için tıklama işleyici oluşturmak ve ayarlamak üzere bazı adımlar atmanız önemlidir.

Aşağıdaki örnekte, Reklam Seçenekleri simgesi oluşturulmakta ve uygun tıklama davranışı yapılandırılmaktadır.

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

Özel yerel reklam biçimleri için doğal video

Özel biçim oluştururken biçimi video için uygun hale getirebilirsiniz.

Uygulama uygulamanızda, videonun görüntüleme sayısını almak için GADCustomNativeAd.mediaView mülkünü kullanabilirsiniz. Ardından bu görünümü görünüm hiyerarşinize ekleyin. Reklamda video içeriği yoksa reklamı video olmadan göstermek için alternatif planlar yapın.

Aşağıdaki örnekte, reklamda video içeriği olup olmadığı kontrol edilir ve video yoksa bunun yerine bir resim gösterilir:

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

Özel doğal reklamın video deneyimini nasıl özelleştirebileceğiniz hakkında daha fazla bilgi için GADVideoController'a bakın.

Yerel videonun kullanıldığı bir örnek görmek için Ad Manager özel oluşturma örneğini indirin.

Özel yerel reklam tıklama ve gösterimlerini işleme

Özel doğal reklam biçimlerinde, gösterimleri kaydetme ve tıklama etkinliklerini SDK'ya bildirme sorumluluğu uygulamanıza aittir.

Gösterimleri kaydetme

Özel bir doğal reklam için gösterim kaydetmek istiyorsanız ilgili GADCustomNativeAd üzerinde recordImpression yöntemini çağırmanız yeterlidir:

Swift

myCustomNativeAd.recordImpression()

Objective-C

[myCustomNativeAd recordImpression];

Uygulamanız aynı reklam için yanlışlıkla yöntemi birden çok kez çağırırsa SDK, tek bir istek için yinelenen gösterimlerin kaydedilmesini engeller.

Tıklamaları raporlama

SDK'ya bir öğe görünümünde tıklama gerçekleştiğini bildirmek için ilgili GADCustomNativeAd üzerinde performClickOnAssetWithKey: yöntemini çağırın ve tıklanan öğenin adını iletin. Örneğin, özel biçiminizde "MainImage" adlı bir öğeniz varsa ve bu öğeye karşılık gelen görünümde bir tıklamayı bildirmek istiyorsanız kodunuz aşağıdaki gibi görünür:

Swift

myCustomNativeAd.performClickOnAsset(withKey: "MainImage")

Objective-C

[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];

Bu yöntemi, reklamınızla ilişkili her öğe görünümü için çağırmanız gerekmez. Örneğin, "Altyazı" adlı başka bir öğeniz varsa ve bu öğenin gösterilmesi amaçlanmışsa ancak kullanıcı tarafından tıklanmamışsa veya dokunulmamışsa uygulamanızın bu görünüm için performClickOnAssetWithKey: çağrısı yapması gerekmez.

Özel tıklama işlemlerine yanıt verme

GADCustomNativeAd, GADNativeAdCustomClickHandler türüne sahip bir customClickHandler mülküne sahiptir

Swift

typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void

Objective-C

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

Bu, giriş parametresi olarak assetID kabul eden ve tıklanan öğeyi tanımlayan bir bloktur (Objective-C) / kapanıştır (Swift).

Özel doğal bir reklam tıklandığında SDK'dan üç olası yanıt gelir ve bu yanıtlar şu sırayla denenir:

  1. Ayarlanmışsa Objective-C'te customClickHandler bloğunu veya Swift'te kapatmayı çağırın.
  2. Reklamın derin bağlantı URL'lerini sırayla inceleyin ve eşleşen bir uygulamanın bulunabildiği ilk URL'yi açın.
  3. Bir tarayıcı açıp reklamın geleneksel hedef URL'sine gidin.

customClickHandler mülkü, Objective-C'te bir blok ve Swift'te bir kapatma kabul eder. Bir engelleme veya kapatma ayarlarsanız SDK bunu çalıştırır ve başka işlem yapmaz. Ancak, boş bir değer ayarlarsanız SDK, reklama kayıtlı derin bağlantıya ve/veya hedef URL'lere geri döner.

Özel tıklama işleyicileri, uygulamanızın bir tıklamaya yanıt olarak yapılacak en iyi işleme (kullanıcı arayüzünü güncelleme, başka bir görüntüleme denetleyicisi sunma veya yalnızca tıklamayı günlüğe kaydetme) kendi başına karar vermesine olanak tanır. Uyarı gösteren bir örneği aşağıda bulabilirsiniz:

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

Doğal reklam kodunu test etme

Doğrudan satılan reklamlar

Doğrudan satılan yerel reklamların nasıl olduğunu test etmek istiyorsanız şu Ad Manager reklam birimi kimliğini kullanabilirsiniz:

/21775744923/example/native

Örnek uygulama yükleme ve içerik reklamlarının yanı sıra aşağıdaki öğeleri içeren özel bir doğal reklam biçimi yayınlamak için yapılandırılmıştır:

  • Başlık (metin)
  • MainImage (resim)
  • Caption (text) (Altyazı [metin])

Yerel dolgu reklamlar

Doğal yedek reklamların davranışını test etmek için aşağıdaki Ad Manager reklam birimini kullanın:

/21775744923/example/native-backfill

Reklam Seçenekleri yer paylaşımını içeren örnek uygulama yükleme ve içerik reklamları yayınlar.

Kodunuzu, yayınlanmadan önce gerçek reklam birimi ve biçim kimliklerinizi referans alacak şekilde güncellemeyi unutmayın.