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

בחירת פלטפורמה: Android Android (בטא) iOS Unity Flutter

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

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

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

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

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

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

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

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

הטמעה

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

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

טעינת מודעה

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

Swift

fileprivate func loadInterstitial() async {
  do {
    interstitial = try await AdManagerInterstitialAd.load(
      with: "/21775744923/example/interstitial", request: AdManagerRequest())
    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

[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
                                     request:[GAMRequest 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;
                           }];

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

כדי לקבל התראות על אירועים של הצגת מודעות, צריך להקצות את הערך 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;
}

GAMInterstitialAd הוא אובייקט לשימוש חד-פעמי. כלומר, אחרי שמציגים מודעת מעברון, אי אפשר להציג אותה שוב. מומלץ לטעון מודעת מעברון נוספת בשיטה 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: event handler, שיופעל כשהמשתמש יסיים את האינטראקציה עם המודעה. בנוסף, כדאי להשהות באופן זמני משימות חישוב אינטנסיביות (כמו game loop) בזמן שהמודעה מוצגת. כך תוכלו לוודא שהמשתמש לא יחווה גרפיקה איטית או לא רספונסיבית או סרטון מגומגם.
הקפידו להקצות מספיק זמן לטעינה.
חשוב להציג מודעות מעברון בזמן המתאים, אבל חשוב גם לוודא שהמשתמש לא יצטרך לחכות שהן ייטענו. טעינת המודעה מראש לפני שרוצים להציג אותה יכולה להבטיח שבזמן שבו רוצים להציג מודעת מעברון, האפליקציה תהיה מוכנה עם מודעה שנטענה במלואה.
אל תציפו את המשתמש במודעות.
הגדלת התדירות של הצגת מודעות מעברון באפליקציה עשויה להיראות כדרך מצוינת להגדלת ההכנסות, אבל היא עלולה גם לפגוע בחוויית המשתמש ולהקטין את שיעורי הקליקים. חשוב לוודא שההפרעות למשתמשים לא תכופות מדי, כך שהם עדיין יוכלו ליהנות מהשימוש באפליקציה.
אל תשתמשו בקריאה החוזרת של סיום הטעינה כדי להציג את מודעת המעברון.
הדבר עלול לפגוע בחוויית המשתמש. במקום זאת, טוענים מראש את המודעה לפני שצריך להציג אותה. אחר כך בודקים את canPresentFromRootViewController:error:השיטה ב-GAMInterstitialAd כדי לראות אם היא מוכנה להצגה.

דוגמאות ב-GitHub

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

השלבים הבאים