1. 簡介
在本程式碼研究室中,您將在 Unity 應用程式中導入 AdMob 應用程式開啟頁面廣告。
建構項目
本程式碼研究室會引導您使用 Google 行動廣告 Unity 外掛程式,在 Unity 應用程式中導入 AdMob 應用程式開啟頁面廣告。
在執行本程式碼研究室的過程中,如果您遇到任何問題 (例如程式碼錯誤、文法錯誤、用詞不明確等),請使用程式碼研究室左下角的「回報錯誤」連結來回報問題。
課程內容
- 如何設定 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
存放區包含兩個資料夾:
- 範例程式碼:您將在本程式碼研究室中建構的程式碼。
- 完成:在本程式碼研究室中完成的程式碼。
3. 設定 AdMob 應用程式和廣告單元
由於 Unity 是多平台 SDK,因此您需要在 AdMob 中新增 Android 和 iOS 的應用程式和廣告單元。
設定 Android 裝置
如要設定 Android,您必須新增 Android 應用程式並建立廣告單元。
新增 Android 應用程式
- 在 AdMob 控制台中,按一下「應用程式」選單中的「新增應用程式」。
- 選取「Android」做為平台。系統詢問「該應用程式是否在支援的應用程式商店上架?」時,請按一下「否」。
- 在應用程式名稱欄位中輸入
AdMob app open ad
。 - 完成本程式碼研究室不需要啟用使用者指標。不過我們建議您這麼做,因為可以幫助您深入瞭解使用者行為。按一下「新增」完成程序。
建立廣告單元
- 在 AdMob 管理中心的「應用程式」選單中,選取「AdMob 應用程式開啟頁面廣告」應用程式 (Android)。
- 按一下「廣告單元」選單。
|
新的廣告單元通常需要幾個小時才能放送廣告。
如果您想要立即測試廣告行為,請使用 Android 應用程式 ID/廣告單元 ID 和 iOS 應用程式 ID/廣告單元 ID 表格中所列的測試應用程式 ID 和廣告單元 ID。
設定 iOS 裝置
如要設定 iOS,您需要新增 iOS 應用程式並建立廣告單元。
新增 iOS 應用程式
- 在 AdMob 控制台中,按一下「應用程式」選單中的「新增應用程式」。
- 選取「iOS」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 行動廣告 Unity 外掛程式
整合 Google 行動廣告 Unity 外掛程式是放送 AdMob 廣告並賺取收益的第一步。
下載行動廣告 Unity 外掛程式
Google 行動廣告 Unity 外掛程式可讓 Unity 開發人員輕鬆在 Android 和 iOS 應用程式上放送 Google 行動廣告。這個外掛程式會提供 C# 介面,讓您要求 Unity 專案中的 C# 指令碼使用的廣告。
請使用下方連結下載外掛程式的 Unity 套件。
開啟範例專案
- 啟動 Unity Hub。
- 在「Projects」分頁中,點選「ADD」按鈕。
- 前往「設定開發環境」步驟中,前往解壓縮程式碼所下載的資料夾。
- 開啟 starter 資料夾。
- 您將在專案清單中看到 starter 專案。按一下專案,即可在 Unity 編輯器中開啟。
匯入行動廣告 Unity 外掛程式
- 在 Unity 編輯器中,依序選取「Assets」(資產) >「匯入套件 >上的自訂套件。
- 選取您在上一個步驟中下載的
GoogleMobileAds-{VERSION}.unitypackage
。 - 確認已選取所有檔案,然後按一下「匯入」。
設定 AdMob 應用程式 ID
- 在 Unity 編輯器中,依序選取「Assets」(資產) >「Google 行動廣告 >選單中的「設定」。
- 請在每個欄位中輸入您的 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」資料夾中找到本程式碼研究室完成後的程式碼。