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

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

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

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

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

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

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

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

במאמר מודעות בדיקה מוסבר איך פועלות מודעות הבדיקה של Mobile Ads SDK.

הטמעה

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

  1. טוענים מודעה.
  2. הרשמה להתקשרות חזרה.
  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()

    do {
      interstitial = try await GADInterstitialAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }
}

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;
  }];
}

הרשמה להתקשרות חזרה

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GADInterstitialAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
      interstitial?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

  /// 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

@import GoogleMobileAds;
@import UIKit;

@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, כדי שמודעת המעברון הבאה תתחיל להיטען מיד אחרי הסגירה של מודעת המעברון הקודמת.

מציגים את המודעה

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

Swift

@IBAction func doSomething(_ sender: Any) {
  guard let interstitial = interstitial else {
    return print("Ad wasn't ready.")
  }

  // The UIViewController parameter is an optional.
  interstitial.present(fromRootViewController: nil)
}

Objective-C

- (IBAction)doSomething:(id)sender {
  if (self.interstitial) {
    // The UIViewController parameter is nullable.
    [self.interstitial presentFromRootViewController:nil];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

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

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

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

דוגמאות ב-GitHub

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

סיפורי הצלחה

השלבים הבאים