插頁式廣告是全螢幕廣告,會覆蓋主應用程式的介面。這類廣告通常會顯示在應用程式流程中的自然轉換點,例如遊戲關卡之間的暫停期間。應用程式顯示插頁式廣告時,使用者可以選擇輕觸廣告前往到達網頁,或是關閉廣告返回應用程式。個案研究。
本指南說明如何將插頁式廣告整合至 Unity 應用程式。
先備知識
- 完成入門指南。
建立插頁式廣告
顯示插頁式廣告的第一步,就是在附加至 GameObject
的指令碼中建立 InterstitialAd
物件。
using GoogleMobileAds.Api;
...
private InterstitialAd interstitial;
private void RequestInterstitial()
{
#if UNITY_ANDROID
string adUnitId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
string adUnitId = "ca-app-pub-3940256099942544/4411468910";
#else
string adUnitId = "unexpected_platform";
#endif
// Initialize an InterstitialAd.
this.interstitial = new InterstitialAd(adUnitId);
}
InterstitialAd
的建構函式參數如下:
adUnitId
:InterstitialAd
應從中載入廣告的 AdMob 廣告單元 ID。
請務必留意廣告單元的使用方式,會因平台而異。如要在 iOS 上提出廣告請求,您必須使用 iOS 廣告單元;在 Android 上提出請求時,您必須使用 Android 廣告單元。
一律使用測試廣告進行測試
上述程式碼範例包含廣告單元 ID,您可以自由地請求廣告。由於這項機制經過特別設定,每次請求都能傳回測試廣告,而不是正式廣告,因此可以放心使用。
不過,在 AdMob UI 中註冊應用程式,並建立自己的廣告單元 ID 並用於應用程式後,就必須在開發期間明確將裝置設為測試裝置。這點非常重要。使用實際廣告進行測試是違反 AdMob 政策的行為,我們可能會因此將您的帳戶停權。要瞭解如何確保開發時能持續收到測試廣告,請參閱「測試廣告」一文。
載入廣告
InterstitialAd
完成例項化後,下一步就是載入廣告。方法是使用 InterstitialAd
類別中的 loadAd()
方法。這個方法會使用 AdRequest
引數,保留單一廣告請求的執行階段資訊 (例如指定目標資訊)。
以下範例說明如何載入廣告:
using GoogleMobileAds.Api; ... private InterstitialAd interstitial; private void RequestInterstitial() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/1033173712"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/4411468910"; #else string adUnitId = "unexpected_platform"; #endif // Initialize an InterstitialAd. this.interstitial = new InterstitialAd(adUnitId); // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the interstitial with the request. this.interstitial.LoadAd(request); }
放送廣告
插頁式廣告應在應用程式流程中的自然暫停期間顯示。在遊戲關卡之間,或使用者完成任務後,就是個好例子。如要顯示插頁式廣告,請使用 isLoaded()
方法確認廣告已載入,然後呼叫 show()
。
上述程式碼範例的插頁式廣告可能會在遊戲結束時顯示,如下所示。
private void GameOver()
{
if (this.interstitial.IsLoaded()) {
this.interstitial.Show();
}
}
廣告事件
如要進一步自訂廣告的行為,您可以在廣告生命週期中觸發多種事件:載入、開啟、關閉等。為適當的 EventHandler
註冊委派來監聽這些事件,如下所示。
using GoogleMobileAds.Api; ... private InterstitialAd interstitial; private void RequestInterstitial() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/1033173712"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/4411468910"; #else string adUnitId = "unexpected_platform"; #endif // Initialize an InterstitialAd. this.interstitial = new InterstitialAd(adUnitId); // Called when an ad request has successfully loaded. this.interstitial.OnAdLoaded = HandleOnAdLoaded; // Called when an ad request failed to load. this.interstitial.OnAdFailedToLoad = HandleOnAdFailedToLoad; // Called when an ad is shown. this.interstitial.OnAdOpening = HandleOnAdOpening; // Called when the ad is closed. this.interstitial.OnAdClosed = HandleOnAdClosed; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the interstitial with the request. this.interstitial.LoadAd(request); } public void HandleOnAdLoaded(object sender, EventArgs args) { MonoBehaviour.print("HandleAdLoaded event received"); } public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) { MonoBehaviour.print("HandleFailedToReceiveAd event received with message: " args.Message); } public void HandleOnAdOpening(object sender, EventArgs args) { MonoBehaviour.print("HandleAdOpening event received"); } public void HandleOnAdClosed(object sender, EventArgs args) { MonoBehaviour.print("HandleAdClosed event received"); }
OnAdFailedToLoad
事件包含特殊事件引數。它會傳遞具有說明錯誤的 Message
的 HandleAdFailedToLoadEventArgs
例項:
public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
print("Interstitial failed to load: " args.Message);
// Handle the ad failed to load event.
}
廣告事件 | 說明 |
---|---|
OnAdLoaded |
廣告載入完畢後,系統會執行 OnAdLoaded 事件。 |
OnAdFailedToLoad |
廣告無法載入時,系統會叫用 OnAdFailedToLoad 事件。Message 參數會說明發生的失敗類型。 |
OnAdOpening |
此方法會在廣告顯示時叫用,覆蓋裝置的螢幕。 |
OnAdClosed |
使用者輕觸關閉圖示或使用返回按鈕關閉插頁式廣告後,此方法就會叫用此方法。如果應用程式已暫停音訊輸出或遊戲重複播放,這是恢復音訊的絕佳選擇。 |
清除插頁式廣告
完成 InterstitialAd
後,請務必先呼叫 Destroy()
方法,再放置對其參照:
interstitial.Destroy();
這會通知外掛程式,該物件已不再使用,且可以收回該物件佔用的記憶體。無法呼叫此方法會導致記憶體流失。
一些最佳做法
- 請思考插頁式廣告是否適合您應用程式的廣告類型。
- 插頁式廣告最適合包含自然轉換點的應用程式。 應用程式內的工作結束時 (例如分享圖片或完成遊戲關卡),即會產生此點。由於使用者期待廣告播放中斷,因此可輕鬆放送插頁式廣告,以免干擾使用者體驗。請務必考量您應用程式工作流程中的哪個階段會顯示插頁式廣告,以及使用者的回應方式。
- 提醒您,顯示插頁式廣告時應將動作暫停。
- 插頁式廣告有多種類型,分別是文字、圖像、影片等。請務必確保應用程式顯示插頁式廣告時,也會暫停使用部分資源,以便廣告加以利用。舉例來說,當您呼叫顯示插頁式廣告時,請務必暫停應用程式產生的任何音訊輸出。您可以在
onAdClosed()
事件處理常式中繼續播放音訊,當使用者完成與廣告互動時就會叫用該處理常式。此外,建議您在廣告顯示時,暫時停止任何密集的運算工作 (例如遊戲迴圈)。確保使用者不會體驗速度緩慢或沒有回應的圖像,或影片發生延遲。 - 提供足夠的載入時間。
- 確保能在適當時間顯示插頁式廣告,同樣重要的是確保使用者不必等待廣告載入就能完成。請在呼叫
show()
前呼叫loadAd()
來預先載入廣告,以確保應用程式適時載入已完全載入的插頁式廣告。 - 不要讓應用程式廣告氾濫。
- 增加應用程式內插頁式廣告的顯示頻率也許是增加收益的好方法,但也可能破壞使用者體驗並降低點閱率。請確保使用者不會經常受到干擾,因此無法再使用您的應用程式。
其他資源
範例
- HelloWorld 範例 – 最簡單的廣告格式導入指南