โฆษณาคั่นระหว่างหน้าคือโฆษณาแบบเต็มหน้าจอที่ครอบคลุมอินเทอร์เฟซของแอปที่โฮสต์ โฆษณาเหล่านี้มักจะแสดงที่จุดเปลี่ยนหน้าปกติในขณะที่ใช้งานแอป เช่น ในช่วงหยุดชั่วคราวระหว่างเปลี่ยนด่านในเกม เมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า ผู้ใช้สามารถเลือกแตะโฆษณาเพื่อไปยังปลายทางของโฆษณาหรือจะปิดโฆษณาและกลับไปที่แอปก็ได้
คู่มือนี้จะอธิบายวิธีผสานรวมโฆษณาคั่นระหว่างหน้าเข้ากับแอป Unity
ข้อกำหนดเบื้องต้น
- ทำตามคู่มือเริ่มต้นใช้งาน
ทดสอบด้วยโฆษณาทดสอบเสมอ
โค้ดตัวอย่างต่อไปนี้มีรหัสหน่วยโฆษณาที่คุณสามารถใช้เพื่อขอโฆษณาทดสอบ เราได้กําหนดค่ามาเป็นพิเศษให้แสดงโฆษณาทดสอบแทนโฆษณาเวอร์ชันที่ใช้งานจริงสําหรับคําขอทุกรายการ จึงใช้งานได้อย่างปลอดภัย
อย่างไรก็ตาม หลังจากลงทะเบียนแอปในเว็บอินเทอร์เฟซของ Ad Manager และสร้างรหัสหน่วยโฆษณาของคุณเองเพื่อใช้ในแอปแล้ว ให้กําหนดค่าอุปกรณ์เป็นอุปกรณ์ทดสอบอย่างชัดเจนในระหว่างการพัฒนา
/21775744923/example/interstitial
เริ่มต้นใช้งาน SDK โฆษณาในอุปกรณ์เคลื่อนที่
ก่อนโหลดโฆษณา ให้แอปเริ่มต้นใช้งาน Mobile Ads SDK โดยเรียกใช้
MobileAds.Initialize()
ขั้นตอนนี้ต้องทำเพียงครั้งเดียว โดยควรทำเมื่อเปิดแอป
using GoogleMobileAds;
using GoogleMobileAds.Api;
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
public void Start()
{
// Initialize the Google Mobile Ads SDK.
MobileAds.Initialize((InitializationStatus initStatus) =>
{
// This callback is called once the MobileAds SDK is initialized.
});
}
}
หากคุณใช้สื่อกลาง ให้รอจนกว่าจะมีการเรียกกลับก่อนที่จะโหลดโฆษณา เนื่องจากวิธีนี้จะช่วยให้มั่นใจได้ว่าอะแดปเตอร์สื่อกลางทั้งหมดจะได้รับการเริ่มต้น
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาคั่นระหว่างหน้ามีดังนี้
- โหลดโฆษณาคั่นระหว่างหน้า
- แสดงโฆษณาคั่นระหว่างหน้า
- ฟังเหตุการณ์โฆษณาคั่นระหว่างหน้า
- ล้างโฆษณาคั่นระหว่างหน้า
- โหลดโฆษณาคั่นระหว่างหน้าถัดไปล่วงหน้า
โหลดโฆษณาคั่นระหว่างหน้า
การโหลดโฆษณาคั่นระหว่างหน้าจะทําได้โดยใช้เมธอด Load()
แบบคงที่ในคลาส
InterstitialAd
เมธอดการโหลดต้องใช้รหัสหน่วยโฆษณา ออบเจ็กต์ AdManagerAdRequest
และตัวแฮนเดิลการเสร็จสมบูรณ์ซึ่งจะเรียกใช้เมื่อการโหลดโฆษณาสําเร็จหรือไม่สําเร็จ ออบเจ็กต์ AdManagerInterstitialAd
ที่โหลดจะแสดงเป็นพารามิเตอร์ใน Completion Handler ตัวอย่างด้านล่างแสดงวิธีโหลด
AdManagerInterstitialAd
// This ad unit is configured to always serve test ads.
private string _adUnitId = "/21775744923/example/interstitial";
private InterstitialAd _interstitialAd;
/// <summary>
/// Loads the interstitial ad.
/// </summary>
public void LoadInterstitialAd()
{
// Clean up the old ad before loading a new one.
if (_interstitialAd != null)
{
_interstitialAd.Destroy();
_interstitialAd = null;
}
Debug.Log("Loading the interstitial ad.");
// create our request used to load the ad.
var adRequest = new AdManagerAdRequest();
// send the request to load the ad.
AdManagerInterstitialAd.Load(_adUnitId, adRequest,
(InterstitialAd ad, LoadAdError error) =>
{
// if error is not null, the load request failed.
if (error != null || ad == null)
{
Debug.LogError("interstitial ad failed to load an ad " +
"with error : " + error);
return;
}
Debug.Log("Interstitial ad loaded with response : "
+ ad.GetResponseInfo());
_interstitialAd = ad;
});
}
แสดงโฆษณาคั่นระหว่างหน้า
หากต้องการแสดงโฆษณาคั่นระหว่างหน้าที่โหลดแล้ว ให้เรียกใช้เมธอด Show()
ในอินสแตนซ์ AdManagerInterstitialAd
โฆษณาอาจแสดง 1 ครั้งต่อการโหลด ใช้วิธีการ CanShowAd()
เพื่อยืนยันว่าโฆษณาพร้อมแสดงแล้ว
/// <summary>
/// Shows the interstitial ad.
/// </summary>
public void ShowInterstitialAd()
{
if (_interstitialAd != null && _interstitialAd.CanShowAd())
{
Debug.Log("Showing interstitial ad.");
_interstitialAd.Show();
}
else
{
Debug.LogError("Interstitial ad is not ready yet.");
}
}
ฟังเหตุการณ์โฆษณาคั่นระหว่างหน้า
หากต้องการปรับแต่งลักษณะการทํางานของโฆษณาเพิ่มเติม คุณสามารถเชื่อมต่อกับเหตุการณ์ต่างๆ ในวงจรชีวิตของโฆษณา คอยฟังเหตุการณ์เหล่านี้โดยการลงทะเบียนผู้รับมอบสิทธิ์ดังที่แสดงด้านล่าง
private void RegisterEventHandlers(InterstitialAd interstitialAd)
{
// Raised when the ad is estimated to have earned money.
interstitialAd.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("Interstitial ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// Raised when an impression is recorded for an ad.
interstitialAd.OnAdImpressionRecorded += () =>
{
Debug.Log("Interstitial ad recorded an impression.");
};
// Raised when a click is recorded for an ad.
interstitialAd.OnAdClicked += () =>
{
Debug.Log("Interstitial ad was clicked.");
};
// Raised when an ad opened full screen content.
interstitialAd.OnAdFullScreenContentOpened += () =>
{
Debug.Log("Interstitial ad full screen content opened.");
};
// Raised when the ad closed full screen content.
interstitialAd.OnAdFullScreenContentClosed += () =>
{
Debug.Log("Interstitial ad full screen content closed.");
};
// Raised when the ad failed to open full screen content.
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("Interstitial ad failed to open full screen content " +
"with error : " + error);
};
}
ล้างโฆษณาคั่นระหว่างหน้า
เมื่อใช้ AdManagerInterstitialAd
เสร็จแล้ว ให้เรียกใช้เมธอด Destroy()
ก่อนยกเลิกการอ้างอิง ดังนี้
_interstitialAd.Destroy();
ซึ่งจะแจ้งให้ปลั๊กอินทราบว่าไม่มีการใช้ออบเจ็กต์อีกต่อไปและสามารถเรียกคืนหน่วยความจำที่ครอบครองได้ การเรียกใช้เมธอดนี้ไม่สําเร็จจะทําให้หน่วยความจํารั่ว
โหลดโฆษณาคั่นระหว่างหน้าถัดไปล่วงหน้า
โฆษณาคั่นระหว่างหน้าเป็นออบเจ็กต์แบบใช้ครั้งเดียว ซึ่งหมายความว่าเมื่อโฆษณาคั่นระหว่างหน้าแสดงแล้ว ออบเจ็กต์ดังกล่าวจะใช้ไม่ได้อีก หากต้องการขอโฆษณาคั่นระหว่างหน้าอีกรายการ ให้สร้างออบเจ็กต์ AdManagerInterstitialAd
ใหม่
หากต้องการเตรียมโฆษณาคั่นระหว่างหน้าสําหรับโอกาสการแสดงผลครั้งถัดไป ให้โหลดโฆษณาคั่นระหว่างหน้าล่วงหน้าเมื่อมีการเรียกเหตุการณ์โฆษณา OnAdFullScreenContentClosed
หรือ OnAdFullScreenContentFailed
private void RegisterReloadHandler(InterstitialAd interstitialAd)
{
// Raised when the ad closed full screen content.
interstitialAd.OnAdFullScreenContentClosed += ()
{
Debug.Log("Interstitial Ad full screen content closed.");
// Reload the ad so that we can show another as soon as possible.
LoadInterstitialAd();
};
// Raised when the ad failed to open full screen content.
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("Interstitial ad failed to open full screen content " +
"with error : " + error);
// Reload the ad so that we can show another as soon as possible.
LoadInterstitialAd();
};
}
เหตุการณ์ของแอป
เหตุการณ์ในแอปช่วยให้คุณสร้างโฆษณาที่ส่งข้อความไปยังโค้ดแอปได้ จากนั้นแอปจะดําเนินการตามข้อความเหล่านี้ได้
คุณสามารถฟังเหตุการณ์แอปที่เฉพาะเจาะจงของ Ad Manager ได้โดยใช้ AppEvent
เหตุการณ์เหล่านี้อาจเกิดขึ้นได้ทุกเมื่อตลอดอายุการใช้งานของโฆษณา แม้กระทั่งก่อนที่ระบบจะเรียกใช้การโหลด
namespace GoogleMobileAds.Api.AdManager;
/// The App event message sent from the ad.
public class AppEvent
{
// Name of the app event.
string Name;
// Argument passed from the app event.
string Value;
}
OnAppEventReceived
จะแสดงขึ้นเมื่อเกิดเหตุการณ์แอปในโฆษณา ต่อไปนี้คือตัวอย่างวิธีจัดการเหตุการณ์นี้ในโค้ด
_interstitialAd.OnAppEventReceived += (AppEvent args) =>
{
Debug.Log($"Received app event from the ad: {args.Name}, {args.Value}.");
};
ต่อไปนี้คือตัวอย่างที่แสดงวิธีเปลี่ยนสีพื้นหลังของแอปโดยขึ้นอยู่กับเหตุการณ์ในแอปที่มีชื่อเป็น color
_interstitialAd.OnAppEventReceived += (AppEvent args) =>
{
if (args.Name == "color")
{
Color color;
if (ColorUtility.TryParseColor(arg.Value, out color))
{
gameObject.GetComponent<Renderer>().material.color = color;
}
}
};
ครีเอทีฟโฆษณาที่เกี่ยวข้องซึ่งส่งเหตุการณ์ของแอปที่มีสีมีดังนี้
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
แนวทางปฏิบัติแนะนำ
- พิจารณาว่าโฆษณาคั่นระหว่างหน้าเป็นประเภทโฆษณาที่เหมาะสมกับแอปของคุณหรือไม่
- โฆษณาคั่นระหว่างหน้ามีประสิทธิภาพดีที่สุดในแอปที่มีจุดเปลี่ยนหน้าตามปกติ การสิ้นสุดของงานภายในแอป เช่น การแชร์รูปภาพหรือเล่นเกมผ่านด่าน จะสร้างจุดดังกล่าว อย่าลืมพิจารณาว่าควรแสดงโฆษณาคั่นระหว่างหน้า ณ จุดใดในขั้นตอนของแอปเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด และผู้ใช้มีแนวโน้มจะตอบสนองอย่างไร
- หยุดการดำเนินการชั่วคราวเมื่อแสดงโฆษณาคั่นระหว่างหน้า
- โฆษณาคั่นระหว่างหน้ามีหลายประเภท เช่น ข้อความ รูปภาพ หรือวิดีโอ สิ่งสำคัญคือเมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า แอปจะต้องระงับการใช้ทรัพยากรบางอย่างเพื่อให้โฆษณาใช้ประโยชน์จากทรัพยากรเหล่านั้นได้ ตัวอย่างเช่น เมื่อเรียกใช้เพื่อแสดงโฆษณาคั่นระหว่างหน้า อย่าลืมหยุดเอาต์พุตเสียงที่แอปของคุณสร้างขึ้นไว้ชั่วคราว คุณเล่นเสียงต่อได้ในเหตุการณ์
OnAdFullScreenContentClosed()
ซึ่งเรียกใช้ได้เมื่อผู้ใช้โต้ตอบกับโฆษณาเสร็จแล้ว นอกจากนี้ ให้ลองหยุดงานประมวลผลที่ต้องใช้ทรัพยากรมากชั่วคราว เช่น ลูปเกม ขณะที่โฆษณาแสดงอยู่ วิธีนี้ช่วยให้ผู้ใช้ไม่พบกราฟิกที่ช้าหรือไม่ตอบสนอง หรือวิดีโอที่กระตุก - อย่าแสดงโฆษณาต่อผู้ใช้มากเกินไป
- แม้ว่าการเพิ่มความถี่ของโฆษณาคั่นระหว่างหน้าในแอปอาจดูเหมือนเป็นวิธีที่ยอดเยี่ยมในการเพิ่มรายได้ แต่ก็อาจทำให้ประสบการณ์ของผู้ใช้แย่ลงและอัตราการคลิกผ่านลดลงด้วย ตรวจสอบว่าผู้ใช้ไม่ได้รับการขัดจังหวะบ่อยจนทำให้ใช้งานแอปของคุณไม่ได้
แหล่งข้อมูลเพิ่มเติม
- ตัวอย่าง HelloWorld: การติดตั้งใช้งานโฆษณาทุกรูปแบบในขั้นต่ำ