插頁式廣告 (舊版)

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

本指南說明如何將插頁式廣告整合至 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 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 事件包含特殊事件引數。它會傳遞一個 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() 即可事先載入廣告,可確保應用程式在顯示時已有完全載入的插頁式廣告。
不要讓應用程式廣告氾濫。
增加在應用程式中顯示插頁式廣告的頻率也許是提升收益的好方法,但也有可能導致使用者體驗和點閱率下降。請確保使用者不會經常中斷,以免他們無法再使用您的應用程式。

其他資源

範例

成功案例