1. บทนำ
ใน Codelab นี้ คุณจะได้ติดตั้งโฆษณาเปิดแอป AdMob ในแอป Unity
สิ่งที่คุณจะสร้าง
Codelab นี้จะแนะนำขั้นตอนการติดตั้งโฆษณาเปิดแอปของ AdMob ในแอป Unity โดยใช้ปลั๊กอิน Unity สำหรับโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
หากพบปัญหา (ข้อบกพร่องของโค้ด ข้อผิดพลาดด้านไวยากรณ์ การใช้คำที่ไม่ชัดเจน และอื่นๆ) ขณะดำเนินการใน Codelab นี้ ให้รายงานปัญหาโดยใช้ลิงก์รายงานข้อผิดพลาดที่มุมล่างซ้ายของ Codelab
สิ่งที่คุณจะได้เรียนรู้
- วิธีกำหนดค่าปลั๊กอิน Unity โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
- วิธีใช้โฆษณาเปิดแอปในแอป 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
ที่เก็บมี 2 โฟลเดอร์ดังนี้
- เงื่อนไขเริ่มต้น: โค้ดเริ่มต้นที่คุณจะสร้างใน Codelab นี้
- เสร็จสมบูรณ์: โค้ดสำหรับ Codelab นี้เสร็จสมบูรณ์แล้ว
3. ตั้งค่าแอปและหน่วยโฆษณา AdMob
เนื่องจาก Unity เป็น SDK หลายแพลตฟอร์ม คุณต้องเพิ่มแอปและหน่วยโฆษณาสำหรับทั้ง Android และ iOS ใน AdMob
ตั้งค่าสำหรับ Android
หากต้องการตั้งค่าสำหรับ Android คุณต้องเพิ่มแอป Android และสร้างหน่วยโฆษณา
เพิ่มแอป Android
- ในคอนโซล AdMob ให้คลิกเพิ่มแอปจากเมนูแอป
- เลือก Android เป็นแพลตฟอร์ม เมื่อระบบถามว่าแอปนี้แสดงอยู่ใน App Store ที่รองรับไหม ให้คลิกไม่
- ป้อน
AdMob app open ad
ในช่องชื่อแอป - คุณไม่จำเป็นต้องเปิดใช้เมตริกผู้ใช้เพื่อดำเนินการ Codelab นี้ให้เสร็จสมบูรณ์ แต่เราขอแนะนําให้คุณทำเช่นนั้น เนื่องจากจะช่วยให้คุณเข้าใจพฤติกรรมของผู้ใช้ได้ละเอียดยิ่งขึ้น คลิกเพิ่มเพื่อดำเนินการให้เสร็จสมบูรณ์
สร้างหน่วยโฆษณา
- เลือกแอปโฆษณาเปิดแอปของ AdMob (Android) จากเมนูแอปในคอนโซล AdMob
- คลิกเมนูหน่วยโฆษณา
|
โดยปกติแล้วหน่วยโฆษณาใหม่จะใช้เวลา 2-3 ชั่วโมงจึงจะแสดงโฆษณาได้
หากต้องการทดสอบลักษณะการทำงานของโฆษณาทันที ให้ใช้รหัสแอปทดสอบและรหัสหน่วยโฆษณาที่ระบุไว้ในรหัสแอป Android/รหัสหน่วยโฆษณา และรหัสแอป iOS/รหัสหน่วยโฆษณาในตาราง
ตั้งค่าสําหรับ iOS
หากต้องการตั้งค่าสำหรับ iOS คุณต้องเพิ่มแอป iOS และสร้างหน่วยโฆษณา
เพิ่มแอป iOS
- ในคอนโซล AdMob ให้คลิกเพิ่มแอปจากเมนูแอป
- เลือกแพลตฟอร์มเป็น iOS เมื่อระบบถามว่าแอปนี้แสดงอยู่ใน App Store ที่รองรับไหม ให้คลิกไม่
- ป้อน
AdMob app open ad
ในช่องชื่อแอป - คุณไม่จำเป็นต้องเปิดใช้เมตริกผู้ใช้เพื่อดำเนินการ Codelab นี้ให้เสร็จสมบูรณ์ แต่เราขอแนะนําให้คุณทำเช่นนั้น เนื่องจากจะช่วยให้คุณเข้าใจพฤติกรรมของผู้ใช้ได้ละเอียดยิ่งขึ้น คลิกเพิ่มเพื่อดำเนินการให้เสร็จสมบูรณ์
สร้างหน่วยโฆษณา
- เลือกแอปโฆษณาในบรรทัดของ AdMob (iOS) จากเมนูแอปในคอนโซล AdMob
- คลิกเมนูหน่วยโฆษณา
|
โดยปกติแล้วหน่วยโฆษณาใหม่จะใช้เวลา 2-3 ชั่วโมงจึงจะแสดงโฆษณาได้
หากต้องการทดสอบลักษณะการทำงานของโฆษณาทันที ให้ใช้รหัสแอปทดสอบและรหัสหน่วยโฆษณาที่ระบุไว้ในตารางต่อไปนี้
ไม่บังคับ: ใช้แอปและหน่วยโฆษณาทดสอบของ AdMob
หากคุณต้องการใช้ Codelab แทนการสร้างแอปพลิเคชันและหน่วยโฆษณาใหม่ด้วยตนเอง คุณสามารถใช้รหัสแอป AdMob และรหัสหน่วยโฆษณาทดสอบในตารางต่อไปนี้
รหัสแอป Android/รหัสหน่วยโฆษณา
รายการ | รหัสแอป/รหัสหน่วยโฆษณา |
รหัสแอป AdMob |
|
รหัสหน่วยโฆษณา |
|
รหัสแอป iOS/รหัสหน่วยโฆษณา
รายการ | รหัสแอป/รหัสหน่วยโฆษณา |
รหัสแอป AdMob |
|
รหัสหน่วยโฆษณา |
|
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโฆษณาทดสอบ โปรดดูเอกสารสำหรับนักพัฒนาซอฟต์แวร์โฆษณาทดสอบ Android และโฆษณาทดสอบ iOS
4. เพิ่มปลั๊กอิน Google Mobile Ads Unity
การผสานรวมปลั๊กอิน Unity โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google เป็นขั้นตอนแรกในการแสดงโฆษณา AdMob และสร้างรายได้
ดาวน์โหลดปลั๊กอิน Mobile Ads Unity
ปลั๊กอิน Unity โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google ช่วยให้นักพัฒนาซอฟต์แวร์ Unity แสดงโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google ในแอป Android และ iOS ได้โดยง่าย ปลั๊กอินมีอินเทอร์เฟซ C# เพื่อขอโฆษณาที่ใช้โดยสคริปต์ C# ในโปรเจ็กต์ Unity
ใช้ลิงก์ด้านล่างเพื่อดาวน์โหลดแพ็กเกจ Unity สำหรับปลั๊กอิน
เปิดโปรเจ็กต์เริ่มต้น
- เปิด Unity Hub
- ในแท็บโปรเจ็กต์ ให้คลิกปุ่มเพิ่ม
- ไปที่โฟลเดอร์ที่คุณดึงโค้ดที่ดาวน์โหลดมาในขั้นตอนตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์
- เปิดโฟลเดอร์เริ่มต้น
- คุณจะเห็นโปรเจ็กต์เงื่อนไขเริ่มต้นในรายการโปรเจ็กต์ คลิกโปรเจ็กต์เพื่อเปิดใน Unity Editor
นำเข้าปลั๊กอิน Mobile Ads Unity
- ในตัวแก้ไข Unity ให้เลือกเนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเองจากเมนู
- เลือก
GoogleMobileAds-{VERSION}.unitypackage
ที่คุณดาวน์โหลดในขั้นตอนก่อนหน้า - ตรวจสอบว่าได้เลือกไฟล์ทั้งหมดแล้ว และคลิกนำเข้า
ตั้งรหัสแอป AdMob
- ใน Unity Editor ให้เลือกเนื้อหา > โฆษณาบนมือถือของ Google > การตั้งค่าจากเมนู
- ป้อนรหัสแอป AdMob สำหรับ Android และ iOS ในแต่ละช่อง หากคุณต้องการทำตาม Codelab แทนการสร้างแอปพลิเคชันและหน่วยโฆษณาใหม่ด้วยตนเอง โปรดป้อนรหัสแอป AdMob ทดสอบดังนี้
5. สร้างคลาสยูทิลิตี
สร้างชั้นเรียนใหม่ชื่อ AppOpenAdManager
ในโฟลเดอร์สคริปต์ คลาสนี้จัดการตัวแปรอินสแตนซ์เพื่อติดตามโฆษณาที่โหลดและรหัสหน่วยโฆษณาสำหรับแต่ละแพลตฟอร์ม
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()
แบบคงที่ วิธีโหลดต้องมีรหัสหน่วยโฆษณา โหมด 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);
}
}
พิจารณาการหมดอายุของโฆษณา
การอ้างอิงโฆษณาในการเปิดแอปจะหมดเวลาหลังจากผ่านไป 4 ชั่วโมง โฆษณาที่แสดงนานกว่า 4 ชั่วโมงหลังจากเวลาที่ขอจะใช้ไม่ได้อีกต่อไปและอาจไม่สร้างรายได้
โปรดแก้ไขพร็อพเพอร์ตี้ 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. อัปเดตฉากเพื่อโหลด/แสดงโฆษณา
อัปเดตเมธอด Start()
ในคลาส MainScene
เพื่อโหลดโฆษณาเปิดแอปเมื่อฉากเริ่มต้นขึ้น
หากต้องการรับการแจ้งเตือนเกี่ยวกับเหตุการณ์ที่ทำงานอยู่เบื้องหน้าของแอป เราขอแนะนำให้ฟัง Singleton ของ 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();
}
}
}
เท่านี้ก็เรียบร้อย สร้างและเรียกใช้โปรเจ็กต์ในอุปกรณ์หรือโปรแกรมจำลอง เมื่อแอปเปิดขึ้นแล้ว ให้รอ 2-3 วินาทีเพื่อให้โฆษณาโหลดได้อย่างสมบูรณ์
หลังจากนั้น เมื่อคุณสลับกลับมาที่แอป/หน้าจอหลักอื่นๆ ไปยังแอป โฆษณาเปิดแอปจะแสดงตามด้านล่าง
7. เสร็จเรียบร้อย
คุณทำ Codelab เสร็จสมบูรณ์แล้ว คุณดูโค้ดที่เสร็จสมบูรณ์ของ Codelab นี้ได้ในโฟลเดอร์ complete