รูปแบบโฆษณาเนทีฟที่กําหนดเอง

รูปแบบโฆษณาที่กำหนดเอง

ระบบจะโหลดรูปแบบโฆษณาเนทีฟที่กำหนดเองโดยใช้ออบเจ็กต์ 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;

รหัสรูปแบบ

รหัสรูปแบบที่ใช้ในการอ้างถึงรูปแบบโฆษณาเนทีฟที่กำหนดเองแบบไม่ซ้ำกันได้ใน Ad Manager UI ในส่วนโฆษณาเนทีฟภายในเมนูแบบเลื่อนลงการแสดงโฆษณา

รหัสรูปแบบของโฆษณาเนทีฟที่กำหนดเองแต่ละรายการจะปรากฏข้างชื่อโฆษณา การคลิกชื่อใดชื่อหนึ่งจะนำคุณไปยังหน้าจอรายละเอียดที่แสดงข้อมูลเกี่ยวกับช่องของรูปแบบ ดังนี้

คุณจะเพิ่ม แก้ไข และนำช่องแต่ละช่องออกได้จากที่นี่ จดชื่อของแต่ละเนื้อหา ชื่อเป็นคีย์ที่ใช้รับข้อมูลของเนื้อหาแต่ละรายการ เมื่อแสดงรูปแบบโฆษณาเนทีฟที่กำหนดเองของคุณ

การแสดงรูปแบบโฆษณาเนทีฟที่กำหนดเอง

รูปแบบโฆษณาเนทีฟที่กำหนดเองแตกต่างจากรูปแบบที่ระบบกำหนดตรงที่ผู้เผยแพร่โฆษณาจะมีอำนาจในการกำหนดรายการเนื้อหาที่ประกอบขึ้นเป็นโฆษณาของตนเอง ด้วยเหตุนี้ ขั้นตอนการแสดงโฆษณาเนทีฟที่กำหนดเองจึงแตกต่างจากรูปแบบที่ระบบกำหนดดังนี้

  1. เนื่องจาก GADCustomNativeAd มีไว้เพื่อจัดการรูปแบบโฆษณาเนทีฟที่กำหนดเองที่คุณสร้างขึ้น จึงไม่มีผู้เข้าถึงชิ้นงานที่มีชื่อ แต่จะมีเมธอดอย่างเช่น imageForKey: และ stringForKey: ที่ใช้ชื่อของช่องเป็นอาร์กิวเมนต์
  2. ไม่มีคลาสการดูโฆษณาเฉพาะอย่าง GADNativeAdView เพื่อใช้กับ GADCustomNativeAd คุณสามารถใช้มุมมองใดก็ได้ที่เหมาะกับประสบการณ์ของผู้ใช้
  3. เนื่องจากไม่มีคลาสการดูโฆษณาเฉพาะ คุณจึงไม่จำเป็นต้องบันทึกมุมมองใดๆ ที่คุณใช้เพื่อแสดงเนื้อหาของโฆษณา

ต่อไปนี้เป็นตัวอย่างมุมมองโฆษณาที่สามารถแสดงโฆษณาเนทีฟที่กำหนดเองแบบง่าย

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

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

วิดีโอเนทีฟสำหรับรูปแบบโฆษณาเนทีฟที่กำหนดเอง

เมื่อสร้างรูปแบบที่กำหนดเอง คุณจะมีตัวเลือกในการทำให้รูปแบบดังกล่าวมีสิทธิ์แสดงในวิดีโอ

เมื่อใช้งานแอป คุณสามารถใช้พร็อพเพอร์ตี้ 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]];
  [self.mainPlaceholder
      addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[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 แบบ โดยจะพยายามตามลำดับต่อไปนี้

  1. เรียกใช้บล็อก customClickHandler ใน Objective-C หรือปิดใน Swift หากมีการตั้งค่าไว้
  2. วนซ้ำ URL ของ Deep Link ของโฆษณา แล้วเปิดแอปแรกที่จะพบแอปที่ตรงกัน
  3. เปิดเบราว์เซอร์และไปที่ URL ปลายทางแบบเดิมของโฆษณา

พร็อพเพอร์ตี้ customClickHandler ยอมรับการบล็อกใน Objective-C และการปิดใน Swift หากคุณตั้งค่าการบล็อกหรือการปิด SDK จะเรียกใช้ SDK ดังกล่าวและไม่ดําเนินการใดๆ เพิ่มเติม แต่หากตั้งค่าเป็น nil SDK จะกลับไปใช้ URL 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 รหัสหน่วยโฆษณานี้

/6499/example/native

โฆษณานี้ได้รับการกำหนดค่าให้แสดงตัวอย่างโฆษณาเพื่อการติดตั้งแอปและเนื้อหา รวมถึงรูปแบบโฆษณาเนทีฟที่กำหนดเองด้วยเนื้อหาต่อไปนี้

  • บรรทัดแรก (ข้อความ)
  • รูปภาพหลัก (รูปภาพ)
  • คำบรรยายภาพ (ข้อความ)

โฆษณาเนทีฟทดแทน

หากต้องการทดสอบลักษณะการทำงานของโฆษณาทดแทนเนทีฟ ให้ใช้หน่วยโฆษณาAd Manager นี้

/6499/example/native-backfill

โดยจะแสดงตัวอย่างโฆษณาเพื่อการติดตั้งแอปและโฆษณาแบบคอนเทนต์ ที่มีการวางซ้อน "ตัวเลือกโฆษณาอื่นๆ"

อย่าลืมอัปเดตโค้ดให้อ้างอิงถึงหน่วยโฆษณาและรหัสรูปแบบจริงของคุณก่อนนำไปใช้จริง