מודעות מותאמות

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

כשמודעה מותאמת נטענת, האפליקציה מקבלת אובייקט מודעה שמכיל את הנכסים שלה, והיא אחראית להצגת הנכסים האלה, ולא Google Mobile Ads SDK.

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

בדף הזה מוסבר איך להשתמש ב-SDK כדי לטעון מודעות מותאמות.

דרישות מוקדמות

ביצוע בדיקות באמצעות מודעות בדיקה תמיד

כשאתם מפתחים ובודקים את האפליקציות, חשוב להשתמש במודעות בדיקה במקום במודעות פעילות בסביבת הייצור.

הדרך הקלה ביותר לטעון מודעות בדיקה היא להשתמש במזהה הייעודי של יחידת מודעות לבדיקה עבור מודעות מותאמות ב-iOS:

ca-app-pub-3940256099942544/3986624511

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

מידע נוסף על אופן הפעולה של מודעות הבדיקה של Google Mobile Ads SDK זמין במאמר מודעות בדיקה.

טעינת מודעות

המודעות המותאמות נטענות עם GADAdLoader למחלקה, ששולחות הודעות למשתמשים שקיבלו הרשאה GADAdLoaderDelegate של Google.

איך מאתחלים את הטעינה של המודעות

כדי לטעון מודעה, צריך לאתחל את טוען המודעות. הקוד הבא מראה איך לאתחל GADAdLoader:

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    // The UIViewController parameter is optional.
    rootViewController: rootViewController,
    adTypes: [ .native ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    // The UIViewController parameter is nullable.
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

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

מערך adTypes צריך להכיל את הקבוע הזה:

הטמעת הנציג של מערך המודעות

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

Swift

public func adLoader(_ adLoader: GADAdLoader,
            didReceive nativeAd: GADNativeAd)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd;

בקשה להצגת מודעות

אחרי אתחול של GADAdLoader, צריך לקרוא ל-method loadRequest: של מבקשים להציג מודעה:

Swift

adLoader.load(GADRequest())

Objective-C

[self.adLoader loadRequest:[GADRequest request]];

loadRequest: method ב- GADAdLoader מקבל/ת את אותה GADRequest אובייקטים בתור מודעות באנר ומודעות מעברון. אפשר להשתמש באובייקטים של בקשה כדי להוסיף מידע על טירגוט, בדיוק כמו סוג מודעות אחר.

טעינת מודעות מרובות (אופציונלי)

כדי לטעון כמה מודעות בבקשה אחת, מגדירים את האובייקט GADMultipleAdsAdLoaderOptions בזמן שמפעילים את GADAdLoader.

Swift

let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    // The UIViewController parameter is optional.
    rootViewController: self,
    adTypes: [ .native ],
    options: [ multipleAdOptions ])

Objective-C

GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
    [[GADMultipleAdsAdLoaderOptions alloc] init];
multipleAdsOptions.numberOfAds = 5;
self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    // The UIViewController parameter is nullable.
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ multipleAdsOptions ]];

מספר המודעות לכל בקשה מוגבל ל-5, ולא בטוח ה-SDK יחזיר את המספר המדויק של המודעות המבוקשות.

כל המודעות של Google שחוזרות יהיו שונות זו מזו, אבל לא מובטח שמודעות ממלאי שטחי פרסום שמוזמנים או מקונים של צד שלישי יהיו ייחודיות.

אין להשתמש בכיתה GADMultipleAdsAdLoaderOptions אם משתמשים בתהליך בחירת הרשת (Mediation). מאחר שבקשות למודעות מותאמות מרובות לא פועלות כרגע למזהים של יחידות מודעות הוגדרו לגישור.

איך בודקים מתי הטעינה הסתיימה

אחרי שאפליקציה קוראת ל-loadRequest:, היא יכולה לקבל את תוצאות הבקשה באמצעות קריאות אל:

בקשה להצגת מודעה אחת תוביל לקריאה אחת לאחת מהשיטות האלה.

בקשה להצגת מספר מודעות תוביל לקריאה חוזרת (callback) אחת לפחות לערך שצוין למעלה שיטות, אבל לא יותר מהמספר המקסימלי המבוקש של מודעות.

בנוסף, GADAdLoaderDelegate מציע את adLoaderDidFinishLoading קריאה חוזרת. שיטת הענקת הגישה הזו מציינת שטען המודעות סיים לטעון מודעות, ולא ידווחו על מודעות או שגיאות נוספות לגבי הבקשה. דוגמה לשימוש ב-AdMob Mediation כשמטעמלים כמה מודעות מותאמות בו-זמנית:

Swift

class ViewController: UIViewController, GADNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdOptions.numberOfAds = 5;
    adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
        // The UIViewController parameter is optional.
        rootViewController: rootViewController,
        adTypes: [ .native ],
        options: [ multipleAdOptions ])

    adLoader.delegate = self
    adLoader.load(GADRequest())
  }

  func adLoader(_ adLoader: GADAdLoader,
       didReceive nativeAd: GADNativeAd) {
    // A native ad has loaded, and can be displayed.
  }

  func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
    // The adLoader has finished loading ads, and a new request can be sent.
  }

}

Objective-C

@interface ViewController () <GADNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;
  self.adLoader = [[GADAdLoader alloc]
        initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
      // The UIViewController parameter is nullable.
      rootViewController:rootViewController
                 adTypes:@[ GADAdLoaderAdTypeNative ]
                 options:@[ multipleAdsOptions ]];

  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd {
  // A native ad has loaded, and can be displayed.
}

- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}

@end

טיפול בבקשות שנכשלו

הפרוטוקולים שלמעלה מוסיפים לפרוטוקול GADAdLoaderDelegate, שמגדיר הודעה שנשלחת כשהמודעות לא נטענות.

Swift

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: NSError)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(NSError *)error;

קבלת התראות על אירועים של מודעות מותאמות

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

Swift

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

לאחר מכן מטמיעים GADNativeAdDelegate כדי לקבל את הקריאות הבאות להענקת גישה:

Swift

func nativeAdDidRecordImpression(_ nativeAd: GADNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADNativeAd) {
  // The native ad will cause the app to become inactive and
  // open a new app.
}

Objective-C

- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd {
  // The native ad will cause the app to become inactive and
  // open a new app.
}

שיטות מומלצות

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

  • באפליקציות שמשתמשות במודעות מותאמות ברשימה, צריך לשמור מראש את רשימת המודעות במטמון.

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

  • אין להתקשר שוב אל loadRequest: במכשיר GADAdLoader עד הבקשה הקודמת סיום הטעינה, כפי שמצוין ב-adLoaderDidFinishLoading:.

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

  • צריך למחוק מודעות מותאמות כשהן לא בשימוש.

הצגת המודעה

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