פורמטים מותאמים אישית של מודעות מותאמות

פורמטים מותאמים אישית של מודעות

בדומה לפורמטים מותאמים אישית של מודעות מותאמות, גם הפורמטים המותאמים אישית נטענים באמצעות 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:

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

מכאן ניתן להוסיף, לערוך ולהסיר שדות ספציפיים. שימו לב לשם של כל נכס. השם הוא המפתח המשמש לקבלת הנתונים של כל נכס בעת הצגת הפורמט המותאם אישית של המודעות המותאמות.

הצגת פורמטים מותאמים אישית של מודעות מותאמות

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

  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

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 בסדר הבא:

  1. מפעילים את הבלוק customClickHandler ב-Objective-C או סגירה ב-Swift, אם הוגדרה.
  2. עוברים על כל כתובות ה-URL של קישורי העומק במודעה ופותחים את הכתובת הראשונה שעבורה נמצאת האפליקציה התואמת.
  3. פותחים דפדפן ומנווטים לכתובת היעד המסורתית של המודעה.

בנכס 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

יוצגו בו מודעות לדוגמה להתקנת אפליקציה ומודעות תוכן, שכוללות את שכבת-העל 'מודעות שנבחרו'.

זכרו לעדכן את הקוד כך שיתייחס ליחידת המודעות ולמזהי הפורמט בפועל לפני הפרסום!