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

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

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

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

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

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

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

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

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

הטמעה

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

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

טעינת מודעה

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *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

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
      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) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *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.");
}

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

הצגת המודעה

מודעות מעברון צריכות להיות מוצגות בזמן הפסקות טבעיות בזרימה של האפליקציה. דוגמה טובה בין שלבים במשחק היא או אחרי שהמשתמש משלים משימה. הנה דוגמה איך לעשות זאת באחת משיטות הפעולה ב-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");
  }
}

אם אתם לא מקבלים מודעות בחזרה, וקיבלתם את תגובת השגיאה "Request Error: No ads to show" (שגיאה: אין מודעות להצגה), ודאו שבפריט יש קריאייטיב שמטרגט את הגודל הנכון. הגדלים של מודעות מעברון הם 320x480 ו-480x320 לטלפונים, ו-1024x768 ו-768x1024 לטאבלטים. אם המכשיר לא מספיק גדול כדי להתאים לגודל 1024x768 או 768x1024, הוא יחזור לגודל 320x480 או 480x320.

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

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

דוגמאות ב-GitHub

השלבים הבאים