מודעות מתגמלות

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

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

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

יצירת אובייקט של מודעה מתגמלת

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

כדי לשלב מודעות בקלות רבה יותר באמצעות Unity Editor, אפשר לנסות את גרסת הבטא החדשה של מיקומי מודעות.

using UnityEngine.Events;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);
    }
}

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

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

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

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

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

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

טעינת מודעה

כדי לטעון מודעה מתגמלת, יש להתקשר אל השיטה loadAd() של האובייקט RewardedAd. השיטה הזו מחייבת ארגומנט של AdRequest כארגומנט.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }
}

[אופציונלי] מאמתים קריאות חוזרות לאימות בצד השרת (SSV)

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

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

void HandleRewardedAdLoaded(RewardedAd ad, AdFailedToLoadEventArgs error)
{
    // Create and pass the SSV options to the rewarded ad.
    var options = new ServerSideVerificationOptions
                          .Builder()
                          .SetCustomData("SAMPLE_CUSTOM_DATA_STRING")
                          .Build()
    ad.SetServerSideVerificationOptions(options);
}

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

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

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

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        string adUnitId;
        #if UNITY_ANDROID
            adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }
}

האירוע OnUserEarnedReward מספק ארגומנטים מיוחדים לאירוע. הוא מעביר מופע של Reward עם Type ו-Amount שמתאר את התגמול שניתן למשתמש:

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
     MonoBehaviour.print(
          "HandleRewardedAdRewarded event received for "
              + amount.ToString() + " " + type);
}

אירועי מודעות זמינים

OnAdLoaded
מופעלת כשמסתיימת טעינת מודעה.
OnAdFailedToLoad
מופעלת כשמודעה לא נטענת. מאפיין Message של ה-AdErrorEventArgs שסופק מתאר את סוג הכשל.
OnAdOpening
מופעלת כשהמודעה מוצגת, ומכסה את מסך המכשיר. כאן אפשר להשהות את פלט האודיו של האפליקציה או את לולאת המשחק במידת הצורך.
OnAdFailedToShow
מופעלת כשמודעה לא מוצגת. מאפיין Message של ה-AdErrorEventArgs שסופק מתאר את סוג הכשל.
OnUserEarnedReward
מופעלת כאשר משתמש צריך לתגמל על צפייה בסרטון. הפרמטר Reward מתאר את התגמול שיוצג למשתמש.
OnAdClosed
מופעלת כשמודעת הווידאו המתגמלת סגורה כי המשתמש לוחץ על סמל הסגירה או על הלחצן 'הקודם'. אם האפליקציה השהתה את פלט האודיו או את לולאת המשחק שלה, זהו מקום מצוין להמשיך בו.

הצגה של המודעה

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

כדי להציג מודעה מתגמלת, בודקים את השיטה של IsLoaded() כדי לוודא שהיא הסתיימה, ואז מתקשרים אל show(). לדוגמה:

private void UserChoseToWatchAd()
{
  if (this.rewardedAd.IsLoaded()) {
    this.rewardedAd.Show();
  }
}

טעינה מראש של המודעה המתגמלת הבאה באמצעות OnAdClosed

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

שיטה מומלצת היא לטעון מודעה מתגמלת אחרת באירוע המודעה של OnAdClosed כדי שהמודעה המתגמלת הבאה תתחיל להיטען ברגע שהמודעה הקודמת נסגרת:

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void CreateAndLoadRewardedAd()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

...

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        this.CreateAndLoadRewardedAd();
    }
}

מתבצעת טעינה של מספר מודעות מתגמלות

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

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;
    ...
    public void Start()
    {
        ...

        this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
        this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
    }

    public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
    {
        RewardedAd rewardedAd = new RewardedAd(adUnitId);

        rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        rewardedAd.LoadAd(request);
        return rewardedAd;
    }
}

דוגמאות