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

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

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

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

לפני שממשיכים, מגדירים את Google Mobile Ads SDK.

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

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

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

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

פרטים על מודעות בדיקה זמינים במאמר הפעלת מודעות בדיקה.Google Mobile Ads SDK

הטמעה

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

  1. טוענים מודעה.
  2. נרשמים להתקשרות חזרה.
  3. הצגת המודעה.

טעינת מודעה

טעינה של מודעה מתבצעת באמצעות השיטה load(adUnitID:request) במחלקה GADInterstitialAd.

Swift

fileprivate func loadInterstitial() async {
  do {
    interstitial = try await InterstitialAd.load(
      with: "ca-app-pub-3940256099942544/4411468910", request: Request())
    interstitial?.fullScreenContentDelegate = self
  } catch {
    print("Failed to load interstitial ad with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, FullScreenContentDelegate {
  private var interstitialAd: InterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await InterstitialAd.load(
        with: "ca-app-pub-3940256099942544/4411468910", request: Request())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

[GADInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
              request:[GADRequest 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;
    }];

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

כדי לקבל התראות על אירועים שקשורים להצגת מודעות, צריך להקצות את הערך GADFullScreenContentDelegate למאפיין fullScreenContentDelegate של המודעה שמוחזרת:

Swift

interstitial?.fullScreenContentDelegate = self

SwiftUI

interstitialAd?.fullScreenContentDelegate = self

Objective-C

self.interstitial.fullScreenContentDelegate = self;

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

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
  print("\(#function) called with error: \(error.localizedDescription)")
  // Clear the interstitial ad.
  interstitial = nil
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitial = nil
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)ad:(id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

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

הצגת המודעה

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

Swift

ad.present(from: self!)

SwiftUI

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

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

הצגת מודעת המעברון מתוך מודל התצוגה:

func showAd() {
  guard let interstitialAd = interstitialAd else {
    return print("Ad wasn't ready.")
  }

  interstitialAd.present(from: nil)
}

Objective-C

[self.interstitial presentFromRootViewController:self];

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

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

מקורות מידע נוספים

דוגמאות ב-GitHub

אפשר לראות את כל הדוגמאות למודעות מעברון בשפה המועדפת:

מדריכי וידאו של Mobile Ads Garage

סיפורי הצלחה

השלבים הבאים