插頁式廣告

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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

本指南說明如何將插頁式廣告整合至 Unity 應用程式。

必要條件

建立插頁式廣告

顯示插頁式廣告的第一步是在連結 GameObject 的指令碼中建立 InterstitialAd 物件。

如要使用 Unity 編輯器輕鬆整合廣告,不妨試試新版廣告刊登位置 Beta 版

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 - 用來載入廣告的 AdMob 廣告單元 ID。InterstitialAd

請注意,視平台而定,不同廣告單元的使用方式會有所不同。您需要用 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() 事件處理常式中播放音訊,當使用者完成與廣告互動時,系統便會叫用這些處理常式。此外,請考慮在廣告顯示時暫時停用任何高強度運算工作 (例如遊戲迴圈)。如此可確保使用者不會有速度緩慢或無回應的影像或流暢的影片。
提供適當的載入時間。
確保在適當的時機顯示插頁式廣告也同樣相當重要,因此請務必確保使用者不必等待廣告載入。先呼叫 loadAd() 以先載入廣告,然後再呼叫 show(),可確保應用程式準備好顯示完整載入的插頁式廣告時。
不要讓應用程式廣告氾濫。
雖然提高應用程式內插頁式廣告的頻率似乎是提高收益的好方法,但也可能降低使用者體驗及降低點閱率。請確認使用者不會經常受到干擾,以免他們無法再使用您的應用程式。

其他資源

範例

成功案例