Özel reklam biçimleri
Sistem tarafından tanımlanan benzerleri gibi özel doğal reklam biçimleri de GADAdLoader nesneleri kullanılarak yüklenir. GADAdLoader başlatılırken adTypes dizisine GADAdLoaderAdTypeCustomNative sabitinin eklenmesi, reklamlar yüklenirken özel yerel biçimler isteyecek şekilde yapılandırılmasını sağlar.
GADCustomNativeAdLoaderDelegate
Özel biçimleri yükleme protokolünde iki yöntem vardır. İlk yöntem, GADAdLoader tarafından hangi biçim kimliklerini istemesi gerektiğini öğrenmek için kullanılır:
Swift
public func customNativeAdFormatIDs(for adLoader: AdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(AdLoader *)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örüntülemeye hazır olduğu reklamların biçim kimliklerini içeren bir dizi döndürmelidir.
İkinci mesaj, özel doğal reklam yüklendiğinde gönderilir. Bu mesaj, sistem tarafından tanımlanan biçimler için gönderilen mesajlara benzer:
Swift
public func adLoader(_ adLoader: AdLoader, didReceive customNativeAd: CustomNativeAd)
Objective-C
- (void)adLoader:(AdLoader *)adLoader didReceiveCustomNativeAd:(CustomNativeAd *)customNativeAd;
Biçim kimlikleri
Özel doğal reklam biçimlerini benzersiz şekilde tanımlamak için kullanılan biçim kimlikleri, Ad Manager kullanıcı arayüzünde Yayınlama açılır listesindeki Doğal 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 alanlar tek tek eklenebilir, düzenlenebilir ve kaldırılabilir. Öğelerin her birinin adını not edin. Ad, özel doğal reklam biçiminizi gösterirken her bir öğenin verilerini almak için kullanılan anahtardır.
Özel doğal reklam biçimlerini görüntüleme
Özel doğal reklam biçimleri, sistem tarafından tanımlanan biçimlerden farklıdır. Yayıncılar, bir reklamı oluşturan kendi öğe listelerini tanımlayabilir. Bu nedenle, özel doğal reklamları görüntüleme süreci, sistem tanımlı biçimler için olan süreçten birkaç açıdan farklıdır:
GADCustomNativeAd, oluşturduğunuz özel doğal reklam biçimlerinden herhangi birini işlemek için tasarlandığından adlandırılmış öğe erişimcileri yoktur. Bunun yerine, alanın adını bağımsız değişken olarak alanimageForKey:vestringForKey:gibi yöntemler sunar.GADCustomNativeAdile kullanılacakGADNativeAdViewgibi özel bir reklam görüntüleme sınıfı yoktur. Kullanıcı deneyiminize uygun olan herhangi bir görünümü kullanabilirsiniz.- Özel bir reklam görüntüleme sınıfı olmadığından, reklam öğelerini görüntülemek için kullandığınız görünümlerden hiçbirini kaydetmeniz gerekmez.
Aşağıda, basit bir özel doğal reklam gösterebilen 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: CustomNativeAd) { ... } }
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 (excerpt)
Swift
... func populateWithCustomNativeAd(_ customNativeAd: CustomNativeAd) { 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ı için Reklam Seçenekleri simgesi ve Google'ın Bu reklam hakkında sayfasına bağlantı gerekir. Ö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 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:
NativeAssetIdentifier.adChoicesViewAsset.rawValue)
}
func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {
// Render the AdChoices image.
let adChoicesKey = NativeAssetIdentifier.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 doğal reklam biçimleri için doğal video
Özel biçim oluştururken biçimi video için uygun hale getirme seçeneğiniz vardır.
Uygulama uygulamanızda reklamın GADMediaContent örneğini almak için GADCustomNativeAd.mediaContent özelliğini kullanın.
Reklamın video içeriği barındırıp barındırmadığını belirlemek için hasVideoContent özelliğini kontrol edin. Reklamda video içeriği varsa GADMediaView görünümü oluşturun, mediaContent özelliğini atayın ve medya görünümünü görünüm hiyerarşinize ekleyin. Reklamda video içeriği yoksa resim gibi alternatif bir öğe oluşturun.
Aşağıdaki örnekte, reklamda video içeriği olup olmadığı kontrol edilir ve video yoksa bunun yerine bir resim gösterilir:
Swift
func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {
// Remove all the media placeholder's subviews.
for subview: UIView in mainPlaceholder.subviews {
subview.removeFromSuperview()
}
// This custom native ad has both a video and image associated with it. Use the video
// asset if available, or fall back to the image asset.
let mainView: UIView
if customNativeAd.mediaContent.hasVideoContent {
let mediaView = MediaView()
mediaView.mediaContent = customNativeAd.mediaContent
mainView = mediaView
} else {
let image: UIImage? = customNativeAd.image(forKey: "MainImage")?.image
mainView = UIImageView(image: image)
}
mainPlaceholder.addSubview(mainView)
// Size the media view to fill the container size.
mainView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
mainView.leadingAnchor.constraint(equalTo: mainPlaceholder.leadingAnchor),
mainView.trailingAnchor.constraint(equalTo: mainPlaceholder.trailingAnchor),
mainView.topAnchor.constraint(equalTo: mainPlaceholder.topAnchor),
mainView.bottomAnchor.constraint(equalTo: mainPlaceholder.bottomAnchor),
])
}
Objective-C
- (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd {
// Remove all the media placeholder's subviews.
for (UIView *subview in self.mainPlaceholder.subviews) {
[subview removeFromSuperview];
}
// This custom native ad has both a video and image associated with it. Use the video
// asset if available, or fall back to the image asset.
UIView *mainView = nil;
if (customNativeAd.mediaContent.hasVideoContent) {
GADMediaView *mediaView = [[GADMediaView alloc] init];
mediaView.mediaContent = customNativeAd.mediaContent;
mainView = mediaView;
} else {
UIImage *image = [customNativeAd imageForKey:@"MainImage"].image;
mainView = [[UIImageView alloc] initWithImage:image];
}
[self.mainPlaceholder addSubview:mainView];
// Size the media view to fill the container size.
mainView.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[
[mainView.leadingAnchor constraintEqualToAnchor:self.mainPlaceholder.leadingAnchor],
[mainView.trailingAnchor constraintEqualToAnchor:self.mainPlaceholder.trailingAnchor],
[mainView.topAnchor constraintEqualToAnchor:self.mainPlaceholder.topAnchor],
[mainView.bottomAnchor constraintEqualToAnchor:self.mainPlaceholder.bottomAnchor],
]];
}
Özel bir doğal reklam videosunu özelleştirme hakkında ayrıntılı bilgi için
GADVideoController
sınıfına bakın.
Özel yerel video uygulaması için Swift ve Objective-C dillerindeki Ad Manager özel oluşturma örneğini inceleyin.
Özel doğal reklam tıklamalarını 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 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 yöntemi yanlışlıkla birden çok kez çağırırsa SDK, tek bir istek için yinelenen gösterimlerin kaydedilmesini engeller.
Tıklamaları raporlama
Bir öğe görünümünde tıklama gerçekleştiğini SDK'ya 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ümdeki bir tıklamayı raporlamak istiyorsanız kodunuz aşağıdaki gibi görünür:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
Reklamınızla ilişkili her öğe görünümü için bu yöntemi çağırmanız gerekmez. Örneğin, gösterilmesi amaçlanan ancak kullanıcı tarafından tıklanması veya dokunulması gerekmeyen "Başlık" adlı başka bir öğeniz varsa uygulamanızın bu görünüm için performClickOnAssetWithKey: yöntemini çağırması gerekmez.
Özel tıklama işlemlerine yanıt verme
GADCustomNativeAd, GADNativeAdCustomClickHandler türünde bir customClickHandler özelliğine sahip
Swift
typealias NativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
Bu, tıklanan öğeyi tanımlayan bir giriş parametresi olarak assetID kabul eden bir blok (Objective-C) / kapatmadır (Swift).
Özel bir doğal reklam tıklandığında SDK'dan üç olası yanıt alınabilir. Bu yanıtlar şu sırayla denenir:
- Ayarlanmışsa Objective-C'de
customClickHandlerbloğunu veya Swift'te closure'ı çağırın. - Reklamın derin bağlantı URL'leri arasında gezinir ve eşleşen bir uygulamanın bulunabildiği ilk URL'yi açar.
- Bir tarayıcı açın ve reklamın geleneksel hedef URL'sine gidin.
customClickHandler özelliği, Objective-C'de bir blok ve Swift'te bir kapanış kabul eder. Bir blok veya kapanış ayarlarsanız SDK bunu çalıştırır ve başka bir işlem yapmaz. Ancak nil değeri ayarlarsanız SDK, reklamda kayıtlı olan derin bağlantı ve/veya hedef URL'lere geri döner.
Özel tıklama işleyiciler, 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ünüm denetleyicisi sunma veya yalnızca tıklamayı günlüğe kaydetme) kendisinin karar vermesine olanak tanır. Aşağıda bir uyarı örneği verilmiştir:
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 doğal reklamların nasıl olduğunu test etmek isterseniz ş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ınlayacak şekilde yapılandırılmıştır:
- Başlık (metin)
- MainImage (resim)
- Başlık (metin)
Doğal dolgu reklamlar
Doğal yedek reklamların davranışını test etmek için şu 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.
Canlı yayına geçmeden önce kodunuzu gerçek reklam birimi ve biçim kimliklerinize başvuracak şekilde güncellemeyi unutmayın.