在 Unity 應用程式中加入 AdMob 應用程式開啟頁面廣告

在 Unity 應用程式中加入 AdMob 應用程式開啟頁面廣告

程式碼研究室簡介

subject上次更新時間:7月 15, 2022
account_circle作者:Taeho Kim

1. 簡介

在本程式碼研究室中,您將在 Unity 應用程式中導入 AdMob 應用程式開啟頁面廣告。

建構項目

本程式碼研究室會引導您使用 Google 行動廣告 Unity 外掛程式,在 Unity 應用程式中導入 AdMob 應用程式開啟頁面廣告。

6338548c3f73e7cf.gif

在執行本程式碼研究室的過程中,如果您遇到任何問題 (例如程式碼錯誤、文法錯誤、用詞不明確等),請使用程式碼研究室左下角的「回報錯誤」連結來回報問題。

課程內容

  • 如何設定 Google 行動廣告 Unity 外掛程式
  • 如何在 Unity 應用程式中導入應用程式開啟頁面廣告

軟硬體需求

  • Unity 2018.4 以上版本
  • Xcode 12 以上版本和 CocoaPods (部署至 iOS)

您對 AdMob 使用體驗的評價如何?

2. 設定開發環境

下載程式碼

下載 ZIP 檔案後,請解壓縮其中的內容。您會使用一個名為「admob-appopen-unity-main」的資料夾。

或者,您也可以透過指令列複製 GitHub 存放區:

$ git clone https://github.com/googlecodelabs/admob-appopen-unity

存放區包含兩個資料夾:

  • android_studio_folder.png 範例程式碼:您將在本程式碼研究室中建構的程式碼。
  • android_studio_folder.png 完成:在本程式碼研究室中完成的程式碼。

3. 設定 AdMob 應用程式和廣告單元

由於 Unity 是多平台 SDK,因此您需要在 AdMob 中新增 Android 和 iOS 的應用程式和廣告單元。

設定 Android 裝置

如要設定 Android,您必須新增 Android 應用程式並建立廣告單元。

新增 Android 應用程式

  1. AdMob 控制台中,按一下「應用程式」選單中的「新增應用程式」
  2. 選取「Android」做為平台。系統詢問「該應用程式是否在支援的應用程式商店上架?」時,請按一下「否」
  3. 在應用程式名稱欄位中輸入 AdMob app open ad
  4. 完成本程式碼研究室不需要啟用使用者指標。不過我們建議您這麼做,因為可以幫助您深入瞭解使用者行為。按一下「新增」完成程序。

建立廣告單元

  1. AdMob 管理中心的「應用程式」選單中,選取「AdMob 應用程式開啟頁面廣告」應用程式 (Android)。
  2. 按一下「廣告單元」選單。

  1. 按一下「新增廣告單元」
  2. 格式請選取「應用程式開啟頁面廣告」
  3. 在「廣告單元名稱」欄位中輸入 android-appopen
  4. 按一下「建立廣告單元」完成設定程序。

新的廣告單元通常需要幾個小時才能放送廣告。

如果您想要立即測試廣告行為,請使用 Android 應用程式 ID/廣告單元 ID 和 iOS 應用程式 ID/廣告單元 ID 表格中所列的測試應用程式 ID 和廣告單元 ID。

設定 iOS 裝置

如要設定 iOS,您需要新增 iOS 應用程式並建立廣告單元。

新增 iOS 應用程式

  1. AdMob 控制台中,按一下「應用程式」選單中的「新增應用程式」
  2. 選取「iOS」iOS做為平台。系統詢問「該應用程式是否在支援的應用程式商店上架?」時,請按一下「否」
  3. 在應用程式名稱欄位中輸入 AdMob app open ad
  4. 完成本程式碼研究室不需要啟用使用者指標。不過我們建議您這麼做,因為可以幫助您深入瞭解使用者行為。按一下「新增」完成程序。

建立廣告單元

  1. AdMob 管理中心的「應用程式」選單中,選取「AdMob 內嵌廣告」應用程式 (iOS)。
  2. 按一下「廣告單元」選單。

  1. 按一下「新增廣告單元」
  2. 格式請選取「應用程式開啟頁面廣告」
  3. 在「廣告單元名稱」欄位中輸入 ios-appopen
  4. 按一下「建立廣告單元」完成設定程序。

新的廣告單元通常需要幾個小時才能放送廣告。

如果您想立即測試廣告行為,請使用下表所列的測試應用程式 ID 和廣告單元 ID。

選用:使用測試 AdMob 應用程式和廣告單元

如想按照程式碼研究室的說明操作,而非自行建立新的應用程式和廣告單元,您可以使用下表所列的測試 AdMob 應用程式 ID 和廣告單元 ID。

Android 應用程式 ID/廣告單元 ID

項目

應用程式 ID/廣告單元 ID

AdMob 應用程式 ID

ca-app-pub-3940256099942544~3347511713

廣告單元 ID

ca-app-pub-3940256099942544/3419835294

iOS 應用程式 ID/廣告單元 ID

項目

應用程式 ID/廣告單元 ID

AdMob 應用程式 ID

ca-app-pub-3940256099942544~1458002511

廣告單元 ID

ca-app-pub-3940256099942544/5662855259

如要進一步瞭解測試廣告,請參閱 Android 測試廣告iOS 測試廣告開發人員說明文件。

4. 新增 Google 行動廣告 Unity 外掛程式

整合 Google 行動廣告 Unity 外掛程式是放送 AdMob 廣告並賺取收益的第一步。

下載行動廣告 Unity 外掛程式

Google 行動廣告 Unity 外掛程式可讓 Unity 開發人員輕鬆在 Android 和 iOS 應用程式上放送 Google 行動廣告。這個外掛程式會提供 C# 介面,讓您要求 Unity 專案中的 C# 指令碼使用的廣告。

請使用下方連結下載外掛程式的 Unity 套件。

開啟範例專案

  1. 啟動 Unity Hub。
  2. 在「Projects」分頁中,點選「ADD」按鈕。
  3. 前往「設定開發環境」步驟中,前往解壓縮程式碼所下載的資料夾。
  4. 開啟 starter 資料夾。
  5. 您將在專案清單中看到 starter 專案。按一下專案,即可在 Unity 編輯器中開啟。

匯入行動廣告 Unity 外掛程式

  1. 在 Unity 編輯器中,依序選取「Assets」(資產) >「匯入套件 >上的自訂套件
  2. 選取您在上一個步驟中下載的 GoogleMobileAds-{VERSION}.unitypackage
  3. 確認已選取所有檔案,然後按一下「匯入」

設定 AdMob 應用程式 ID

  1. 在 Unity 編輯器中,依序選取「Assets」(資產) >「Google 行動廣告 >選單中的「設定」
  2. 請在每個欄位中輸入您的 Android 和 iOS AdMob 應用程式 ID。如果您想按照程式碼研究室的說明操作,而非自行建立新的應用程式和廣告單元,請按照下列方式輸入測試用的 AdMob 應用程式 ID。

8890521e199b1090.png

5. 建立公用程式類別

在「Scripts」資料夾下建立名為 AppOpenAdManager 的新類別。此類別會管理執行個體變數,以追蹤已載入的廣告和每個平台的廣告單元 ID。

AppOpenAdManager.cs

using System;
using GoogleMobileAds.Api;
using UnityEngine;

public class AppOpenAdManager
{
#if UNITY_ANDROID
   
// Test ad unit ID: ca-app-pub-3940256099942544/3419835294
   
private const string AD_UNIT_ID = "<YOUR_ANDROID_APPOPEN_AD_UNIT_ID>";
#elif UNITY_IOS
   
// Test ad unit ID: ca-app-pub-3940256099942544/5662855259
   
private const string AD_UNIT_ID = "<YOUR_IOS_APPOPEN_AD_UNIT_ID>";
#else
   
private const string AD_UNIT_ID = "unexpected_platform";
#endif

   
private static AppOpenAdManager instance;

   
private AppOpenAd ad;

   
private bool isShowingAd = false;

   
public static AppOpenAdManager Instance
   
{
       
get
       
{
           
if (instance == null)
           
{
                instance
= new AppOpenAdManager();
           
}

           
return instance;
       
}
   
}

   
private bool IsAdAvailable
   
{
       
get
       
{
           
return ad != null;
       
}
   
}

   
public void LoadAd()
   
{
       
// TODO: Load an app open ad.
   
}
}

載入廣告

您可以使用靜態 AppOpenAd.LoadAd() 方法載入廣告。載入方法需要廣告單元 ID、ScreenOrientation 模式、AdRequest 物件以及廣告載入成功或失敗時呼叫的完成處理常式。

系統會在完成處理常式中,以參數的形式提供載入的 AppOpenAd 物件。請採用下列實作 LoadAd() 方法。

AppOpenAdManager.cs

public class AppOpenAdManager
{
   
...

   
public void LoadAd()
   
{
       
AdRequest request = new AdRequest.Builder().Build();

       
// Load an app open ad for portrait orientation
       
AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
       
{
           
if (error != null)
           
{
               
// Handle the error.
               
Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
               
return;
           
}

           
// App open ad is loaded.
            ad
= appOpenAd;
       
}));
   
}
}

放送廣告

顯示廣告前,請先註冊每個事件處理常式,以監聽每個廣告事件。

AppOpenAdManager.cs

public class AppOpenAdManager
{
   
...

   
public void ShowAdIfAvailable()
   
{
       
if (!IsAdAvailable || isShowingAd)
       
{
           
return;
       
}

        ad
.OnAdDidDismissFullScreenContent += HandleAdDidDismissFullScreenContent;
        ad
.OnAdFailedToPresentFullScreenContent += HandleAdFailedToPresentFullScreenContent;
        ad
.OnAdDidPresentFullScreenContent += HandleAdDidPresentFullScreenContent;
        ad
.OnAdDidRecordImpression += HandleAdDidRecordImpression;
        ad
.OnPaidEvent += HandlePaidEvent;

        ad
.Show();
   
}

   
private void HandleAdDidDismissFullScreenContent(object sender, EventArgs args)
   
{
       
Debug.Log("Closed app open ad");
       
// Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad
= null;
        isShowingAd
= false;
       
LoadAd();
   
}

   
private void HandleAdFailedToPresentFullScreenContent(object sender, AdErrorEventArgs args)
   
{
       
Debug.LogFormat("Failed to present the ad (reason: {0})", args.AdError.GetMessage());
       
// Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad
= null;
       
LoadAd();
   
}

   
private void HandleAdDidPresentFullScreenContent(object sender, EventArgs args)
   
{
       
Debug.Log("Displayed app open ad");
        isShowingAd
= true;
   
}

   
private void HandleAdDidRecordImpression(object sender, EventArgs args)
   
{
       
Debug.Log("Recorded ad impression");
   
}

   
private void HandlePaidEvent(object sender, AdValueEventArgs args)
   
{
       
Debug.LogFormat("Received paid event. (currency: {0}, value: {1}",
                args
.AdValue.CurrencyCode, args.AdValue.Value);
   
}
}

考量廣告效期

應用程式開啟頁面廣告的廣告參照會在四小時後逾時。要求時間超過四小時後才顯示的廣告將會失效,可能無法賺取收益。

為確保您不顯示過期廣告,請將 IsAdAvailable 屬性修改為 AppOpenAdManager,檢查廣告載入後已過多久。接著,用這個方法檢查廣告是否仍然有效。

AppOpenAdManager.cs

public class AppOpenAdManager
{
   
...

   
// TODO: Add loadTime field
   
private DateTime loadTime;

   
private bool IsAdAvailable
   
{
       
get
       
{
           
// TODO: Consider ad expiration
           
return ad != null && (System.DateTime.UtcNow - loadTime).TotalHours < 4;
       
}
   
}

   
public void LoadAd()
   
{
       
if (IsAdAvailable)
       
{
           
return;
       
}

       
AdRequest request = new AdRequest.Builder().Build();
       
AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
       
{
           
if (error != null)
           
{
               
Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
               
return;
           
}

            ad
= appOpenAd;
           
Debug.Log("App open ad loaded");

           
// TODO: Keep track of time when the ad is loaded.
            loadTime
= DateTime.UtcNow;
       
}));
   
}
}

6. 更新廣告載入/顯示廣告的場景

更新 MainScene 類別中的 Start() 方法,以便在場景開始時載入應用程式開啟頁面廣告。

如要在應用程式前景事件發生時收到通知,建議您監聽 AppStateEventNotifier 單例。導入 AppStateEventNotifier.AppStateChanged 委派項目後,應用程式會收到應用程式啟動和前景事件快訊,而且可以顯示廣告。

MainScene.cs

using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine;

public class MainScene : MonoBehaviour
{
   
public void Start()
   
{
       
// TODO: Request an app open ad.
       
MobileAds.Initialize((initStatus) =>
       
{
           
AppOpenAdManager.Instance.LoadAd();
           
AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
       
});
   
}

   
public void OnAppStateChanged(AppState state)
   
{
       
if (state == AppState.Foreground)
       
{
           
// TODO: Show an app open ad if available.
           
AppOpenAdManager.Instance.ShowAdIfAvailable();
       
}
   
}
}

大功告成!在裝置或模擬器上建構並執行專案。應用程式啟動後,請稍待幾秒鐘,讓系統完全載入廣告。

之後,當您從其他應用程式/主畫面切換回應用程式時,應用程式開啟頁面廣告將如下所示。

6338548c3f73e7cf.gif

7. 大功告成!

您已完成程式碼研究室。您可以在 android_studio_folder.png「complete」資料夾中找到本程式碼研究室完成後的程式碼。