אני רוצה לנסות

במדריך הזה מוסבר איך להשתמש בתוסף של מודעות מותאמות כדי להטמיע מודעות מותאמות ב-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, צריך לקרוא ל-method 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;
}

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

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

נכס AdChoices

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

רישום GameObjects עבור נכס מודעה

צריך לרשום את GameObject כדי שהנכס שמצורף למודעה יוצג אפליקציית Unity. אם הרישום יצליח, השיטה ששימשה לרישום הפונקציה GameObject מחזירה bool. עבור List<GameObject>, ה-method מחזירה 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;
}