คู่มือนี้ครอบคลุมการโหลดโฆษณาแบนเนอร์แบบปรับขนาดได้ที่ยึดตำแหน่งไว้ลงในแอป Android
ข้อกำหนดเบื้องต้น
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาจริง หากไม่ดำเนินการดังกล่าว อาจส่งผลให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสำหรับแบนเนอร์ Android ดังนี้
/21775744923/example/adaptive-banner
ซึ่งได้รับการกำหนดค่าเป็นพิเศษให้แสดงโฆษณาทดสอบสำหรับทุกคำขอ และคุณสามารถใช้รหัสนี้ในแอปของคุณเองขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงตรวจสอบว่าคุณได้แทนที่รหัสนี้ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบ GMA Next-Gen SDK ได้ที่ เปิดใช้โฆษณาทดสอบ
สร้างออบเจ็กต์ AdView
หากต้องการแสดงแบนเนอร์ ให้ทำดังนี้
Kotlin
- สร้างออบเจ็กต์
AdView - เพิ่มออบเจ็กต์
AdViewลงในเลย์เอาต์ของแอป
ตัวอย่างต่อไปนี้แสดงการสร้างและเพิ่มออบเจ็กต์ AdView ลงในเลย์เอาต์ของแอป
private fun createAdView(adViewContainer: FrameLayout, activity: Activity) {
val adView = AdView(activity)
adViewContainer.addView(adView)
}
Java
- สร้างออบเจ็กต์
AdView - เพิ่มออบเจ็กต์
AdViewลงในเลย์เอาต์ของแอป
ตัวอย่างต่อไปนี้แสดงการสร้างและเพิ่มออบเจ็กต์ AdView ลงในเลย์เอาต์ของแอป
private void createAdView(FrameLayout adViewContainer, Activity activity) {
AdView adView = new AdView(activity);
adViewContainer.addView(adView);
}
เลย์เอาต์ XML
เพิ่มองค์ประกอบ AdView ลงในไฟล์ XML ของเลย์เอาต์
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.libraries.ads.mobile.sdk.banner.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Jetpack Compose
- สร้างออบเจ็กต์
AdViewภายในบล็อกremember - รวมองค์ประกอบ
AndroidViewใน UI ของ Compose เพื่อแสดงออบเจ็กต์AdView
val context = LocalContext.current
val adView = remember { AdView(context) }
// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) {
// Display the ad within an AndroidView.
AndroidView(modifier = modifier.wrapContentSize(), factory = { adView })
}
}
โหลดโฆษณา
ตัวอย่างต่อไปนี้แสดงการโหลดโฆษณาแบนเนอร์แบบปรับขนาดได้ที่ยึดตำแหน่งไว้ความกว้าง 360 dp ลงในออบเจ็กต์ AdView
Kotlin
private fun loadBannerAd(adView: AdView, activity: Activity) {
// Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(activity, 360)
val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()
adView.loadAd(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
Log.d(TAG, "Banner ad loaded.")
}
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.d(TAG, "Banner ad failed to load: $adError")
}
},
)
}
Java
private void loadBannerAd(AdView adView, Activity activity) {
// Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
AdSize adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(activity, 360);
BannerAdRequest adRequest = new BannerAdRequest.Builder(AD_UNIT_ID, adSize).build();
adView.loadAd(
adRequest,
new AdLoadCallback<BannerAd>() {
@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
Log.d(TAG, "Banner ad loaded.");
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
Log.d(TAG, "Banner ad failed to load: " + adError);
}
});
}
Jetpack Compose
// Request a large anchored adaptive banner with a width of 360.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, 360)
// Load the ad when the screen is active.
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(adSize) {
if (!isPreviewMode) {
val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()
adView.loadAd(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
Log.d(Constant.TAG, "Banner ad loaded.")
}
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.w(Constant.TAG, "Banner ad failed to load: $adError")
}
},
)
}
}
กำหนดขนาดโฆษณาให้เล็กกว่าหรือเท่ากับขนาดหน้าจอของอุปกรณ์
หากต้องการกำหนดขนาดหน้าจอสูงสุด ให้ใช้วิธี
Resources.getDisplayMetrics
ขนาดของออบเจ็กต์ AdSize ใช้หน่วยความหนาแน่นของพิกเซลอิสระ (dp) เมื่อเปรียบเทียบ ให้แปลงขนาดหน้าจอจากพิกเซลเป็น dp
ดูรายละเอียดเกี่ยวกับข้อจำกัดด้านขนาดได้ที่
แก้ปัญหาการแสดงผลที่ไม่ได้รับโฆษณาใน Ad Manager
รีเฟรชโฆษณา
หากคุณกำหนดค่าหน่วยโฆษณาให้รีเฟรช คุณไม่จำเป็นต้องขอโฆษณาอื่นเมื่อโฆษณาโหลดไม่สำเร็จ GMA Next-Gen SDK จะพิจารณาอัตราการรีเฟรช ที่คุณระบุไว้ใน UI ของ Ad Manager หากยังไม่ได้เปิดใช้การรีเฟรช ให้ส่งคำขอใหม่ ดูรายละเอียดเพิ่มเติมเกี่ยวกับการรีเฟรชหน่วยโฆษณา เช่น การตั้งค่าอัตราการรีเฟรช ได้ที่ อัตราการรีเฟรชสำหรับโฆษณาในแอปบนอุปกรณ์เคลื่อนที่
ปล่อยทรัพยากรโฆษณา
เมื่อใช้โฆษณาแบนเนอร์เสร็จแล้ว คุณสามารถปล่อยทรัพยากรของโฆษณาแบนเนอร์ได้
หากต้องการปล่อยทรัพยากรของโฆษณา ให้นำโฆษณาออกจากลำดับชั้นการแสดงผลและลบการอ้างอิงทั้งหมดของโฆษณา
Kotlin
private fun destroyBanner() {
// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
parentView.removeView(adView)
}
// Destroy the banner ad resources.
adView?.destroy()
// Drop reference to the banner ad.
adView = null
}
Java
private void destroyBanner() {
// Remove banner from view hierarchy.
if (adView != null) {
if (adView.getParent() instanceof ViewGroup) {
((ViewGroup) adView.getParent()).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
}
// Drop reference to the banner ad.
adView = null;
}
Jetpack Compose
// Destroy the ad when the screen is disposed.
DisposableEffect(Unit) { onDispose { adView.destroy() } }
เหตุการณ์โฆษณา
คุณสามารถฟังเหตุการณ์ต่างๆ ในวงจรชีวิตของโฆษณาได้ ซึ่งรวมถึงการแสดงผลและการคลิกโฆษณา รวมถึงการเปิดและปิดโฆษณา เราขอแนะนำให้ตั้งค่าการเรียกกลับก่อนแสดงแบนเนอร์
Kotlin
override fun onAdLoaded(ad: BannerAd) {
ad.adEventCallback =
object : BannerAdEventCallback {
override fun onAdImpression() {
// Banner ad recorded an impression.
Log.d(TAG, "Banner ad recorded an impression.")
}
override fun onAdClicked() {
// Banner ad recorded a click.
Log.d(TAG, "Banner ad clicked.")
}
override fun onAdShowedFullScreenContent() {
// Banner ad showed.
Log.d(TAG, "Banner ad showed full screen content.")
}
override fun onAdDismissedFullScreenContent() {
// Banner ad dismissed.
Log.d(TAG, "Banner ad dismissed full screen content.")
}
override fun onAdFailedToShowFullScreenContent(
fullScreenContentError: FullScreenContentError
) {
// Banner ad failed to show.
Log.w(TAG, "Banner ad failed to show full screen content: $fullScreenContentError")
}
}
}
Java
@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
bannerAd.setAdEventCallback(
new BannerAdEventCallback() {
@Override
public void onAdImpression() {
// Banner ad recorded an impression.
Log.d(TAG, "Banner ad recorded an impression.");
}
@Override
public void onAdClicked() {
// Banner ad recorded a click.
Log.d(TAG, "Banner ad clicked.");
}
@Override
public void onAdShowedFullScreenContent() {
// Banner ad showed.
Log.d(TAG, "Banner ad showed full screen content.");
}
@Override
public void onAdDismissedFullScreenContent() {
// Banner ad dismissed.
Log.d(TAG, "Banner ad dismissed full screen content.");
}
@Override
public void onAdFailedToShowFullScreenContent(
@NonNull FullScreenContentError fullScreenContentError) {
// Banner ad failed to show.
Log.w(
TAG,
"Banner ad failed to show full screen content: " + fullScreenContentError);
}
});
}
การเรียกกลับการรีเฟรชโฆษณา
BannerAdRefreshCallback จะจัดการเหตุการณ์การรีเฟรชโฆษณาหากคุณใช้ การรีเฟรชอัตโนมัติ
สำหรับโฆษณาแบนเนอร์ โปรดตั้งค่า Callback ก่อนที่จะเพิ่มมุมมองโฆษณาลงในลำดับชั้นการแสดงผล ดูรายละเอียดเกี่ยวกับการรีเฟรชโฆษณาได้ที่
รีเฟรชโฆษณา
Kotlin
adView.loadAd(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
ad.bannerAdRefreshCallback =
object : BannerAdRefreshCallback {
override fun onAdRefreshed() {
// Banner ad refreshed.
Log.d(TAG, "Banner ad refreshed.")
}
override fun onAdFailedToRefresh(adError: LoadAdError) {
// Banner ad failed to refresh.
Log.w(TAG, "Banner ad failed to refresh: $adError")
}
}
}
override fun onAdFailedToLoad(adError: LoadAdError) {
// Banner ad failed to load.
Log.w(TAG, "Banner ad failed to load: $adError")
}
},
)
Java
adView.loadAd(
adRequest,
new AdLoadCallback<BannerAd>() {
@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
bannerAd.setBannerAdRefreshCallback(
new BannerAdRefreshCallback() {
@Override
public void onAdRefreshed() {
// Banner ad refreshed.
Log.d(TAG, "Banner ad refreshed.");
}
@Override
public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
// Banner ad failed to refresh.
Log.w(TAG, "Banner ad failed to refresh: " + adError);
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
// Banner ad failed to load.
Log.w(TAG, "Banner ad failed to load: " + adError);
}
});
การเร่งฮาร์ดแวร์สำหรับโฆษณาวิดีโอ
โฆษณาวิดีโอจะแสดงในมุมมองโฆษณาแบนเนอร์ได้สำเร็จก็ต่อเมื่อเปิดใช้การเร่ง ฮาร์ดแวร์แล้ว
การเร่งฮาร์ดแวร์จะเปิดใช้โดยค่าเริ่มต้น แต่บางแอปอาจเลือกที่จะปิดใช้ หากแอปของคุณเป็นเช่นนั้น เราขอแนะนำให้เปิดใช้การเร่งฮาร์ดแวร์สำหรับคลาส Activity ที่ใช้โฆษณา
เปิดใช้การเร่งฮาร์ดแวร์
หากแอปทำงานไม่ถูกต้องเมื่อเปิดใช้การเร่งฮาร์ดแวร์ทั่วโลก คุณสามารถควบคุมการเร่งฮาร์ดแวร์สำหรับกิจกรรมแต่ละรายการได้เช่นกัน หากต้องการเปิดใช้หรือ
ปิดใช้การเร่งฮาร์ดแวร์ คุณสามารถใช้android:hardwareAccelerated
แอตทริบิวต์สำหรับ
<application>
และ
<activity>
องค์ประกอบในAndroidManifest.xml ตัวอย่างต่อไปนี้แสดงการเปิดใช้การเร่งฮาร์ดแวร์สำหรับทั้งแอป แต่ปิดใช้สำหรับกิจกรรมหนึ่งรายการ
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกสำหรับการควบคุมการเร่งฮาร์ดแวร์ได้ที่คู่มือ การเร่งฮาร์ดแวร์ โปรดทราบว่ามุมมองโฆษณาแต่ละรายการจะเปิดใช้การเร่งฮาร์ดแวร์ไม่ได้หากกิจกรรมปิดใช้ไว้ ดังนั้นกิจกรรมเองจะต้องเปิดใช้การเร่งฮาร์ดแวร์
ดาวน์โหลดและเรียกใช้ แอปตัวอย่าง ที่แสดงการใช้ GMA Next-Gen SDK