1. 簡介
在本程式碼研究室中,您將在 Unity 應用程式中導入 AdMob 應用程式開啟頁面廣告。
建構項目
本程式碼研究室會逐步引導您使用 Google Mobile Ads Unity 外掛程式,在 Unity 應用程式中導入 AdMob 應用程式開啟頁面廣告。

進行本程式碼研究室時,如果你遇到任何問題 (例如程式碼錯誤、文法錯誤或用詞不明確等),請透過程式碼研究室左下角的「回報錯誤」連結回報問題。
課程內容
- 如何設定 Google Mobile Ads 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
存放區包含兩個資料夾:
starter:您將在本程式碼研究室中建構的起始程式碼。
complete:本程式碼研究室完成後的程式碼。
3. 設定 AdMob 應用程式和廣告單元
由於 Unity 是跨平台 SDK,因此您需要在 AdMob 中新增 Android 和 iOS 的應用程式和廣告單元。
Android 設定
如要為 Android 進行設定,請新增 Android 應用程式並建立廣告單元。
新增 Android 應用程式
- 在 AdMob 控制台中,按一下「應用程式」選單中的「新增應用程式」。
- 選取「Android」Android做為平台。當系統詢問「應用程式是否已在支援的應用程式商店上架?」時,請按一下「否」。
- 在應用程式名稱欄位中輸入
AdMob app open ad。 - 啟用使用者指標並非完成本程式碼研究室的必要條件。不過,我們建議您這麼做,因為這樣才能更詳細地瞭解使用者行為。按一下「新增」即可完成程序。
建立廣告單元
- 在 AdMob 控制台的「應用程式」選單中,選取「AdMob 應用程式開啟頁面廣告」應用程式 (Android)。
- 按一下「廣告單元」選單。
|
|
新的廣告單元通常要過幾小時後才會開始放送廣告。
如要立即測試廣告行為,請使用 Android 應用程式 ID/廣告單元 ID 和 iOS 應用程式 ID/廣告單元 ID 表格中列出的測試應用程式 ID 和廣告單元 ID。
在 iOS 裝置上設定
如要為 iOS 裝置設定,請新增 iOS 應用程式並建立廣告單元。
新增 iOS 應用程式
- 在 AdMob 控制台中,按一下「應用程式」選單中的「新增應用程式」。
- 將平台選為 iOS。當系統詢問「應用程式是否已在支援的應用程式商店上架?」時,請按一下「否」。
- 在應用程式名稱欄位中輸入
AdMob app open ad。 - 啟用使用者指標並非完成本程式碼研究室的必要條件。不過,我們建議您這麼做,因為這樣才能更詳細地瞭解使用者行為。按一下「新增」即可完成程序。
建立廣告單元
- 在 AdMob 控制台的「應用程式」選單中,選取「AdMob 內嵌廣告」應用程式 (iOS)。
- 按一下「廣告單元」選單。
|
|
新的廣告單元通常要過幾小時後才會開始放送廣告。
如要立即測試廣告行為,請使用下表列出的測試應用程式 ID 和廣告單元 ID。
選用:使用測試 AdMob 應用程式和廣告單元
如果您想按照程式碼研究室的操作步驟進行,但還不想自行建立新的應用程式和廣告單元,請使用下表列出的測試 AdMob 應用程式 ID 和廣告單元 ID。
Android 應用程式 ID/廣告單元 ID
項目 | 應用程式 ID/廣告單元 ID |
AdMob 營利應用程式 ID |
|
廣告單元 ID |
|
iOS 應用程式 ID/廣告單元 ID
項目 | 應用程式 ID/廣告單元 ID |
AdMob 營利應用程式 ID |
|
廣告單元 ID |
|
如要進一步瞭解測試廣告,請參閱 Android 測試廣告和 iOS 測試廣告開發人員說明文件。
4. 新增 Google Mobile Ads Unity 外掛程式
整合 Google Mobile Ads Unity 外掛程式,是顯示 AdMob 廣告並賺取收益的第一步。
下載 Mobile Ads Unity 外掛程式
Unity 開發人員可使用 Google Mobile Ads Unity 外掛程式,在 Android 和 iOS 應用程式中輕鬆放送 Google 行動廣告。外掛程式提供 C# 介面,可用於請求 Unity 專案中 C# 指令碼所使用的廣告。
請使用下方連結下載外掛程式的 Unity 套件。
開啟範例專案
- 啟動 Unity Hub。
- 在「專案」分頁中,按一下「新增」按鈕。
- 前往您在「設定開發環境」步驟中解壓縮下載程式碼的資料夾。
- 開啟「starter」資料夾。
- 專案清單中會顯示 starter 專案。按一下專案,在 Unity 編輯器中開啟。
匯入 Mobile Ads Unity 外掛程式
- 在 Unity 編輯器中,依序選取選單中的「Assets」>「Import Package」>「Custom Package」。
- 選取您在上一個步驟下載的
GoogleMobileAds-{VERSION}.unitypackage。 - 確認已選取所有檔案,然後按一下「匯入」。
設定 AdMob 應用程式 ID
- 在 Unity 編輯器中,依序選取選單中的「Assets」>「Google Mobile Ads」>「Settings」。
- 在各欄位中輸入 Android 和 iOS 的 AdMob 應用程式 ID。如果您想按照程式碼研究室的操作步驟進行,但還不想自行建立新的應用程式和廣告單元,請輸入下列測試 AdMob 應用程式 ID。

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();
}
}
}
大功告成!在裝置或模擬器上建構並執行專案。啟動應用程式後,請等待幾秒,讓廣告完全載入。
之後,當您從其他應用程式/主畫面切換回應用程式時,系統就會顯示應用程式開啟頁面廣告,如下所示。

7. 大功告成!
您已完成程式碼研究室。您可以在
complete 資料夾中找到本程式碼研究室完成後的程式碼。
