פורמטים מותאמים אישית של מודעות
בדומה לפורמטים שמוגדרים על ידי המערכת, פורמטים מותאמים אישית של מודעות מותאמות נטענים באמצעות אובייקטים מסוג GADAdLoader. אם כוללים את הקבוע GADAdLoaderAdTypeCustomNative במערך adTypes כשמאתחלים GADAdLoader, הוא יוגדר לבקש פורמטים מותאמים אישית של מודעות מותאמות בזמן הטעינה של המודעות.
GADCustomNativeAdLoaderDelegate
הפרוטוקול לטעינת פורמטים מותאמים אישית כולל שתי שיטות. הראשון משמש את GADAdLoader כדי לגלות אילו מזהי פורמטים צריך לבקש:
Swift
public func customNativeAdFormatIDs(for adLoader: AdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(AdLoader *)adLoader;
לכל פורמט מותאם אישית של מודעה מותאמת יש מזהה פורמט תואם שמזהה אותו. כשהשיטה הזו מופעלת, האפליקציה צריכה להחזיר מערך שמכיל את מזהי הפורמטים של המודעות שהיא מוכנה להציג.
ההודעה השנייה נשלחת כשהמודעה המותאמת אישית נטענת, בדומה להודעות של פורמטים שמוגדרים על ידי המערכת:
Swift
public func adLoader(_ adLoader: AdLoader, didReceive customNativeAd: CustomNativeAd)
Objective-C
- (void)adLoader:(AdLoader *)adLoader didReceiveCustomNativeAd:(CustomNativeAd *)customNativeAd;
מזהי פורמטים
מזהי הפורמטים שמשמשים להפניה ייחודית לפורמטים מותאמים אישית של מודעות מותאמות נמצאים בממשק המשתמש של Ad Manager בקטע מודעות מותאמות בתפריט הנפתח הצגה:

מזהה הפורמט של כל מודעה מותאמת אישית מופיע לצד השם שלה. לחיצה על אחד מהשמות תעביר אתכם למסך פרטים שבו מוצג מידע על השדות של הפורמט:

מכאן אפשר להוסיף, לערוך ולהסיר שדות ספציפיים. שימו לב לשם של כל אחד מהנכסים. השם הוא המפתח שמשמש לקבלת הנתונים של כל נכס כשמציגים את הפורמט המותאם אישית של המודעה מותאמת.
הצגת פורמטים מותאמים אישית של מודעות מותאמות
ההבדל בין פורמטים מותאמים אישית של מודעות מותאמות לבין פורמטים שמוגדרים על ידי המערכת הוא שבעלי תוכן דיגיטלי יכולים להגדיר רשימה משלהם של נכסים שמרכיבים את המודעה. לכן, התהליך להצגת מודעות מותאמות אישית שונה מהתהליך להצגת פורמטים שמוגדרים על ידי המערכת בכמה דרכים:
- מכיוון שהמחלקה
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: 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 (קטע)
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"]; } ...
עיבוד של הסמל של AdChoices
כחלק מהתמיכה ב-Digital Services Act (חוק השירותים הדיגיטליים, DSA), מודעות בהזמנה שמוצגות באזור הכלכלי האירופי (EEA) צריכות לכלול את הסמל של AdChoices וקישור לדף "בנוגע למודעה הזו" של Google. כשמטמיעים מודעות מותאמות אישית, אתם אחראים להציג את הסמל של AdChoices. חשוב לבצע את השלבים לעיבוד ולהגדרה של רכיב click listener לסמל של AdChoices כשמעבדים את הנכסים שמצורפים למודעה.
בדוגמה הבאה מוצג הסמל של AdChoices ומוגדרת התנהגות הקליקים.
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);
...
}
מודעות וידאו מותאמות בפורמטים מותאמים אישית של מודעות מותאמות
כשיוצרים פורמט מותאם אישית, אפשר להגדיר שהפורמט יתאים לסרטונים.
בהטמעה של האפליקציה, משתמשים במאפיין GADCustomNativeAd.mediaContent כדי לקבל את המופע GADMediaContent של המודעה.
כדי לבדוק אם המודעה מכילה קטע וידאו, בודקים את המאפיין hasVideoContent. אם המודעה כוללת תוכן וידאו, יוצרים תצוגת GADMediaView, מקצים את המאפיין mediaContent ומוסיפים את תצוגת המדיה להיררכיית התצוגות. אם במודעה אין קטע וידאו, צריך להציג נכס חלופי, כמו תמונה.
בדוגמה הבאה, המערכת בודקת אם יש במודעה קטע וידאו, ואם אין וידאו זמין, היא מציגה תמונה במקום:
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],
]];
}
פרטים על התאמה אישית של סרטון במודעה מותאמת אישית מופיעים במחלקה GADVideoController.
כדי להטמיע מודעות וידאו מותאמות אישית, אפשר לעיין בדוגמה לעיבוד מותאם אישית ב-Ad Manager ב-Swift וב-Objective-C.
טיפול בקליקים על מודעות מותאמות ובחשיפות
בפורמטים מותאמים אישית של מודעות מותאמות, האפליקציה אחראית לתעד חשיפות ולדווח על אירועי קליקים ל-SDK.
מתקבלות חשיפות
כדי לתעד חשיפה של מודעה מותאמת אישית, פשוט מפעילים את ה-method recordImpression ב-GADCustomNativeAd המתאים:
Swift
myCustomNativeAd.recordImpression()
Objective-C
[myCustomNativeAd recordImpression];
ערכת ה-SDK מונעת תיעוד של חשיפות כפולות לבקשה אחת, אם האפליקציה קוראת בטעות ל-method כמה פעמים לאותה מודעה.
דיווח על קליקים
כדי לדווח ל-SDK שהתרחשה קליק על תצוגת נכס, צריך להפעיל את ה-method performClickOnAssetWithKey: ב-GADCustomNativeAd המתאים ולהעביר את שם הנכס שעליו בוצעה הקליק.
לדוגמה, אם יש לכם נכס בפורמט המותאם אישית שנקרא MainImage, ואתם רוצים לדווח על קליק בתצוגה שתואמת לנכס הזה, הקוד שלכם ייראה כך:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
חשוב לזכור שלא צריך להפעיל את ה-method הזו לכל תצוגת נכס שמשויכת למודעה. לדוגמה, אם יש לכם נכס אחר שנקרא "כיתוב" שנועד להצגה אבל לא ללחיצה או להקשה על ידי המשתמש, האפליקציה לא צריכה להפעיל את performClickOnAssetWithKey: עבור התצוגה הזו.
תגובה לפעולות קליק בהתאמה אישית
ל-GADCustomNativeAd יש מאפיין customClickHandler מסוג GADNativeAdCustomClickHandler
Swift
typealias NativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
זהו בלוק (Objective-C) או סגור (Swift) שמקבל assetID כפרמטר קלט, שמזהה את הנכס שעליו לחצו.
כשמשתמש לוחץ על מודעה מותאמת אישית, יש שלוש תגובות אפשריות של ה-SDK, לפי הסדר הבא:
- מפעילים את הבלוק
customClickHandlerב-Objective-C או את הסגירה ב-Swift, אם הוגדרו. - עוברים על כתובות ה-URL של קישורי העומק של המודעה ופותחים את הראשונה שנמצאה לה אפליקציה תואמת.
- פותחים דפדפן ועוברים לכתובת היעד הרגילה של המודעה.
המאפיין customClickHandler מקבל בלוק ב-Objective-C וסגירה ב-Swift. אם מגדירים בלוק או סגירה, ה-SDK יפעיל אותם ולא יבצע פעולות נוספות. עם זאת, אם תגדירו ערך nil, ערכת ה-SDK תשתמש בקישור העומק או בכתובות היעד שרשומות במודעה.
רכיבי handler מותאמים אישית של קליקים מאפשרים לאפליקציה להחליט בעצמה מהי הפעולה הטובה ביותר שצריך לבצע בתגובה לקליק, בין אם מדובר בעדכון של ממשק המשתמש, בהצגת בקר תצוגה אחר או רק ברישום הקליק ביומן. דוגמה להצגת התראה:
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
הוא יציג מודעות לדוגמה להתקנת אפליקציות ומודעות באתרי תוכן שכוללות את שכבת-העל של AdChoices.
חשוב לזכור לעדכן את הקוד כך שיפנה למזהים האמיתיים של יחידת המודעות והפורמט לפני שהאפליקציה תהיה זמינה לקהל הרחב.