הגדרת מודעות באנר

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

במדריך הזה מוסבר איך לטעון מודעת באנר מותאמת ומעוגנת באפליקציה ל-Android.

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

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

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

הדרך הכי קלה לטעון מודעות לבדיקה היא להשתמש במזהה הייעודי של יחידת המודעות לבדיקה עבור מודעות באנר ל-Android:

/21775744923/example/adaptive-banner

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

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

הגדרת תצוגת המודעה

פריסת XML

מוסיפים תצוגה לקובץ ה-XML של הפריסה, שתשמש כמאגר למודעת הבאנר המותאמת והמעוגנת:

<!-- Ad view container that fills the width of the screen and adjusts its
    height to the content of the ad. -->
<FrameLayout
        android:id="@+id/ad_view_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_alignParentBottom="true" />

Jetpack פיתוח נייטיב

  1. כוללים את התיקייה JetpackCompose Utilities. התיקייה הזו כוללת כלים שיעזרו לכם ליצור את האובייקט והנכסים של AdView.

  2. כתיבת AdView:


// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}

הגדרת גודל המודעה

מודעות באנר מותאמות גדולות הן פורמט גדול יותר שמיועד לפריסות שלא דורשות גלילה. בהשוואה למודעות באנר מותאמות ומעוגנות רגילות, במודעות הבאנר האלה הגובה המקסימלי יכול להיות גדול יותר – עד 20% מגובה המסך, ובין 50 ל-150dp. השטח המוגדל הזה מותאם לקטע וידאו.

מגדירים את AdSize לסוג של מודעת באנר מותאמת ומעוגנת ברוחב מסוים:

Java


// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));

Kotlin


// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))

Jetpack פיתוח נייטיב


// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)

צריך להגדיר גודל מודעה שקטן מגודל המסך של המכשיר או שווה לו. כדי לקבוע את גודל המסך המקסימלי, משתמשים ב-method‏ Resources.getDisplayMetrics. המידות של האובייקט AdSize מוגדרות בפיקסלים שלא תלויים בצפיפות (dp). כשמשווים, צריך להמיר את גודל המסך מפיקסלים ל-dp. פרטים על מגבלות הגודל מופיעים במאמר בנושא פתרון בעיות שקשורות לחשיפות שלא מולאו ב-Ad Manager.

הוספת AdManagerAdView לפריסה

יוצרים AdManagerAdView באמצעות גודל המודעה כדי להוסיף לפריסה של האפליקציה:

Java


// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));

// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);

Kotlin


// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView

// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)

Jetpack פיתוח נייטיב


val adView = remember { AdManagerAdView(context) }

// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANAGER_ADAPTIVE_BANNER_AD_UNIT_ID

// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)

// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}

טעינת מודעה

בדוגמה הבאה, מודעת באנר מותאמת ומעוגנת ברוחב 360 נטענת לאובייקט AdManagerAdView:

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);

Kotlin

val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)

רענון מודעה

אם הגדרתם את יחידת המודעות לרענון, לא צריך לשלוח בקשה למודעה אחרת אם המודעה לא נטענת. Google Mobile Ads SDK (Legacy) מכבד את קצב הרענון שציינתם בממשק המשתמש של Ad Manager. אם לא הפעלתם את הרענון, שלחו בקשה חדשה. במאמר קצב הרענון של מודעות באפליקציות לנייד מוסבר איך להגדיר את קצב הרענון של יחידות המודעות.

שחרור משאב של מודעה

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

כדי לשחרר את המשאב של המודעה, מסירים את המודעה מהיררכיית התצוגה ומבטלים את כל ההפניות אליה:

Java

public void destroyBanner() {
  // Remove banner from view hierarchy.
  if (adView != null) {
    View parentView = (View) adView.getParent();
    if (parentView instanceof ViewGroup) {
      ((ViewGroup) parentView).removeView(adView);
    }

    // Destroy the banner ad resources.
    adView.destroy();
  }

  // Drop reference to the banner ad.
  adView = null;
}

Kotlin

fun destroyBanner() {
  // Remove banner from view hierarchy.
  val parentView = adView?.parent
  if (parentView is ViewGroup) {
    parentView.removeView(adView)
  }

  // Destroy the banner ad resources.
  adView?.destroy()

  // Drop reference to the banner ad.
  adView = null
}

Jetpack פיתוח נייטיב

DisposableEffect(Unit) {
  // Destroy the AdView to prevent memory leaks when the screen is disposed.
  onDispose { adView.destroy() }
}

אירועי מודעות

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

Java

if (adView != null) {
  adView.setAdListener(
      new AdListener() {
        @Override
        public void onAdClicked() {
          // Code to be executed when the user clicks on an ad.
        }

        @Override
        public void onAdClosed() {
          // Code to be executed when the user is about to return
          // to the app after tapping on an ad.
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          // Code to be executed when an ad request fails.
        }

        @Override
        public void onAdImpression() {
          // Code to be executed when an impression is recorded
          // for an ad.
        }

        @Override
        public void onAdLoaded() {
          // Code to be executed when an ad finishes loading.
        }

        @Override
        public void onAdOpened() {
          // Code to be executed when an ad opens an overlay that
          // covers the screen.
        }
      });
}

Kotlin

adView?.adListener =
  object : AdListener() {
    override fun onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    override fun onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      // Code to be executed when an ad request fails.
    }

    override fun onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    override fun onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    override fun onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
  }

כל אחת מהשיטות שאפשר לשנות ב-AdListener תואמת לאירוע במחזור החיים של מודעה.

‫methods שאפשר לשנות
onAdClicked() ה-method‏ onAdClicked() מופעלת כשמתועד קליק על מודעה.
onAdClosed() השיטה onAdClosed() מופעלת כשמשתמש חוזר לאפליקציה אחרי צפייה בכתובת היעד של מודעה. האפליקציה יכולה להשתמש בה כדי להמשיך פעילויות שהושעו או לבצע כל פעולה אחרת שנדרשת כדי להתכונן לאינטראקציה.
onAdFailedToLoad() ה-method‏ onAdFailedToLoad() היא היחידה שכוללת פרמטר. הפרמטר error מסוג LoadAdError מתאר את השגיאה שהתרחשה. מידע נוסף זמין במאמרי העזרה בנושא איתור באגים בשגיאות בטעינת מודעות.
onAdImpression() ה-method‏ onAdImpression() מופעלת כשמתועדת חשיפה של מודעה.
onAdLoaded() השיטה onAdLoaded() מופעלת כשטעינת המודעה מסתיימת. אם רוצים לעכב את הוספת ה-AdManagerAdView לפעילות או למקטע עד שמוודאים שהמודעה תיטען, אפשר לעשות את זה כאן.
onAdOpened() השיטה onAdOpened() מופעלת כשמודעה פותחת שכבת-על שמכסה את המסך.

שיפור מהירות באמצעות חומרה במודעות וידאו

כדי שמודעות וידאו יוצגו בהצלחה בצפיות במודעות באנר, צריך להפעיל האצת חומרה.

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

הפעלה של שיפור מהירות באמצעות חומרה

אם האפליקציה לא פועלת כמו שצריך כששיפור המהירות באמצעות חומרה מופעל באופן גלובלי, אפשר לשלוט בו גם לפעילויות ספציפיות. כדי להפעיל או להשבית את שיפור המהירות באמצעות חומרה, אפשר להשתמש במאפיין android:hardwareAccelerated של הרכיבים <application> ו-<activity> בקובץ AndroidManifest.xml. בדוגמה הבאה, שיפור המהירות באמצעות חומרה מופעל בכל האפליקציה, אבל מושבת בפעילות אחת:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

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

ספירה ידנית של חשיפות

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

אתם יכולים לשלוח פינגים של חשיפות אל Ad Manager באופן ידני אם יש לכם תנאים מיוחדים לגבי המועד שבו צריך לתעד חשיפה:

Java

if (adManagerAdView != null) {
  adManagerAdView.setManualImpressionsEnabled(true);
}

Kotlin

adManagerAdView?.setManualImpressionsEnabled(true)

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

Java

if (adManagerAdView != null) {
  adManagerAdView.recordManualImpression();
}

Kotlin

adManagerAdView?.recordManualImpression()

אירועים באפליקציה

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

אפשר להאזין לאירועים ספציפיים של אפליקציות ב-Ad Manager באמצעות AppEventListener. האירועים האלה יכולים להתרחש בכל שלב במחזור החיים של המודעה, גם לפני הקריאה ל-onAdLoaded().

מגדירים את AppEventListener ב-AdManagerAdView:

Java

if (adManagerAdView != null) {
  adManagerAdView.setAppEventListener(this);
}

Kotlin

adManagerAdView?.appEventListener = this

בדוגמה הבאה אפשר לראות איך משנים את צבע הרקע של האפליקציה בהתאם לאירוע באפליקציה עם שם של צבע:

Java

@Override
public void onAppEvent(@NonNull String name, @NonNull String info) {
  if (name.equals("color")) {
    switch (info) {
      case "green":
        // Set background color to green.
        break;
      case "blue":
        // Set background color to blue.
        break;
      default:
        // Set background color to black.
        break;
    }
  }
}

Kotlin

override fun onAppEvent(name: String, info: String) {
  if (name == "color") {
    when (info) {
      "green" -> {
        // Set background color to green.
      }
      "blue" -> {
        // Set background color to blue.
      }
      else -> {
        // Set background color to black.
      }
    }
  }
}

והנה הקריאייטיב התואם ששולח הודעות על אירועי אפליקציה של צבע אל ה-Listener:

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

כדי לראות דוגמה להטמעה של אירועים באפליקציה, אפשר לעיין בדוגמה של אירועים באפליקציה ב-Ad Manager באפליקציית API Demo.

‫Java Kotlin JetpackCompose

השלבים הבאים

מודעות באנר שאפשר לכווץ

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

מודעות באנר מותאמות שמוצגות בתוך הטקסט

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

נושאים נוספים