פורמטים מותאמים אישית של מודעות
בדומה לפורמטים מותאמים אישית של מודעות מותאמות, גם הפורמטים המותאמים אישית נטענים באמצעות GADAdLoader
אובייקטים. אם תכללו את הערך הקבוע GADAdLoaderAdTypeCustomNative
במערך adTypes
באתחול של GADAdLoader
, המערכת תבקש פורמטים מותאמים מותאמים אישית כשטוענים מודעות.
GADCustomNativeAdLoaderDelegate
לפרוטוקול לטעינת פורמטים מותאמים אישית יש שתי שיטות. השיטה הראשונה משמשת את GADAdLoader
כדי לברר אילו מזהי פורמט היא צריכה לבקש:
Swift
public func customNativeAdFormatIDs(for adLoader: GADAdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(GADAdLoader *)adLoader;
לכל פורמט מותאם אישית של מודעה מותאמת יש מזהה פורמט מתאים המזהה אותו. כשמפעילים את השיטה הזו, האפליקציה צריכה להחזיר מערך שמכיל את מזהי הפורמטים של המודעות שהיא מוכנה להצגה.
ההודעה השנייה נשלחת לאחר טעינת המודעה המותאמת המותאמת אישית, בדומה לפורמטים שהוגדרו על ידי המערכת:
Swift
public func adLoader(_ adLoader: GADAdLoader, didReceive customNativeAd: GADCustomNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader didReceiveCustomNativeAd:(GADCustomNativeAd *)customNativeAd;
מזהי פורמטים
מזהי הפורמטים שמשמשים להפניה ייחודית לפורמטים מותאמים אישית של מודעות מותאמות נמצאים ב Ad Manager ממשק המשתמש, בקטע Native בתפריט הנפתח Delivery:
מזהה הפורמט של כל מודעה מותאמת מותאמת אישית מופיע לצד השם שלה. לחיצה על אחד מהשמות תעביר אתכם למסך פרטים שבו מוצג מידע על השדות של הפורמט:
מכאן ניתן להוסיף, לערוך ולהסיר שדות ספציפיים. שימו לב לשם של כל נכס. השם הוא המפתח המשמש לקבלת הנתונים של כל נכס בעת הצגת הפורמט המותאם אישית של המודעות המותאמות.
הצגת פורמטים מותאמים אישית של מודעות מותאמות
פורמטים מותאמים אישית של מודעות מותאמות שונים מפורמטים שמוגדרים על ידי המערכת, בכך שבעלי אתרים יכולים להגדיר בעצמם את רשימת הנכסים שמרכיבים את המודעה. לכן התהליך של הצגת מודעות מותאמות מותאמות אישית שונה מהתהליך לפורמטים שהוגדרו על ידי המערכת בכמה אופנים:
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"]; } ...
מודעת וידאו מותאמת לפורמטים מותאמים אישית של מודעות מותאמות
כשאתם יוצרים פורמט מותאם אישית, אפשר להגדיר אותו כפורמט שמתאים לווידאו.
בהטמעת האפליקציה, תוכלו להשתמש בנכס 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 על כך שהתרחש קליק בתצוגה מפורטת של נכס, צריך לקרוא ל-method performClickOnAssetWithKey:
ב-GADCustomNativeAd
המתאים ולהזין את שם הנכס שעליו המשתמש לחץ.
לדוגמה, אם יש לכם נכס בפורמט המותאם אישית שנקרא "MainImage"
ואתם רוצים לדווח על קליק על התצוגה המתאימה לנכס הזה, הקוד ייראה כך:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
שימו לב שלא צריך להפעיל את השיטה הזו לכל תצוגה מפורטת של נכס שמשויכת למודעה. אם היה לכם נכס אחר בשם 'Caption', למשל, שהיה אמור להופיע אבל המשתמש לא לחץ עליו או מקיש עליו, האפליקציה לא הייתה צריכה להפעיל את performClickOnAssetWithKey:
עבור התצוגה הזו.
תגובה לפעולות מותאמות אישית של קליקים
ל-GADCustomNativeAd
יש מאפיין customClickHandler
מסוג
GADNativeAdCustomClickHandler
Swift
typealias GADNativeAdCustomClickHandler = (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 יריץ אותם ולא יבצע כל פעולה נוספת. עם זאת, אם תגדירו ערך אפס, ה-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 במזהה הזה של יחידת מודעות:
/6499/example/native
היא מוגדרת להציג מודעות לדוגמה להתקנת אפליקציה ולתוכן, וכן פורמט מותאם אישית של מודעות מותאמות עם הנכסים הבאים:
- Headline (text) (כותרת (טקסט)
- תמונה ראשית
- Caption (טקסט)
מודעות מותאמות למילוי חוסרים (backfill)
כדי לבדוק את ההתנהגות של מודעות מותאמות למילוי חוזר, צריך להשתמש ביחידת המודעות הבאהAd Manager :
/6499/example/native-backfill
יוצגו בו מודעות לדוגמה להתקנת אפליקציה ומודעות תוכן, שכוללות את שכבת-העל 'מודעות שנבחרו'.
זכרו לעדכן את הקוד כך שיתייחס ליחידת המודעות ולמזהי הפורמט בפועל לפני הפרסום!