שנתחיל?

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

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

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

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

טעינת פורמטים של מודעות מותאמות

מודעות מותאמות נטענות דרך המחלקה AdLoader, שיש לה מחלקה AdLoader.Builder משלה כדי להתאים אישית את המחלקה במהלך היצירה שלה. השיטה ForNativeAd() מגדירה את AdLoader לטיפול במודעות מותאמות.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
}

הרשמה לאירועי מודעות ב-AdLoader

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

OnNativeAdLoaded

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

OnAdFailedToLoad

מופעל כשטעינה של מודעה מותאמת נכשלה.

טעינת המודעה

אחרי שמסיימים ליצור את AdLoader, צריך להפעיל את השיטה LoadAd() שלו כדי לבקש מודעה:

adLoader.LoadAd(new AdRequest.Builder().Build());

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

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

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
    adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
    adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

טיפול בטעינות מודעות שנכשלו

האירוע OnAdFailedToLoad הוא מסוג EventHandle<AdFailedToLoadEventArgs>. ניתוח הסיבה לכשל בטעינת המודעות מהאירוע הזה מוצג בהמשך.

private void RequestNativeAd() {
    ...
    adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}

private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
    Debug.Log("Native ad failed to load: " + args.Message);
}

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

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

טיפול בעומס המודעות

האירוע OnNativeAdLoaded הוא מסוג EventHandler<NativeAdEventArgs>. אפשר לאחזר את המודעה שהיא מקובצת באובייקט NativeAd, ואפשר לאחזר אותה מ-NativeAdEventArgs, כפי שמוצג כאן:

private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
}

אחזור נכסים של מודעות מותאמות

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

private bool nativeAdLoaded;
private NativeAd nativeAd;

void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for the icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        // Get string for headline asset of native ad.
        string headline = this.nativeAd.GetHeadlineText();
    }
}

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}

שימו לב: צריך לגשת לנכסים של המודעות רק ב-thread הראשי, למשל, מ-method Update() בסקריפט של Unity. כמו כן, חשוב לזכור שהנכסים הבאים לא תמיד קיימים, וצריך לבדוק אותם לפני ההצגה שלהם:

  • GetStarRating()
  • GetStore()
  • GetPrice()
  • GetAdvertiser()
  • GetIconTexture()

נכס AdChoices

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

רישום אובייקטים של GameObjects לנכס שמצורף למודעה

עליכם לרשום את GameObject עבור הנכס שמצורף למודעה באפליקציה שלכם ב-Unity. אם הרישום בוצע בהצלחה, השיטה שבה נעשה שימוש כדי לרשום את GameObject מחזירה bool. עבור List<GameObject>, השיטה מחזירה int שמציין את הספירה של GameObject שנרשם בהצלחה.

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

if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
    // Handle failure to register the icon ad asset.
}

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

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

// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;

// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;

// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();

הדגמה (דמו)

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

private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
        icon.transform.position = new Vector3(1, 1, 1);
        icon.transform.localScale = new Vector3(1, 1, 1);
        icon.GetComponent<Renderer>().material.mainTexture = iconTexture;

        // Register GameObject that will display icon asset of native ad.
        if (!this.nativeAd.RegisterIconImageGameObject(icon))
        {
            // Handle failure to register ad asset.
        }
    }
}
...

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}