API โฆษณาแบบเนทีฟทำให้คุณสามารถสร้างประสบการณ์แบบกำหนดเองสำหรับโฆษณาที่คุณแสดงในแอพของคุณได้ เมื่อใช้งาน API โฆษณาแบบเนทีฟ คุณจะไม่ได้รับโฆษณาสำเร็จรูปที่พร้อมให้แสดงในแอพได้เลย แต่จะได้รับกลุ่มคุณสมบัติของโฆษณา เช่น หัวข้อ รูปภาพ การกระตุ้นให้ดำเนินการ และคุณจะต้องใช้คุณสมบัติเหล่านี้เพื่อสร้าง UIView แบบกำหนดเองในพื้นที่ที่แสดงโฆษณา
โปรดศึกษาคู่มือเกี่ยวกับโฆษณาเนทีฟขณะออกแบบโฆษณาเนทีฟในแอพของคุณ
เราจะนำตำแหน่งการจัดวางโฆษณาแบบเนทีฟต่อไปนี้ไปใช้ คุณจะต้องสร้างมุมมองต่อไปนี้กับโฆษณาแบบเนทีฟของเรา
มุมมองที่ 1 ไอคอนผู้ลงโฆษณามุมมองที่ 2: หัวเรื่องโฆษณามุมมองที่ 3: ป้ายที่ได้รับการสนับสนุนมุมมองที่ 4: ตัวเลือกผู้ลงโฆษณา | มุมมองที่ 5: มุมมองสื่อโฆษณามุมมองที่ 6: บริบททางสังคมมุมมองที่ 7: เนื้อความโฆษณามุมมองที่ 8: ปุ่มกระตุ้นให้ดำเนินการในโฆษณา |
อย่าลืมดูคู่มือเริ่มต้นใช้งาน Audience Network และเริ่มต้นใช้งาน iOS ก่อนดำเนินการต่อ
เมื่อคุณออกแบบโฆษณาแบบเนทีฟและโฆษณาแบบแบนเนอร์ ตรวจสอบให้แน่ใจว่าคุณได้ปฏิบัติตาม “แนวทางเลย์เอาท์สำหรับ iOS” เพื่อมอบประสบการณ์สำหรับผู้ใช้ที่ดีที่สุด
Main.storyboard
เพิ่มองค์ประกอบ UIView ไปยังองค์ประกอบมุมมองหลัก แล้วตั้งชื่อว่า adUIView
adIconImageView
(FBMediaView), adTitleLabel
(UILabel), adCoverMediaView
(FBMediaView), adSocialContext
(UILabel), adCallToActionButton
(UIButton), adOptionsView
(FBAdOptionsView), adBodyLabel
(UILabel), sponsoredLabel
(UILabel) ใต้ adUIView
ตามที่แสดงในรูปด้านล่าง ViewController.m
(หากคุณใช้ Swift ให้เปิด ViewController.swift
) จากนั้นลาก adUIView
มาในอ็อบเจ็กต์ ViewController คุณอาจตั้งชื่อว่า adUIView
หลังจากนั้นคุณจะต้องทำแบบเดียวกันกับ adIconImageView
, adTitleLabel
, adCoverMediaView
, adSocialContext
, adCallToActionButton
, adOptionsView
, adBodyLabel
, sponsoredLabel
เมื่อคุณสร้างองค์ประกอบ UI ทั้งหมดที่จะแสดงโฆษณาแบบเนทีฟแล้ว ขั้นตอนต่อไปคือการโหลดโฆษณาแบบเนทีฟและเชื่อมโยงเนื้อหากับองค์ประกอบ UI
ViewController
สอดคล้องกับโปรโตคอล FBNativeAdDelegate
และเพิ่มตัวแปรอินสแตนซ์ FBNativeAd
import UIKit
import FBAudienceNetwork
class ViewController: UIViewController, FBNativeAdDelegate {
private var nativeAd: FBNativeAd?
}
viewDidLoad
ให้เพิ่มบรรทัดโค้ดต่อไปนี้เพื่อโหลดเนื้อหาโฆษณาแบบเนทีฟ
override func viewDidLoad() {
super.viewDidLoad()
let nativeAd = FBNativeAd(placementID: "YOUR_PLACEMENT_ID")
nativeAd.delegate = self
nativeAd.loadAd()
}
ID ที่แสดงที่ YOUR_PLACEMENT_ID
เป็น ID ชั่วคราวเพื่อการทดสอบเท่านั้น
หากคุณใช้ ID ชั่วคราวนี้ในโค้ดที่ใช้งานจริง ผู้ใช้ของคุณจะไม่ได้รับโฆษณา (ผู้ใช้เหล่านี้จะได้รับข้อผิดพลาด No Fill (ไม่มีข้อมูล)) คุณต้องกลับมาที่นี่หลังจากการทดสอบ และแทนที่ ID ชั่วคราวนี้ด้วย ID ตำแหน่งการจัดวางที่ใช้งานจริง
หากต้องการรู้วิธีสร้าง ID ตำแหน่งการจัดวางที่ใช้งานจริง ให้ดูที่การตั้งค่า Audience Network
ViewController
เพื่อนำเมธอดตัวแทน nativeAdDidLoad
ไปใช้
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
// 1. If there is an existing valid native ad, unregister the view
if let previousNativeAd = self.nativeAd, previousNativeAd.isAdValid {
previousNativeAd.unregisterView()
}
// 2. Retain a reference to the native ad object
self.nativeAd = nativeAd
// 3. Register what views will be tappable and what the delegate is to notify when a registered view is tapped
// Here only the call-to-action button and the media view are tappable, and the delegate is the view controller
nativeAd.registerView(
forInteraction: adUIView,
mediaView: adCoverMediaView,
iconView: adIconImageView,
viewController: self,
clickableViews: [adCallToActionButton, adCoverMediaView]
)
// 4. Render the ad content onto the view
adTitleLabel.text = nativeAd.advertiserName
adBodyLabel.text = nativeAd.bodyText
adSocialContextLabel.text = nativeAd.socialContext
sponsoredLabel.text = nativeAd.sponsoredTranslation
adCallToActionButton.setTitle(nativeAd.callToAction, for: .normal)
adOptionsView.nativeAd = nativeAd
}
เพื่อประสบการณ์ของผู้ใช้และผลลัพธ์ที่ดีกว่า คุณควรพิจารณาที่จะควบคุมพื้นที่ที่คลิกได้ของโฆษณาของคุณอยู่เสมอเพื่อหลีกเลี่ยงการคลิกที่ไม่ได้ตั้งใจ โปรดดูหน้านโยบาย Audience Network SDK เพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับการบังคับใช้พื้นที่ว่างที่ไม่สามารถคลิกได้
เมื่อแสดงโฆษณาในโปรแกรมจำลอง ให้เปลี่ยนการตั้งค่าเป็นโหมดทดสอบเพื่อดูโฆษณาที่ทดสอบ โปรดดูข้อมูลเพิ่มเติมที่ “วิธีใช้โหมดทดสอบ”
ในตัวอย่างข้างต้น เนื้อหาสื่อของโฆษณาจะแสดงใน adCoverMediaView
และประเภทอ็อบเจ็กต์คือ FBMediaView
จากขั้นตอนก่อนหน้านี้ เราได้แสดงวิธีใช้ FBMediaView เพื่อโหลดเนื้อหาสื่อจากอ็อบเจ็กต์ FBNativeAd
ที่ได้รับ มุมมองนี้เกิดขึ้นจากการโหลดรูปภาพหน้าปกเอง เมื่อสร้าง FBMediaView
จะสามารถกำหนดความกว้างและความสูงได้ด้วยข้อจำกัดของเลย์เอาท์อัตโนมัติที่ตั้งค่าไว้ในสตอรี่บอร์ด หรือสามารถกำหนดค่าตายตัวได้ อย่างไรก็ตาม ความกว้างและความสูงของมุมมองอาจไม่พอดีกับรูปภาพหน้าปกจริงของโฆษณาที่ดาวน์โหลดภายหลัง หากต้องการแก้ไขปัญหานี้ ตัวอย่างต่อไปนี้จะแสดงวิธีรับอัตราส่วนกว้างยาวของเนื้อหาและนำความกว้างและความสูงแบบธรรมชาติมาใช้
FBMediaViewDelegate
ไปใช้
class ViewController: UIViewController, FBNativeAdDelegate, FBMediaViewDelegate {
...
}
FBMediaView
เป็นตัวควบคุมมุมมองของคุณ
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
adCoverMediaView.delegate = self
}
mediaViewDidLoad
ไปใช้ในตัวควบคุมมุมมองของคุณ
func mediaViewDidLoad(_ mediaView: FBMediaView) {
let currentAspect = mediaView.frame.size.width / mediaView.frame.size.height
print(currentAspect)
let actualAspect = mediaView.aspectRatio
print(actualAspect)
}
mediaView.aspectRatio
จะส่งคืน CGFloat แบบบวก หรือส่งคืน 0.0 หากไม่มีโฆษณาที่กำลังโหลดอยู่ ค่าจะใช้ได้หลังจากโหลดมุมมองสื่อแล้ว ทั้งนี้ก็มีวิธีการที่สะดวกในการตั้งค่าความกว้างและความสูงของอ็อบเจ็กต์ FBMediaView ตามอัตราส่วนกว้างยาวของเนื้อหาสื่อที่โหลด คุณสามารถเรียกใช้ applyNaturalWidth
หรือ applyNaturalHeight
เพื่ออัพเดตความกว้างหรือความสูงของอ็อบเจ็กต์ FBMediaView
ตามอัตราส่วนกว้างยาวของเนื้อหาสื่อ
นอกจากนี้ คุณยังสามารถเพิ่มฟังก์ชั่นต่อไปนี้เพื่อจัดการกับกรณีที่โฆษณาแบบเนทีฟปิดอยู่หรือเมื่อผู้ใช้คลิกที่โฆษณานั้นๆ ได้ด้วย
func nativeAdDidClick(_ nativeAd: FBNativeAd) {
print("Native ad was clicked.")
}
func nativeAdDidFinishHandlingClick(_ nativeAd: FBNativeAd) {
print("Native ad did finish click handling.")
}
func nativeAdWillLogImpression(_ nativeAd: FBNativeAd) {
print("Native ad impression is being captured.")
}
เพิ่มและใช้ฟังก์ชั่นต่อไปนี้ในตัวควบคุมมุมมองเพื่อจัดการกับข้อผิดพลาดในการโหลดโฆษณา
func nativeAd(_ nativeAd: FBNativeAd, didFailWithError error: Error) {
print("Native ad failed to load with error: \(error.localizedDescription)")
}
let nativeAd = FBNativeAd(placementID: "YOUR_PLACEMENT_ID")
nativeAd.delegate = self
nativeAd.loadAd(withMediaCachePolicy: .none)
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
...
self.adCoverMediaView.delegate = self
nativeAd.downloadMedia()
self.nativeAd = nativeAd
...
}
registerViewForInteraction
และแสดงโฆษณาหลังจากเรียก mediaViewDidLoad
กลับแล้วเท่านั้น โดยต้องโหลดและแสดงสื่อทั้งหมดสำหรับอิมเพรสชั่นที่เข้าเกณฑ์
func mediaViewDidLoad(_ mediaView: FBMediaView) {
guard let nativeAd = nativeAd else {
return
}
// 1. Register what views will be tappable and what the delegate is to notify when a registered view is tapped
// Here only the call-to-action button and the media view are tappable, and the delegate is the view controller
nativeAd.registerView(
forInteraction: adUIView,
mediaView: mediaView,
iconView: adIconImageView,
viewController: self,
clickableViews: [adCallToActionButton, mediaView]
)
// 2. Render the ad content onto the view
adTitleLabel.text = nativeAd.advertiserName
adBodyLabel.text = nativeAd.bodyText
adSocialContextLabel.text = nativeAd.socialContext
sponsoredLabel.text = nativeAd.sponsoredTranslation
adCallToActionButton.setTitle(nativeAd.callToAction, for: .normal)
adOptionsView.nativeAd = nativeAd
}
NativeAdSample
สามารถใช้งานได้โดยเป็นส่วนหนึ่งใน SDK และอยู่ในโฟลเดอร์ FBAudienceNetwork/samples
เปิดโปรเจ็กต์ด้วย Xcode และใช้งานบนอุปกรณ์หรือโปรแกรมจำลอง แหล่งข้อมูลเพิ่มเติม |
คู่มือเริ่มต้นการใช้งานคู่มือเชิงเทคนิคในการเริ่มต้นใช้งาน Audience Network ตัวอย่างโค้ดตัวอย่างการผสานการทำงานของโฆษณา Audience Network | คำถามที่พบบ่อยคำถามที่พบบ่อยเกี่ยวกับ Audience Network เทมเพลตโฆษณาแบบเนทีฟแนวทางอื่นๆ ในการผสานโฆษณาแบบเนทีฟโดยไม่เข้าไปแทรกแซง |