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

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

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

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

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

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

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

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

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

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

הטמעה

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

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

טעינת מודעה

כדי לטעון מודעה, משתמשים ב-method‏ 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 מטפל בקריאות חוזרות (callbacks) כשהמודעה מוצגת בהצלחה או לא, וכשהיא נסגרת. הקוד הבא מראה איך להטמיע את הפרוטוקול:

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

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

דוגמאות ב-GitHub

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

סרטוני הדרכה של Mobile Ads Garage

סיפורי הצלחה

השלבים הבאים