รูปแบบโฆษณาที่กำหนดเอง
รูปแบบโฆษณาเนทีฟที่กำหนดเองจะโหลดโดยใช้ออบเจ็กต์ GADAdLoader
เช่นเดียวกับรูปแบบโฆษณาเนทีฟที่ระบบกําหนด การรวมค่าคงที่ GADAdLoaderAdTypeCustomNative
ไว้ในอาร์เรย์ adTypes
เมื่อเริ่มต้น GADAdLoader
จะกําหนดค่าให้ขอรูปแบบเนทีฟที่กําหนดเองเมื่อโหลดโฆษณา
GADCustomNativeAdLoaderDelegate
โปรโตคอลสำหรับการโหลดรูปแบบที่กำหนดเองมี 2 วิธี GADAdLoader
ใช้รายการแรกเพื่อดูว่าควรขอรหัสรูปแบบใด
Swift
public func customNativeAdFormatIDs(for adLoader: GADAdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(GADAdLoader *)adLoader;
รูปแบบโฆษณาเนทีฟที่กำหนดเองทุกรูปแบบจะมีรหัสรูปแบบที่เกี่ยวข้องซึ่งระบุรูปแบบนั้น เมื่อเรียกใช้เมธอดนี้ แอปควรแสดงผลอาร์เรย์ที่มีรหัสรูปแบบของโฆษณาที่เตรียมแสดง
ระบบจะส่งข้อความที่ 2 เมื่อโฆษณาเนทีฟที่กำหนดเองโหลดแล้ว ซึ่งจะคล้ายกับข้อความสำหรับรูปแบบที่ระบบกําหนด ดังนี้
Swift
public func adLoader(_ adLoader: GADAdLoader, didReceive customNativeAd: GADCustomNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader didReceiveCustomNativeAd:(GADCustomNativeAd *)customNativeAd;
รหัสรูปแบบ
รหัสรูปแบบที่ใช้อ้างอิงรูปแบบโฆษณาเนทีฟที่กําหนดเองอย่างเจาะจงจะอยู่ใน UI ของ Ad Manager ในส่วนเนทีฟภายในเมนูแบบเลื่อนลงการแสดงโฆษณา
รหัสรูปแบบของโฆษณาเนทีฟที่กําหนดเองแต่ละรายการจะปรากฏข้างชื่อ การคลิกชื่อใดชื่อหนึ่งจะนำคุณไปยังหน้าจอรายละเอียดซึ่งแสดงข้อมูลเกี่ยวกับช่องของรูปแบบ
จากที่นี่ คุณจะเพิ่ม แก้ไข และนำฟิลด์แต่ละรายการออกได้ จดชื่อของเนื้อหาแต่ละรายการไว้ ชื่อคือคีย์ที่ใช้รับข้อมูลสำหรับชิ้นงานแต่ละรายการเมื่อแสดงรูปแบบโฆษณาเนทีฟที่กําหนดเอง
การแสดงโฆษณาเนทีฟรูปแบบที่กำหนดเอง
รูปแบบโฆษณาเนทีฟที่กำหนดเองแตกต่างจากรูปแบบที่ระบบกําหนดตรงที่ผู้เผยแพร่โฆษณามีสิทธิ์กำหนดรายการชิ้นงานที่ประกอบกันเป็นโฆษณา ด้วยเหตุนี้ กระบวนการแสดงโฆษณาเนทีฟที่กําหนดเองจึงแตกต่างจากกระบวนการสําหรับรูปแบบที่ระบบกําหนดใน 2-3 ด้าน ดังนี้
- เนื่องจาก
GADCustomNativeAd
มีไว้เพื่อจัดการรูปแบบโฆษณาเนทีฟที่กำหนดเองที่คุณสร้างขึ้น จึงไม่มีตัวเข้าถึงชิ้นงานที่มีชื่อ แต่จะมีเมธอดอย่างimageForKey:
และstringForKey:
ที่ใช้ชื่อช่องเป็นอาร์กิวเมนต์แทน - ไม่มีคลาสการแสดงโฆษณาเฉพาะ เช่น
GADNativeAdView
เพื่อใช้กับGADCustomNativeAd
คุณสามารถใช้มุมมองใดก็ได้ที่เหมาะกับประสบการณ์ของผู้ใช้ - เนื่องจากไม่มีคลาสมุมมองโฆษณาเฉพาะ คุณจึงไม่ต้องลงทะเบียนมุมมองใดๆ ที่ใช้แสดงชิ้นงานของโฆษณา
ต่อไปนี้คือตัวอย่างวิวโฆษณาที่แสดงโฆษณาเนทีฟที่กําหนดเองแบบง่าย
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 (ตัวอย่าง)
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"]; } ...
แสดงผลไอคอนตัวเลือกโฆษณาอื่นๆ
โฆษณาแบบจองล่วงหน้าที่แสดงในเขตเศรษฐกิจยุโรป (EEA) ต้องมีไอคอนตัวเลือกโฆษณาอื่นๆ และลิงก์ไปยังหน้าเกี่ยวกับโฆษณานี้ของ Google เพื่อรองรับกฎหมายบริการดิจิทัล (DSA) เมื่อติดตั้งใช้งานโฆษณาเนทีฟที่กำหนดเอง คุณจะเป็นผู้รับผิดชอบในการแสดงผลไอคอนตัวเลือกโฆษณาอื่นๆ โดยต้องทำตามขั้นตอนเพื่อแสดงผลและตั้งค่า Listener การคลิกสำหรับไอคอนตัวเลือกโฆษณาอื่นๆ เมื่อแสดงผลชิ้นงานโฆษณาหลัก
ตัวอย่างต่อไปนี้แสดงการแสดงผลไอคอนตัวเลือกโฆษณาอื่นๆ และกำหนดค่าลักษณะการคลิกที่เหมาะสม
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);
...
}
วิดีโอเนทีฟสําหรับรูปแบบโฆษณาเนทีฟที่กําหนดเอง
เมื่อสร้างรูปแบบที่กำหนดเอง คุณจะมีตัวเลือกในการทำให้รูปแบบมีสิทธิ์แสดงวิดีโอ
ในการใช้งานแอป คุณสามารถใช้พร็อพเพอร์ตี้ GADCustomNativeAd.mediaView
เพื่อรับยอดดูของวิดีโอ จากนั้นเพิ่มมุมมองนี้ลงในลําดับชั้นมุมมอง หากโฆษณาไม่มีเนื้อหาวิดีโอ ให้สร้างแผนสำรองเพื่อแสดงโฆษณาโดยไม่มีวิดีโอ
ตัวอย่างด้านล่างจะตรวจสอบว่าโฆษณามีเนื้อหาวิดีโอหรือไม่ และแสดงรูปภาพแทนหากไม่มีวิดีโอ
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]]; } ...
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีปรับแต่งประสบการณ์วิดีโอของโฆษณาเนทีฟที่กำหนดเองได้ที่ GADVideoController
ดาวน์โหลดตัวอย่างการแสดงผลที่กำหนดเองของ Ad Manager เพื่อดูตัวอย่างวิดีโอเนทีฟที่ใช้งานได้จริง
การจัดการคลิกและการแสดงผลของโฆษณาเนทีฟที่กําหนดเอง
สําหรับรูปแบบโฆษณาเนทีฟที่กําหนดเอง แอปของคุณมีหน้าที่รับผิดชอบในการบันทึกการแสดงผลและรายงานเหตุการณ์การคลิกไปยัง SDK
การแสดงผลที่บันทึก
หากต้องการบันทึกการแสดงผลของโฆษณาเนทีฟที่กําหนดเอง ให้เรียกใช้เมธอด recordImpression
ใน GADCustomNativeAd
ที่เกี่ยวข้อง
Swift
myCustomNativeAd.recordImpression()
Objective-C
[myCustomNativeAd recordImpression];
SDK จะป้องกันไม่ให้ระบบบันทึกการแสดงผลที่ซ้ำกันสําหรับคําขอเดียวในกรณีที่แอปเรียกใช้เมธอดหลายครั้งสําหรับโฆษณาเดียวกันโดยไม่ตั้งใจ
การรายงานการคลิก
หากต้องการรายงานให้ SDK ทราบว่ามีการคลิกในมุมมองชิ้นงาน ให้เรียกใช้เมธอด
performClickOnAssetWithKey:
ใน
GADCustomNativeAd
ที่เกี่ยวข้อง แล้วส่งชื่อชิ้นงานที่คลิก
ตัวอย่างเช่น หากคุณมีชิ้นงานในรูปแบบที่กำหนดเองชื่อ "MainImage" และต้องการรายงานการคลิกในมุมมองที่สอดคล้องกับชิ้นงานนั้น โค้ดจะมีลักษณะดังนี้
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
โปรดทราบว่าคุณไม่จําเป็นต้องเรียกใช้เมธอดนี้สําหรับการแสดงผลชิ้นงานทุกรายการที่เชื่อมโยงกับโฆษณา ตัวอย่างเช่น หากคุณมีชิ้นงานอื่นชื่อ "คำบรรยาย" ที่มีไว้เพื่อแสดงแต่ผู้ใช้ไม่ได้คลิกหรือแตะ แอปของคุณก็ไม่จําเป็นต้องเรียกใช้ performClickOnAssetWithKey:
สําหรับมุมมองนั้น
การตอบสนองต่อการกระทำจากการคลิกที่กําหนดเอง
GADCustomNativeAd
มีพร็อพเพอร์ตี้ customClickHandler
ที่เป็นประเภท
GADNativeAdCustomClickHandler
Swift
typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
นี่เป็นบล็อก (Objective-C) / การปิด (Swift) ที่ยอมรับ assetID
เป็นพารามิเตอร์อินพุต ซึ่งจะระบุชิ้นงานที่คลิก
เมื่อมีการคลิกโฆษณาเนทีฟที่กําหนดเอง จะมีการตอบสนองจาก SDK 3 รายการ ซึ่งจะพยายามดำเนินการตามลําดับต่อไปนี้
- เรียกใช้บล็อก
customClickHandler
ใน Objective-C หรือตัวปิดท้ายใน Swift หากมีการตั้งค่าไว้ - วนดู URL ของ Deep Link ของโฆษณาและเปิด URL แรกที่มีแอปที่ตรงกัน
- เปิดเบราว์เซอร์และไปที่ URL ปลายทางแบบดั้งเดิมของโฆษณา
พร็อพเพอร์ตี้ customClickHandler
ยอมรับบล็อกใน Objective-C และตัวปิดท้ายใน Swift หากคุณตั้งค่าการบล็อกหรือการปิด SDK จะเรียกใช้การตั้งค่าดังกล่าวและจะไม่ดําเนินการใดๆ เพิ่มเติม อย่างไรก็ตาม หากคุณตั้งค่าเป็นค่าว่าง SDK จะเปลี่ยนไปใช้ Deep Link และ/หรือ URL ปลายทางที่ลงทะเบียนกับโฆษณา
แฮนเดิลการคลิกที่กําหนดเองช่วยให้แอปตัดสินใจได้เองว่าควรดําเนินการใดดีที่สุดเมื่อมีการคลิก ไม่ว่าจะเป็นการอัปเดต UI, แสดงตัวควบคุมมุมมองอื่น หรือเพียงแค่บันทึกการคลิก ตัวอย่างต่อไปนี้แสดงการแจ้งเตือน
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"];
การทดสอบโค้ดโฆษณาเนทีฟ
โฆษณาแบบขายตรง
หากต้องการทดสอบว่าโฆษณาเนทีฟที่ขายโดยตรงเป็นอย่างไร คุณสามารถใช้รหัสหน่วยโฆษณา Ad Manager นี้
/21775744923/example/native
มีการกําหนดค่าให้แสดงตัวอย่างโฆษณาเพื่อการติดตั้งแอปและโฆษณาแบบคอนเทนต์ รวมถึงรูปแบบโฆษณาเนทีฟที่กําหนดเองด้วยชิ้นงานต่อไปนี้
- บรรทัดแรก (ข้อความ)
- MainImage (รูปภาพ)
- คำบรรยาย (ข้อความ)
โฆษณาเนทีฟที่ทดแทน
หากต้องการทดสอบลักษณะการทํางานของโฆษณาเนทีฟทดแทน ให้ใช้หน่วยโฆษณา Ad Manager ต่อไปนี้
/21775744923/example/native-backfill
โดยจะแสดงโฆษณาการติดตั้งแอปและโฆษณาเนื้อหาตัวอย่างที่มีการวางซ้อนตัวเลือกโฆษณาอื่นๆ
อย่าลืมอัปเดตโค้ดให้อ้างอิงหน่วยโฆษณาและรหัสรูปแบบจริงก่อนเผยแพร่