במדריך הזה מוסבר איך להשתמש בתוסף של מודעות מותאמות כדי להטמיע מודעות מותאמות באפליקציית Unity, וגם מפורטים בו כמה דברים חשובים שכדאי לקחת בחשבון.
מודעות מותאמות הן מודעות שמשתלבות היטב בחוויית המשתמש בהקשר שבו הן מוצגות, גם מבחינת הפורמט וגם מבחינת הפונקציונליות. הן גם תואמות לעיצוב הוויזואלי של האפליקציה שבה הן מוצגות. הפורמט של מודעות מותאמות ב-Ad Manager מאפשר לבעלי האפליקציות להציג מודעות שמשתלבות בצורה חלקה עם התוכן. אפשר להשתמש בטכנולוגיה הזו כדי להטמיע מודעות ברמת התאמה גבוהה מאוד לתוכן שמנצלות את כל היתרונות של קוד ה-Native באפליקציות Unity.
מודעות מותאמות מוצגות באמצעות אותם סוגים של GameObjects שבהם אתם כבר משתמשים כדי לבנות את האפליקציות שלכם, ואפשר לעצב אותן כך שיתאימו לעיצוב החזותי של חוויית המשתמש שבה הן מוצגות. כשמודעה מותאמת נטענת, האפליקציה מקבלת אובייקט מותאם שמכיל את הנכסים שלה, ואפליקציית Unity מציגה אותם במקום ה-SDK.
דרישות מוקדמות
- גרסה 7.0.0 ואילך של הפלאגין למודעות לנייד של Google ל-Unity.
- קוראים את המדריך לתחילת העבודה.
- מורידים ומתקינים את התוסף של המודעות המותאמות.
טעינה של פורמטים של מודעות מותאמות
מודעות מותאמות מובנות נטענות דרך המחלקה AdLoader, שיש לה מחלקה משלה AdLoader.Builder להתאמה אישית במהלך היצירה. השיטה ForNativeAd() מגדירה את AdLoader לטיפול במודעות מותאמות.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
הרשמה לאירועים של מודעות AdLoader
כדי לקבל הודעה כשטעינה של מודעה מותאמת מסתיימת בהצלחה או נכשלת, צריך להוסיף נציגים (delegates) למחלקה 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;
}
הערה: אפשר לגשת לנכסי מודעות רק בשרשור הראשי, למשל,
מהשיטה Update() של סקריפט Unity. חשוב גם לזכור שלא תמיד מובטח שהנכסים הבאים יוצגו, ולכן צריך לבדוק אותם לפני ההצגה:
GetStarRating()GetStore()GetPrice()GetAdvertiser()GetIconTexture()
נכס AdChoices
חובה להציג את נכס AdChoices במודעה המותאמת. בנוסף, חשוב שיהיה קל לראות את נכס המודעה של AdChoices, לכן צריך לבחור בקפידה את צבעי הרקע והתמונות.
רישום של אובייקטים מסוג GameObject כנכסים שמצורפים למודעות
כדי שנכס המודעה GameObject יוצג באפליקציית Unity, צריך לרשום אותו. אם הרישום יצליח, הפונקציה שבה השתמשתם כדי לרשום את GameObject תחזיר bool. במקרה של List<GameObject>, השיטה מחזירה int שמציין את מספר GameObject שנרשמו בהצלחה.
אם הרישום של נכס שמצורף למודעה לא מצליח, המערכת לא תזהה חשיפות וקליקים במודעה המותאמת המקבילה.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
ל-GameObject שרשום כנכס מודעה צריך להיות רכיב Collider קמור שמייצג את הגודל והצורה של GameObject. אם חסרים רכיבי Collider באובייקטים של GameObject שנרשמו לנכסי מודעות, או אם יש רכיב שההגדרה שלו שגויה, המודעות המותאמות לא יפעלו בצורה תקינה.
בקטע הקוד שבהמשך, התו 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;
}