插頁式廣告會全螢幕顯示,覆蓋整個應用程式的介面。這類廣告通常會在應用程式流程中的自然轉換點顯示,例如遊戲關卡之間的暫停時間。當應用程式顯示插頁式廣告時,使用者可以選擇輕觸廣告前往到達網頁,或是關閉廣告返回應用程式。案例研究。
本指南說明如何將插頁廣告整合至 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,您可以使用該 ID 要求廣告。系統已特別將其設定為針對每項要求傳回測試廣告,而非正式廣告,因此可安全使用。
不過,在 AdMob 使用者介面中註冊應用程式,並建立用於應用程式的廣告單元 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
事件包含特殊事件引數。它會傳遞 HandleAdFailedToLoadEventArgs
例項,並附上描述錯誤的 Message
:
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 範例:所有廣告格式的最簡單實作