מודעות מעברון הן מודעות במסך מלא שמכסות את ממשק האפליקציה עד שהמשתמש סוגר אותן. הן מוצגות בדרך כלל בנקודות מעבר טבעיות בגלישה באפליקציה, למשל במהלך מעבר בין פעילויות או בזמן הפסקה בין שלבי משחק. כשמודעת מעברון מוצגת באפליקציה, המשתמש יכול להקיש על המודעה ולהמשיך ליעד שלה או לסגור אותה ולחזור לאפליקציה. מחקר מקרה
במדריך הזה מוסבר איך לשלב מודעות מעברון באפליקציה ל-iOS.
דרישות מוקדמות
- Google Mobile Ads SDK בגרסה 8.0.0 ואילך.
- מבצעים את ההוראות במדריך לתחילת העבודה.
תמיד כדאי לבדוק באמצעות מודעות בדיקה
כשאתם מפתחים ובודקים את האפליקציות, חשוב להשתמש במודעות בדיקה במקום במודעות פעילות בסביבת הייצור. אם לא תעשו זאת, ייתכן שהחשבון שלכם יושעה.
הדרך הקלה ביותר לטעון מודעות בדיקה היא באמצעות המזהה הייעודי של יחידת מודעות לבדיקה עבור מודעות מעברון ב-iOS:
ca-app-pub-3940256099942544/4411468910
היא מוגדרת במיוחד להחזרת מודעות בדיקה בכל בקשה, ואפשר להשתמש בה באפליקציות משלכם בזמן התכנות, הבדיקה וניפוי הבאגים. רק הקפידו להחליף אותו במזהה של יחידת המודעות שלכם לפני פרסום האפליקציה.
מידע נוסף על אופן הפעולה של מודעות הבדיקה של Mobile Ads SDK זמין במאמר מודעות בדיקה.
הטמעה
השלבים העיקריים לשילוב מודעות מעברון הם:
- טוענים מודעה.
- להירשם לשיחות חוזרות.
- מציגים את המודעה.
טעינת מודעה
הטעינה של מודעה מתבצעת באמצעות השיטה load(adUnitID:request)
בכיתה GADInterstitialAd
.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var interstitial: GADInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
Task {
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)")
}
}
}
}
SwiftUI
import GoogleMobileAds
class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
private var interstitialAd: GADInterstitialAd?
func loadAd() async {
do {
interstitialAd = try await GADInterstitialAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
interstitialAd?.fullScreenContentDelegate = self
} 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
מטפל בקריאות חזרה (callbacks) במקרים שבהם המודעה מוצגת בהצלחה או לא מוצגת, וגם במקרים שבהם היא נסגרת. הקוד הבא מראה איך מטמיעים את הפרוטוקול ומקצים אותו למודעה:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var interstitial: GADInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
Task {
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.")
}
}
SwiftUI
מקצים את המאפיין fullScreenContentDelegate
למודעה שהוחזרה:
interstitialAd?.fullScreenContentDelegate = self
מטמיעים את הפרוטוקול:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitialAd = nil
}
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
, כדי שמודעת המעברון הבאה תתחיל להיטען ברגע שהקודמת תיסגר.
מציגים את המודעה
מומלץ להציג מודעות מעברון במהלך הפסקות טבעיות בזרימה של האפליקציה. לדוגמה, בין רמות במשחק או אחרי שהמשתמש משלים משימה.
Swift
guard let interstitial = interstitial else {
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)
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(fromRootViewController: nil)
}
Objective-C
if (self.interstitial) {
// The UIViewController parameter is nullable.
[self.interstitial presentFromRootViewController:nil];
} else {
NSLog(@"Ad wasn't ready");
}
שיטות מומלצות
- כדאי לבדוק אם מודעות מעברון הן סוג המודעה המתאים לאפליקציה שלכם.
- מודעות מעברון פועלות בצורה הטובה ביותר באפליקציות עם נקודות מעבר טבעיות. נקודת מעבר כזו נוצרת בסיום משימה באפליקציה, כמו שיתוף תמונה או השלמת רמה במשחק. מכיוון שהמשתמש מצפה להפסקה בפעולה, קל להציג מודעת מעברון בלי להפריע לחוויית השימוש שלו. כדאי לחשוב באילו נקודות בתהליך העבודה של האפליקציה יופיעו מודעות מעברון, ואיך סביר שהמשתמשים יגיבו.
- חשוב לזכור להשהות את הפעולה כשמוצגת מודעת מעברון.
- יש כמה סוגים שונים של מודעות מעברון: טקסט, תמונה, וידאו ועוד. חשוב לוודא שכאשר האפליקציה מציגה מודעה מסוג מודעה מעברון, היא גם משהה את השימוש במשאבים מסוימים כדי לאפשר למודעה לנצל אותם. לדוגמה, כשאתם קוראים להצגת מודעה מעברון, חשוב להשהות את כל הפלט האודיו שנוצר על ידי האפליקציה. תוכלו להמשיך את הפעלת הצלילים בטיפול באירוע
adDidDismissFullScreenContent:
, שיופעל כשהמשתמש יסיים את האינטראקציה עם המודעה. בנוסף, כדאי להפסיק באופן זמני משימות חישוב אינטנסיביות (כמו לולאת משחק) בזמן שהמודעה מוצגת. כך תוכלו להבטיח שהמשתמשים לא יראו גרפיקה איטית או לא תגובה, או סרטונים עם קפיצות. - צריך להמתין מספיק זמן עד שהמודעה נטענת.
- כמו שחשוב להציג מודעות מעברון בזמן המתאים, חשוב גם לוודא שהמשתמשים לא יצטרכו להמתין עד שהן ייטענו. כדאי לטעון את המודעה מראש לפני שאתם מתכוונים להציג אותה, כדי לוודא שבאפליקציה תהיה מוכנה מודעה מעברון טעונה במלואה כשהזמן יגיע להציג אותה.
- אסור להציף את המשתמש במודעות.
- הגדלת התדירות של מודעות מעברון באפליקציה יכולה להיראות כדרך מצוינת להגדיל את ההכנסות, אבל היא גם עלולה לפגוע בחוויית המשתמש ולהוריד את שיעורי הקליקים. כדי שלא יהיו הפרעות לחוויית המשתמשים, כך שהם לא יוכלו יותר ליהנות מהשימוש באפליקציה.
- אין להשתמש בקריאה החוזרת (callback) לסיום הטעינה כדי להציג את המעברון.
- הדבר עלול לגרום לחוויית משתמש גרועה. במקום זאת, כדאי לטעון מראש את המודעה לפני שצריך להציג אותה. לאחר מכן, בודקים את השיטה
canPresentFromRootViewController:error:
ב-GADInterstitialAd
כדי לבדוק אם היא מוכנה להצגה.
מקורות מידע נוספים
דוגמאות ב-GitHub
אפשר לצפות בדוגמאות המלאות של מודעות המעברון בשפה המועדפת עליכם:
סרטוני הדרכה בנושא הסדנה הדיגיטלית של Google Ads
סיפורי הצלחה
השלבים הבאים
- אם עדיין לא עשיתם זאת, תוכלו ליצור יחידת מודעות מעברון משלכם בממשק המשתמש של AdMob.
- בקישורים הבאים תוכלו למצוא מידע נוסף על טירגוט מודעות ועל ההנחיות בנושא מודעות מעברון.
- מידע נוסף על פרטיות המשתמשים