מודעות מעברונים

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

במדריך הזה מוסבר איך לשלב מודעות מעברון באפליקציה ל-iOS.

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

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

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

הדרך הקלה ביותר לטעון מודעות בדיקה היא באמצעות המזהה הייעודי של יחידת המודעות לבדיקה עבור מודעות מעברון ב-iOS:
ca-app-pub-3940256099942544/4411468910

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

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

הטמעה

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

  1. טוענים מודעה.
  2. הרשמה לקריאה חוזרת (callback).
  3. צריך להציג את המודעה ולטפל באירוע הפרס.

טעינת מודעה

מתבצעת טעינה של מודעה באמצעות השיטה loadWithAdUnitID:request:completionHandler: הסטטית במחלקה GADInterstitialAd. לשיטת הטעינה, נדרשים מזהה יחידת המודעות, אובייקט GADRequest ו-handler של השלמה, שמופעל כשטעינת המודעה מצליחה או נכשלת. האובייקט GADInterstitialAd שנטען מסופק כפרמטר ב-handler להשלמה. הדוגמה הבאה ממחישה איך לטעון GADInterstitialAd במחלקה ViewController.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910",
                                request: request,
                      completionHandler: { [self] ad, error in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        interstitial = ad
                      }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

הרשמה לקריאה חוזרת (callback)

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

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910",
                                request: request,
                      completionHandler: { [self] ad, error in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        interstitial = ad
                        interstitial?.fullScreenContentDelegate = self
                      }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
   NSLog(@"Ad did dismiss full screen content.");
}

GADInterstitialAd הוא אובייקט חד-פעמי. כלומר, ברגע שמודעת מעברון מוצגת, לא ניתן להציג אותה שוב. מומלץ לטעון מודעת מעברון נוספת בשיטה adDidDismissFullScreenContent: ב-GADFullScreenContentDelegate, כדי שמודעת המעברון הבאה תתחיל להיטען ברגע שהמודעה הקודמת תיסגר.

הצגת המודעה

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

Swift

@IBAction func doSomething(_ sender: Any) {
  if interstitial != nil {
    interstitial.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (IBAction)doSomething:(id)sender {
  ...
  if (self.interstitial) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

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

חשוב לשקול אם מודעות מעברון הן סוג המודעה שמתאים לאפליקציה שלכם.
מודעות מעברון פועלות בצורה הטובה ביותר באפליקציות עם נקודות מעבר טבעיות. נקודות כאלה נוצרות במהלך סיום של משימה בתוך האפליקציה, כמו שיתוף תמונה או השלמת שלב במשחק. מכיוון שהמשתמש מצפה להפסקה בפעולה, קל להציג מודעת ביניים מבלי להפריע לחוויית שלו. חשוב לשים לב באילו שלבים בתהליך העבודה של האפליקציה יוצגו מודעות מעברון ומהו הסיכוי שהמשתמש יגיב.
חשוב לזכור להשהות את הפעולה כשמציגים מודעת מעברון.
יש כמה סוגים שונים של מודעות מעברון: טקסט, תמונה, וידאו ועוד. חשוב לוודא שכאשר באפליקציה מוצגת מודעת מעברון, היא גם משעה את השימוש במשאבים מסוימים כדי לאפשר למודעה לנצל אותם. לדוגמה, כשאתם מבצעים קריאה כדי להציג מודעת מעברון, חשוב להשהות את כל פלט האודיו שמופק על ידי האפליקציה שלכם. תוכלו להמשיך להשמיע צלילים ב-handler של האירועים של adDidDismissFullScreenContent:, שיופעל אחרי שהמשתמש יסיים לבצע פעולות עם המודעה. כמו כן, כדאי להפסיק זמנית את משימות החישוב אינטנסיביות (כמו Game Loop) בזמן שהמודעה מוצגת. כך תבטיחו שהמשתמש לא יחווה גרפיקה איטית או לא מגיבה, או וידאו מקוטע.
צריך לאפשר זמן טעינה תקין.
בדיוק כפי שחשוב לוודא שמודעות מעברון מוצגות בזמן המתאים, חשוב גם לוודא שהמשתמש לא יצטרך להמתין לטעינה שלהן. אם תטענו את המודעה מראש לפני שאתם מתכוונים להציג אותה, תוכלו לוודא שמודעת המעברון של האפליקציה טעונה במלואה כשיגיע הזמן להציג אותה.
אין להציף את המשתמש במודעות.
הגברת התדירות של מודעות המעברון באפליקציה אולי נראית כדרך מצוינת להגדיל את ההכנסות, אבל היא גם עלולה לפגוע בחוויית המשתמש ולהוריד את שיעורי הקליקים. חשוב לוודא שהמשתמשים לא יפריעו לעיתים קרובות עד שהם לא יוכלו ליהנות יותר מהשימוש באפליקציה.
אין להשתמש בקריאה חוזרת להשלמת הטעינה כדי להציג את המעברון.
התנהלות כזו עלולה לפגוע בחוויית המשתמש. במקום זאת, כדאי לטעון מראש את המודעה לפני שתצטרכו להציג אותה. לאחר מכן, בודקים את השיטה canPresentFromRootViewController:error: ב-GADInterstitialAd כדי לברר אם היא מוכנה להצגה.

משאבים נוספים

דוגמאות ב-GitHub

מדריכי וידאו בסדנה של מודעות לנייד

סיפורי הצלחה

השלבים הבאים