插頁式廣告 (舊版)

插頁式廣告是全螢幕廣告,會覆蓋主應用程式的介面。這類廣告通常會顯示在應用程式流程中的自然轉換點,例如遊戲關卡之間的暫停期間。應用程式顯示插頁式廣告時,使用者可以選擇輕觸廣告前往到達網頁,或是關閉廣告返回應用程式。個案研究

本指南說明如何將插頁式廣告整合至 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 的建構函式參數如下:

  • adUnitIdInterstitialAd 應從中載入廣告的 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 事件包含特殊事件引數。它會傳遞具有說明錯誤的 MessageHandleAdFailedToLoadEventArgs 例項:

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() 來預先載入廣告,以確保應用程式適時載入已完全載入的插頁式廣告。
不要讓應用程式廣告氾濫。
增加應用程式內插頁式廣告的顯示頻率也許是增加收益的好方法,但也可能破壞使用者體驗並降低點閱率。請確保使用者不會經常受到干擾,因此無法再使用您的應用程式。

其他資源

範例

成功案例