โฆษณาเปิดแอปเป็นรูปแบบโฆษณาพิเศษที่มีไว้สำหรับผู้เผยแพร่โฆษณาที่ต้องการสร้างรายได้ หน้าจอโหลดแอป โฆษณาเปิดแอปสามารถปิดได้ทุกเมื่อ และออกแบบมาเพื่อ แสดงเมื่อผู้ใช้นำแอปของคุณไปไว้เบื้องหน้า
โฆษณาเปิดแอปจะแสดงพื้นที่การสร้างแบรนด์ขนาดเล็กโดยอัตโนมัติเพื่อให้ผู้ใช้ทราบว่าตนอยู่ในพื้นที่ แอปของคุณ ต่อไปนี้คือตัวอย่างลักษณะของโฆษณาเปิดแอป
ข้อกำหนดเบื้องต้น
- ทำตามคู่มือเริ่มต้นใช้งานจนจบ
- ปลั๊กอิน Unity 7.1.0 ขึ้นไป
ทดสอบด้วยโฆษณาทดสอบเสมอ
โค้ดตัวอย่างต่อไปนี้มีรหัสหน่วยโฆษณาที่คุณใช้เพื่อขอได้ โฆษณาทดสอบ โดยได้รับการกำหนดค่าเป็นพิเศษให้ส่งคืนโฆษณาทดสอบ โฆษณาในเวอร์ชันที่ใช้งานจริงสำหรับทุกคำขอ ทำให้ใช้งานได้อย่างปลอดภัย
อย่างไรก็ตาม หลังจากที่คุณลงทะเบียนแอปใน เว็บอินเทอร์เฟซของ AdMob และสร้างหน่วยโฆษณาของคุณเอง รหัสสำหรับใช้ในแอป ให้กำหนดค่าอุปกรณ์เป็นการทดสอบให้ชัดเจน อุปกรณ์ในระหว่าง ที่กำลังพัฒนา
Android
ca-app-pub-3940256099942544/9257395921
iOS
ca-app-pub-3940256099942544/5575463023
การใช้งาน
ขั้นตอนหลักๆ ในการผสานรวมโฆษณาเปิดแอปมีดังนี้
- สร้างคลาสยูทิลิตี
- โหลดโฆษณาเปิดแอป
- ฟังเหตุการณ์โฆษณาเปิดแอป
- พิจารณาการหมดอายุของโฆษณา
- ฟังเหตุการณ์สถานะของแอป
- แสดงโฆษณาเปิดแอป
- ล้างโฆษณาเปิดแอป
- โหลดโฆษณาเปิดแอปรายการถัดไปล่วงหน้า
สร้างคลาสยูทิลิตี
สร้างคลาสใหม่ชื่อ AppOpenAdController
เพื่อโหลดโฆษณา ชั้นเรียนนี้
ควบคุมตัวแปรอินสแตนซ์เพื่อติดตามโฆษณาที่โหลดและรหัสหน่วยโฆษณา
สำหรับแต่ละแพลตฟอร์ม
using System;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
/// <summary>
/// Demonstrates how to use the Google Mobile Ads app open ad format.
/// </summary>
[AddComponentMenu("GoogleMobileAds/Samples/AppOpenAdController")]
public class AppOpenAdController : MonoBehaviour
{
// These ad units are configured to always serve test ads.
#if UNITY_ANDROID
private string _adUnitId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IPHONE
string _adUnitId = "ca-app-pub-3940256099942544/5575463023";
#else
private string _adUnitId = "unused";
#endif
public bool IsAdAvailable
{
get
{
return _appOpenAd != null;
}
}
public void Start()
{
// Initialize the Google Mobile Ads SDK.
MobileAds.Initialize((InitializationStatus initStatus) =>
{
// This callback is called once the MobileAds SDK is initialized.
});
}
/// <summary>
/// Loads the app open ad.
/// </summary>
public void LoadAppOpenAd()
{
}
/// <summary>
/// Shows the app open ad.
/// </summary>
public void ShowAppOpenAd()
{
}
}
โหลดโฆษณาเปิดแอป
การโหลดโฆษณาเปิดแอปจะใช้เมธอด Load()
แบบคงที่ใน
ชั้นเรียนAppOpenAd
วิธีโหลดต้องมีรหัสหน่วยโฆษณา
AdRequest
และเครื่องจัดการเสร็จสมบูรณ์
เมื่อโหลดโฆษณาสำเร็จหรือไม่สำเร็จ ออบเจ็กต์ AppOpenAd
ที่โหลด
ที่ระบุเป็นพารามิเตอร์ในเครื่องจัดการเสร็จสมบูรณ์ ตัวอย่างด้านล่างแสดงวิธีการ
เพื่อโหลด AppOpenAd
// These ad units are configured to always serve test ads.
#if UNITY_ANDROID
private string _adUnitId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IPHONE
string _adUnitId = "ca-app-pub-3940256099942544/5575463023";
#else
private string _adUnitId = "unused";
#endif
private AppOpenAd appOpenAd;
/// <summary>
/// Loads the app open ad.
/// </summary>
public void LoadAppOpenAd()
{
// Clean up the old ad before loading a new one.
if (appOpenAd != null)
{
appOpenAd.Destroy();
appOpenAd = null;
}
Debug.Log("Loading the app open ad.");
// Create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
AppOpenAd.Load(_adUnitId, adRequest,
(AppOpenAd ad, LoadAdError error) =>
{
// if error is not null, the load request failed.
if (error != null || ad == null)
{
Debug.LogError("app open ad failed to load an ad " +
"with error : " + error);
return;
}
Debug.Log("App open ad loaded with response : "
+ ad.GetResponseInfo());
appOpenAd = ad;
RegisterEventHandlers(ad);
});
}
ฟังเหตุการณ์โฆษณาเปิดแอป
หากต้องการปรับแต่งลักษณะการทำงานของโฆษณาเพิ่มเติม คุณสามารถดึงดูด เหตุการณ์ในวงจรของโฆษณา เช่น การเปิด การปิด และอื่นๆ ฟัง กิจกรรมเหล่านี้ได้โดยลงทะเบียนผู้รับมอบสิทธิ์ตามที่แสดงด้านล่าง
private void RegisterEventHandlers(AppOpenAd ad)
{
// Raised when the ad is estimated to have earned money.
ad.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("App open ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// Raised when an impression is recorded for an ad.
ad.OnAdImpressionRecorded += () =>
{
Debug.Log("App open ad recorded an impression.");
};
// Raised when a click is recorded for an ad.
ad.OnAdClicked += () =>
{
Debug.Log("App open ad was clicked.");
};
// Raised when an ad opened full screen content.
ad.OnAdFullScreenContentOpened += () =>
{
Debug.Log("App open ad full screen content opened.");
};
// Raised when the ad closed full screen content.
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("App open ad full screen content closed.");
};
// Raised when the ad failed to open full screen content.
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("App open ad failed to open full screen content " +
"with error : " + error);
};
}
พิจารณาการหมดอายุของโฆษณา
เพิ่มเมธอดลงใน
AppOpenAdController
ที่ตรวจสอบระยะเวลานับตั้งแต่คุณโหลดโฆษณา
จากนั้น ใช้วิธีการดังกล่าวเพื่อตรวจสอบว่าโฆษณายังคงใช้งานได้หรือไม่
โฆษณาเปิดแอปมีระยะหมดเวลา 4 ชั่วโมง แคชเวลาโหลดใน _expireTime
ตัวแปร
// send the request to load the ad.
AppOpenAd.Load(_adUnitId, adRequest,
(AppOpenAd ad, LoadAdError error) =>
{
// If the operation failed, an error is returned.
if (error != null || ad == null)
{
Debug.LogError("App open ad failed to load an ad with error : " +
error);
return;
}
// If the operation completed successfully, no error is returned.
Debug.Log("App open ad loaded with response : " + ad.GetResponseInfo());
// App open ads can be preloaded for up to 4 hours.
_expireTime = DateTime.Now + TimeSpan.FromHours(4);
_appOpenAd = ad;
});
อัปเดตพร็อพเพอร์ตี้ IsAdAvailable
เพื่อตรวจสอบ _expireTime
เพื่อยืนยันว่าโหลดแล้ว
โฆษณายังคงถูกต้อง
public bool IsAdAvailable
{
get
{
return _appOpenAd != null
&& _appOpenAd.IsLoaded()
&& DateTime.Now < _expireTime;
}
}
ฟังเหตุการณ์สถานะของแอป
ใช้ AppStateEventNotifier
เพื่อฟังส่วนหน้าของแอปพลิเคชันและ
กิจกรรมเบื้องหลัง ชั้นเรียนนี้จะชักชวนเหตุการณ์ AppStateChanged
เมื่อใดก็ตามที่
เบื้องหน้าหรือพื้นหลังของแอปพลิเคชัน
private void Awake()
{
// Use the AppStateEventNotifier to listen to application open/close events.
// This is used to launch the loaded ad when we open the app.
AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
}
private void OnDestroy()
{
// Always unlisten to events when complete.
AppStateEventNotifier.AppStateChanged -= OnAppStateChanged;
}
เมื่อเราจัดการกับสถานะAppState.Foreground
และIsAdAvailable
คือ true
เราเรียกใช้ ShowAppOpenAd()
เพื่อแสดงโฆษณา
private void OnAppStateChanged(AppState state)
{
Debug.Log("App State changed to : "+ state);
// if the app is Foregrounded and the ad is available, show it.
if (state == AppState.Foreground)
{
if (IsAdAvailable)
{
ShowAppOpenAd();
}
}
}
แสดงโฆษณาเปิดแอป
หากต้องการแสดงโฆษณาเปิดแอปที่โหลด ให้เรียกใช้เมธอด Show()
ใน
AppOpenAd
โฆษณาจะแสดงได้ 1 ครั้งต่อการโหลดเท่านั้น ใช้ CanShowAd()
ในการยืนยันว่าโฆษณาพร้อมที่จะแสดงหรือไม่
/// <summary>
/// Shows the app open ad.
/// </summary>
public void ShowAppOpenAd()
{
if (appOpenAd != null && appOpenAd.CanShowAd())
{
Debug.Log("Showing app open ad.");
appOpenAd.Show();
}
else
{
Debug.LogError("App open ad is not ready yet.");
}
}
ล้างโฆษณาเปิดแอป
เมื่อใช้ AppOpenAd
เสร็จแล้ว อย่าลืมโทรหา Destroy()
ก่อนที่จะทิ้งการอ้างอิงถึงข้อความนั้นๆ
appOpenAd.Destroy();
การดำเนินการนี้จะแจ้งปลั๊กอินว่าไม่ได้ใช้ออบเจ็กต์แล้ว รวมถึงหน่วยความจำของออบเจ็กต์ สามารถอ้างสิทธิ์คืนได้ หากไม่เรียกใช้เมธอดนี้ หน่วยความจำจะรั่วไหล
โหลดโฆษณาเปิดแอปรายการถัดไปล่วงหน้า
AppOpenAd
เป็นออบเจ็กต์แบบใช้ครั้งเดียว ซึ่งหมายถึงเมื่อโฆษณาเปิดแอปแสดงขึ้น
ออบเจ็กต์นั้นไม่สามารถใช้ได้อีก หากต้องการขอโฆษณาเปิดแอปอื่น
คุณจะต้องสร้างออบเจ็กต์ AppOpenAd
ใหม่
ในการเตรียมโฆษณาเปิดแอปเพื่อโอกาสในการแสดงผลครั้งถัดไป ให้โหลด
โฆษณาเปิดแอปเมื่อOnAdFullScreenContentClosed
หรือ
เกิดเหตุการณ์โฆษณา OnAdFullScreenContentFailed
เหตุการณ์
private void RegisterReloadHandler(AppOpenAd ad)
{
...
// Raised when the ad closed full screen content.
ad.OnAdFullScreenContentClosed += ()
{
Debug.Log("App open ad full screen content closed.");
// Reload the ad so that we can show another as soon as possible.
LoadAppOpenAd();
};
// Raised when the ad failed to open full screen content.
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("App open ad failed to open full screen content " +
"with error : " + error);
// Reload the ad so that we can show another as soon as possible.
LoadAppOpenAd();
};
}
Cold Start และหน้าจอกำลังโหลด
เอกสารประกอบนี้มีสมมติฐานว่าคุณจะแสดงโฆษณาเปิดแอปเฉพาะเมื่อผู้ใช้ เบื้องหน้าแอปของคุณเมื่อถูกระงับในหน่วยความจำ "Cold Start" เกิดขึ้นเมื่อ แอปของคุณเปิดขึ้นแต่ไม่ได้ถูกระงับในหน่วยความจำก่อนหน้านี้
ตัวอย่างของ Cold Start ได้แก่ เมื่อผู้ใช้เปิดแอปของคุณเป็นครั้งแรก เมื่อใช้ Cold Start คุณจะไม่มีโฆษณาเปิดแอปที่โหลดก่อนหน้านี้ซึ่งพร้อม แสดงได้ทันที ระยะเวลาระหว่างที่คุณขอโฆษณาและรับโฆษณา อาจสร้างสถานการณ์ที่ผู้ใช้ สามารถใช้แอปของคุณเป็นเวลาสั้นๆ โดยโฆษณาที่อยู่นอกบริบท ซึ่งควรหลีกเลี่ยงเนื่องจาก ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี
วิธีที่ควรใช้โฆษณาเปิดแอปเมื่อ Cold Start คือการใช้หน้าจอการโหลด เพื่อโหลดเนื้อหาเกมหรือแอป และแสดงเฉพาะโฆษณาจากการโหลดเท่านั้น บนหน้าจอ หากแอปโหลดเสร็จแล้วและส่งผู้ใช้ไปยังหน้าหลัก ในเนื้อหาของแอป คุณต้องแสดงโฆษณานั้นๆ
แนวทางปฏิบัติแนะนำ
โฆษณาเปิดแอปช่วยให้คุณสร้างรายได้จากหน้าจอโหลดของแอปเมื่อเปิดแอปเป็นครั้งแรก เปิดตัวและระหว่างการเปลี่ยนแอป แต่สิ่งสำคัญคือ เพื่อให้ผู้ใช้สนุกกับการใช้แอปของคุณ
- แสดงโฆษณาเปิดแอปแรกของคุณหลังจากที่ผู้ใช้ใช้แอปของคุณ 2-3 ครั้ง
- แสดงโฆษณาเปิดแอปในช่วงเวลาที่ผู้ใช้กำลังรอ แอปของคุณไปโหลดขึ้นมา
- หากคุณมีหน้าจอการโหลดใต้โฆษณาเปิดแอปและหน้าจอการโหลด
โหลดเสร็จสมบูรณ์ก่อนจะปิดโฆษณา ปิดหน้าจอการโหลดใน
เครื่องจัดการเหตุการณ์
OnAdDidDismissFullScreenContent
- ในแพลตฟอร์ม iOS
AppStateEventNotifier
จะสร้างอินสแตนซ์AppStateEventClient GameObject
ต้องใช้GameObject
นี้สำหรับกิจกรรม เผาผลาญได้ ดังนั้นอย่าทำลายมัน เหตุการณ์จะหยุดทํางานหากGameObject
คือ ถูกทำลายแล้ว
แหล่งข้อมูลเพิ่มเติม
- ตัวอย่างของ HelloWorld ใช้รูปแบบโฆษณาทั้งหมดเพียงเล็กน้อย