SDK
โฆษณาเปิดแอปเป็นรูปแบบโฆษณาที่ออกแบบมาสำหรับผู้เผยแพร่โฆษณาที่ต้องการสร้างรายได้จากหน้าจอโหลดของแอป ผู้ใช้สามารถปิดโฆษณาเปิดแอปได้ทุกเมื่อ และโฆษณาได้รับการออกแบบมาให้แสดงเมื่อผู้ใช้นำแอปของคุณขึ้นมาแสดงในเบื้องหน้า
ดูข้อมูลเพิ่มเติมได้ที่ คำแนะนำเกี่ยวกับโฆษณาเปิดแอปคู่มือนี้อธิบายวิธีผสานรวมโฆษณาเปิดแอปเข้ากับแอป Android
ก่อนเริ่มต้น
ก่อนดำเนินการต่อ ให้ทำดังนี้
- ตั้งค่า GMA Next-Gen SDK
- ใช้รหัสหน่วยโฆษณาทดสอบสำหรับโฆษณาเปิดแอป
/6499/example/app-open- เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาจริง หากคุณไม่ใช้รหัสหน่วยโฆษณาทดสอบ Google อาจระงับบัญชีของคุณ
- ก่อนเผยแพร่แอป ให้แทนที่รหัสนี้ด้วยรหัสหน่วยโฆษณาของคุณ
- ดูรายละเอียดเกี่ยวกับโฆษณาทดสอบของ GMA Next-Gen SDK ได้ที่ หัวข้อเปิดใช้โฆษณาทดสอบ
ทำความเข้าใจการโหลดโฆษณาล่วงหน้า
การโหลดโฆษณาล่วงหน้าใน GMA Next-Gen SDK จะโหลดและแคชโฆษณาโดยอัตโนมัติ
การโหลดโฆษณาล่วงหน้ามีข้อดีดังนี้
- การจัดการการอ้างอิง: รักษาการอ้างอิงไว้จนกว่าจะแสดงโฆษณา
- การโหลดซ้ำอัตโนมัติ: โหลดโฆษณาใหม่เมื่อมีการดึงโฆษณาจากแคช
- การลองใหม่ที่จัดการ: โหลดโฆษณาใหม่เมื่อโหลดโฆษณาไม่สำเร็จ
- การจัดการการหมดอายุ: รีเฟรชโฆษณาก่อนหมดอายุ
- การเพิ่มประสิทธิภาพแคช: เพิ่มประสิทธิภาพลำดับแคชเพื่อแสดงโฆษณาที่มีลำดับความสำคัญสูงสุด
เริ่มการโหลดโฆษณาล่วงหน้า
หากต้องการเริ่มโหลดโฆษณาล่วงหน้า ให้เรียกใช้เมธอด start หนึ่งครั้งเมื่อเริ่มแอป หลังจากเรียกใช้เมธอด start แล้ว
GMA Next-Gen SDK จะโหลดโฆษณาล่วงหน้าโดยอัตโนมัติและลองคำขอที่ล้มเหลวสำหรับการกำหนดค่าที่โหลดล่วงหน้าอีกครั้ง
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มโหลดโฆษณาล่วงหน้า
Kotlin
Java
แทนที่ AD_UNIT_ID ด้วยรหัสหน่วยโฆษณา
ตัวอย่างก่อนหน้านี้แสดงวิธีใช้รหัสหน่วยโฆษณาเป็นรหัสการโหลดล่วงหน้า รหัสการโหลดล่วงหน้าคือตัวระบุสตริงที่คุณสร้างขึ้นเพื่อระบุการกำหนดค่าการโหลดโฆษณาล่วงหน้า หากแอปต้องใช้การกำหนดค่าการกำหนดเป้าหมายหลายรายการสำหรับรหัสหน่วยโฆษณาเดียวกัน ให้ส่งตัวระบุสตริงที่กำหนดเอง
รับและแสดงโฆษณาที่โหลดล่วงหน้า
เมื่อต้องการแสดงโฆษณา ให้เรียกใช้เมธอด pollAd
GMA Next-Gen SDK จะดึงโฆษณาที่พร้อมใช้งานและโหลดโฆษณาถัดไปล่วงหน้าโดยอัตโนมัติ
ในเบื้องหลัง หากไม่มีโฆษณาพร้อมใช้งาน GMA Next-Gen SDK จะไม่แสดงโฆษณา
เมื่อมีออบเจ็กต์โฆษณาที่พร้อมใช้งาน ให้เรียกใช้เมธอด show เพื่อแสดงโฆษณา
ตัวอย่างต่อไปนี้แสดงวิธีดึงและแสดงโฆษณาที่โหลดล่วงหน้า
Kotlin
Java
หลีกเลี่ยงการเรียกใช้เมธอด pollAd จนกว่าคุณจะพร้อมแสดงโฆษณา หากต้องการอ่านข้อมูลการตอบกลับของโฆษณาโดยไม่แสดงโฆษณา ให้ดูที่
อ่านข้อมูลการตอบกลับ
รอเหตุการณ์โฆษณา
รอเหตุการณ์โฆษณาก่อนแสดงโฆษณา ตัวอย่างต่อไปนี้แสดงวิธีลงทะเบียน Callback สำหรับเหตุการณ์โฆษณา
Kotlin
private fun listenToAdEvents() { // Listen for ad events. val ad = appOpenAd if (ad == null) { Log.e(TAG, "App open ad is not ready yet.") return } ad.adEventCallback = object : AppOpenAdEventCallback { override fun onAdShowedFullScreenContent() { // App open ad did show. } override fun onAdDismissedFullScreenContent() { // App open ad did dismiss. appOpenAd = null } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError ) { // App open ad failed to show. Log.e(TAG, "App open ad failed to show: ${fullScreenContentError.message}") } override fun onAdImpression() { // App open ad did record an impression. } override fun onAdClicked() { // App open ad did record a click. } } }
Java
private void listenToAdEvents() { // Listen for ad events. if (appOpenAd == null) { Log.e(TAG, "App open ad is not ready yet."); return; } appOpenAd.setAdEventCallback( new AppOpenAdEventCallback() { @Override public void onAdShowedFullScreenContent() { // App open ad did show. } @Override public void onAdDismissedFullScreenContent() { // App open ad did dismiss. appOpenAd = null; } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { // App open ad failed to show. Log.e(TAG, "App open ad failed to show: " + fullScreenContentError.getMessage()); } @Override public void onAdImpression() { // App open ad did record an impression. } @Override public void onAdClicked() { // App open ad did record a click. } }); }
ไม่บังคับ: รอเหตุการณ์การโหลดล่วงหน้า
เมื่อเริ่มโหลดโฆษณาล่วงหน้า ให้ลงทะเบียนเพื่อรับเหตุการณ์การโหลดล่วงหน้าเพื่อรับการแจ้งเตือนเมื่อโหลดโฆษณาล่วงหน้าสำเร็จ โหลดล่วงหน้าไม่สำเร็จ หรือแคชโฆษณาหมด
ตัวอย่างต่อไปนี้แสดงวิธีลงทะเบียนเพื่อรับเหตุการณ์โฆษณาการโหลดล่วงหน้า
Kotlin
private fun startPreloadingWithCallback(adUnitId: String) { val preloadCallback = object : PreloadCallback { override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) { Log.d(TAG, "App open preload ad $preloadId failed to load with error: ${adError.message}") } override fun onAdsExhausted(preloadId: String) { Log.i(TAG, "App open preload ad $preloadId is not available") } override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) { Log.i(TAG, "App open preload ad $preloadId is available") } } val adRequest = AdRequest.Builder(adUnitId).build() val preloadConfig = PreloadConfiguration(adRequest) AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback) }
Java
private void startPreloadingWithCallback(String adUnitId) { PreloadCallback preloadCallback = new PreloadCallback() { @Override public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) { Log.d( TAG, String.format( "App open preload ad %s failed to load with error: %s", preloadId, adError.getMessage())); } @Override public void onAdsExhausted(@NonNull String preloadId) { Log.i(TAG, String.format("App open preload ad %s is not available", preloadId)); } @Override public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) { Log.i(TAG, String.format("App open preload ad %s is available", preloadId)); } }; AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest); AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback); }
เมื่อโหลดโฆษณาไม่สำเร็จ GMA Next-Gen SDK จะโหลดโฆษณาล่วงหน้าโดยอัตโนมัติและลองคำขอที่ล้มเหลวสำหรับการกำหนดค่าที่โหลดล่วงหน้าอีกครั้ง
ไม่บังคับ: ตรวจสอบความพร้อมใช้งานของโฆษณา
หากต้องการทราบว่ามีโฆษณาพร้อมใช้งานหรือไม่ ให้ตรวจสอบความพร้อมใช้งานของโฆษณา ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบว่ามีโฆษณาที่โหลดล่วงหน้าพร้อมใช้งานหรือไม่
Kotlin
private fun isAdAvailable(adUnitId: String): Boolean { return AppOpenAdPreloader.isAdAvailable(adUnitId) }
Java
private boolean isAdAvailable(String adUnitId) { return AppOpenAdPreloader.isAdAvailable(adUnitId); }
ไม่บังคับ: ตั้งค่าขนาดบัฟเฟอร์
ขนาดบัฟเฟอร์จะควบคุมจำนวนโฆษณาที่โหลดล่วงหน้าที่เก็บไว้ในหน่วยความจำ โดยค่าเริ่มต้น Google จะเพิ่มประสิทธิภาพขนาดบัฟเฟอร์เพื่อปรับสมดุลการใช้หน่วยความจำและความหน่วงในการแสดงโฆษณา คุณสามารถตั้งค่าขนาดบัฟเฟอร์ที่กำหนดเองเพื่อเพิ่มจำนวนโฆษณาที่เก็บไว้ในหน่วยความจำ เราขอแนะนำให้ตั้งค่าขนาดบัฟเฟอร์สูงสุดไว้ที่ 4
ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่าขนาดบัฟเฟอร์เป็นโฆษณาที่โหลดล่วงหน้า 4 รายการ
Kotlin
private fun setBufferSize(adUnitId: String) { val adRequest = AdRequest.Builder(adUnitId).build() // Four is the recommended maximum buffer size. val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 4) AppOpenAdPreloader.start(adUnitId, preloadConfig) }
Java
private void setBufferSize(String adUnitId) { AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); // Four is the recommended maximum buffer size. PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 4); AppOpenAdPreloader.start(adUnitId, preloadConfig); }
ขีดจำกัดแคชการโหลดล่วงหน้า
GMA Next-Gen SDK กำหนดขีดจำกัดทั่วทั้งแอปสำหรับจำนวนโฆษณาที่โหลดล่วงหน้าทั้งหมด ในหน่วยโฆษณาและรหัสการโหลดล่วงหน้าทั้งหมด
- ขีดจำกัดเริ่มต้น: Google จะเก็บโฆษณาที่โหลดล่วงหน้าไว้ในหน่วยความจำสูงสุด 6 รายการ ขีดจำกัดนี้ใช้ร่วมกันในทุกรูปแบบและรหัสการโหลดล่วงหน้า
- เราขอแนะนำให้ตั้งค่าขนาดบัฟเฟอร์เป็น 2 หรือ 3 ต่อรหัสการโหลดล่วงหน้า
ไม่บังคับ: หยุดโหลดโฆษณาล่วงหน้า
หากไม่จำเป็นต้องแสดงโฆษณาสำหรับรหัสการโหลดล่วงหน้าเฉพาะอีกครั้งในเซสชัน คุณสามารถหยุดโหลดโฆษณาล่วงหน้าได้ หากต้องการหยุดโหลดโฆษณาสำหรับรหัสการโหลดล่วงหน้าเฉพาะ ให้เรียกใช้เมธอด destroy ด้วยรหัสการโหลดล่วงหน้า การเรียกใช้เมธอด destroy จะนำโฆษณาที่โหลดล่วงหน้าทั้งหมดที่เชื่อมโยงกับรหัสการโหลดล่วงหน้าออกจากแคช
ตัวอย่างต่อไปนี้แสดงวิธีหยุดโหลดโฆษณาล่วงหน้า
Kotlin
private fun stopPreloading(adUnitId: String) { // Stops the preloading and destroy preloaded ads. AppOpenAdPreloader.destroy(adUnitId) }
Java
private void stopPreloading(String adUnitId) { // Stops the preloading and destroy preloaded ads. AppOpenAdPreloader.destroy(adUnitId); }
ไม่บังคับ: อ่านข้อมูลการตอบกลับ
อ่านข้อมูลการตอบกลับของโฆษณาที่โหลดล่วงหน้าถัดไปโดยไม่ต้องนำโฆษณาออกจากแคช
ตัวอย่างต่อไปนี้แสดงวิธีอ่านข้อมูลการตอบกลับของโฆษณาที่โหลดล่วงหน้าถัดไป
Kotlin
val responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId) if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info.") return } Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")
Java
ResponseInfo responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId); if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info."); return; } Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());
Cold Start และหน้าจอโหลด
Cold Start จะเกิดขึ้นเมื่อแอปเปิดตัวตั้งแต่ต้น เช่น เมื่อผู้ใช้เปิดแอปเป็นครั้งแรกหรือหลังจากหน่วยความจำสิ้นสุดลง ในระหว่าง Cold Start คุณจะไม่มีโฆษณาเปิดแอปที่โหลดไว้ก่อนหน้านี้พร้อมแสดงทันที
เนื่องจากคำขอโฆษณาอาจล่าช้า ผู้ใช้อาจโต้ตอบกับแอปก่อนที่โฆษณาเปิดแอปจะปรากฏขึ้น หากต้องการหลีกเลี่ยงประสบการณ์การใช้งานที่ไม่ดี ให้แสดงโฆษณาเปิดแอปใน Cold Start จากหน้าจอโหลดเท่านั้นขณะที่ชิ้นงานของแอปกำลังโหลด หากการโหลดชิ้นงานเสร็จสมบูรณ์และผู้ใช้เข้าถึงเนื้อหาหลักก่อนที่โฆษณาจะโหลดเสร็จ อย่าแสดงโฆษณา
โหลดชิ้นงานของแอปในเธรดเบื้องหลังเพื่อให้การโหลดดำเนินต่อไปขณะที่โฆษณาแสดงอยู่
แนวทางปฏิบัติแนะนำ
ทำตามแนวทางปฏิบัติแนะนำต่อไปนี้สำหรับโฆษณาเปิดแอป
- แสดงโฆษณาเปิดแอปรายการแรกหลังจากที่ผู้ใช้เปิดแอปหลายครั้งแล้วเท่านั้น
- แสดงโฆษณาเปิดแอปเฉพาะขณะที่ผู้ใช้รอให้แอปโหลด
- หากหน้าจอโหลดโหลดเสร็จสมบูรณ์ขณะที่โฆษณาแสดงอยู่ ให้ปิดหน้าจอโหลดในเมธอด Callback ที่ปิดโฆษณา