Ö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:
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 alanimageForKey:
vestringForKey:
gibi yöntemler sunar.GADCustomNativeAd
ile birlikte kullanılacakGADNativeAdView
gibi özel bir reklam görüntüleme sınıfı yoktur. Kullanıcı deneyiminiz için uygun olan görünümü kullanabilirsiniz.- Ö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:
- Ayarlanmışsa Objective-C'te
customClickHandler
bloğunu veya Swift'te kapatmayı çağırın. - Reklamın derin bağlantı URL'lerini sırayla inceleyin ve eşleşen bir uygulamanın bulunabildiği ilk URL'yi açın.
- 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.