מודעות מותאמות

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

כשמודעה מותאמת נטענת, האפליקציה מקבלת אובייקט מודעה שמכיל את הנכסים שלה, והאפליקציה — במקום Google Mobile Ads SDK — אחראית להצגתם.

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

בדף הזה מוסבר איך להשתמש ב-SDK כדי לטעון מודעות מותאמות. טיפ: מידע נוסף על מודעות מותאמות זמין במדריך למודעות מותאמות.

אפשר גם לעיין בסיפורי הצלחה של לקוחות: מקרה לדוגמה 1, מקרה לדוגמה 2.

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

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

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

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

ca-app-pub-3940256099942544/2247696110

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

במאמר מודעות בדיקה מוסבר איך פועלות מודעות הבדיקה של Google Mobile Ads SDK.

טעינת מודעות

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

פיתוח AdLoader

הקוד הבא מדגים איך בונים AdLoader שיכול לטעון מודעות מותאמות:

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110}")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

ה-method forNativeAd() אחראית להכנת AdLoader לפורמט NativeAd. כשמודעה נטענת בהצלחה, מתבצעת קריאה ל-method‏ onNativeAdLoaded() של אובייקט המאזין.

הגדרת AdListener באמצעות AdLoader (אופציונלי)

כשיוצרים את AdLoader, הפונקציה withAdListener מגדירה AdListener לטעינה. השיטה מקבלת פרמטר יחיד מסוג AdListener, שמקבל קריאות חזרה (callbacks) מה-AdLoader כשמתרחשים אירועים במחזור החיים של המודעה:

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

בקשה להצגת מודעות

לאחר שמסיימים ליצור AdLoader, אפשר להשתמש בו לשליחת בקשות להצגת מודעות. יש שתי שיטות לעשות זאת: loadAd() ו-loadAds().

loadAd()

השיטה הזו שולחת בקשה להצגת מודעה אחת.

Java

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())

loadAds()

בשיטה הזו נשלחת בקשה להצגת כמה מודעות (עד חמש):

Java

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

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

טעינת מודעות מרובות (אופציונלי)

השיטה loadAds() מקבלת פרמטר נוסף: מספר המודעות שה-SDK צריך לנסות לטעון עבור הבקשה. המספר הזה מוגבל לחמישה, ואין ערובה לכך שה-SDK יחזיר את מספר המודעות המדויק שביקשת.

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

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

קריאות חזרה

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

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

דוגמה שממחישה איך בודקים את isLoading() ב-callback של onNativeAdLoaded():

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

שחרור משאבים

חשוב להשתמש בשיטה destroy() במודעות מותאמות שנטענו. כך אפשר לשחרר משאבים שמנצלים אותם ולמנוע דליפות זיכרון.

מוודאים שכל ההפניות של NativeAd מושמדות ב-method onDestroy() של הפעילות.

בקריאה החוזרת (callback) של onNativeAdLoaded, חשוב למחוק את כל המודעות הנתמכות הקיימות שיבוטל ההפניה אליהן.

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

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            nativeAd.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

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

יש לפעול לפי הכללים הבאים בזמן טעינת המודעות.

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

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

  • אין להתקשר ל-loadAd() או ל-loadAds() ב-AdLoader עד שהטעינה של הבקשה הראשונה מסתיימת.

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

  • להשמד מודעות מותאמות כשהן לא בשימוש יותר.

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

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

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

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

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

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

הצגת המודעה

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