แบนเนอร์โฆษณา

โฆษณาแบนเนอร์คือโฆษณารูปสี่เหลี่ยมผืนผ้าที่ยึดพื้นที่ส่วนใดส่วนหนึ่งของเลย์เอาต์ของแอป ในระหว่างที่ผู้ใช้กําลังโต้ตอบกับแอป โฆษณาเหล่านี้จะอยู่บนหน้าจอ ซึ่งอาจตรึงอยู่ที่ด้านบนหรือด้านล่างของหน้าจอ หรือแทรกอยู่ในเนื้อหาในขณะที่ผู้ใช้เลื่อนดู โฆษณาแบนเนอร์จะรีเฟรชโดยอัตโนมัติหลังจากเวลาผ่านไปช่วงหนึ่ง ดูข้อมูลเพิ่มเติมได้ที่ ภาพรวมของโฆษณาแบนเนอร์

คู่มือนี้แสดงวิธีเริ่มต้นใช้งาน โฆษณาแบนเนอร์ยึดตำแหน่งที่ปรับเปลี่ยนได้ซึ่งจะเพิ่มประสิทธิภาพสูงสุดด้วยการเพิ่มประสิทธิภาพขนาดโฆษณาสำหรับอุปกรณ์แต่ละเครื่องตามความกว้างของโฆษณาที่คุณระบุ

โฆษณาแบนเนอร์แบบปรับขนาดได้แบบปรับขนาดได้เป็นโฆษณาที่มีอัตราส่วนคงที่ ไม่ใช่โฆษณาขนาดคงที่แบบปกติ สัดส่วนภาพใกล้เคียงกับมาตรฐานอุตสาหกรรม 320x50 เมื่อคุณระบุความกว้างเต็มที่ใช้ได้แล้ว ระบบจะแสดงโฆษณาที่มีความสูงที่เหมาะสมสำหรับความกว้างนั้น ความสูงที่เหมาะสมไม่ได้เปลี่ยนไปตามคำขอต่างๆ จากอุปกรณ์เดียวกัน และวิวรอบๆ ไม่จำเป็นต้องย้ายเมื่อรีเฟรชโฆษณา

ข้อกำหนดเบื้องต้น

ทดสอบด้วยโฆษณาทดสอบเสมอ

เมื่อสร้างและทดสอบแอป ให้ตรวจสอบว่าคุณใช้โฆษณาทดสอบแทนที่จะใช้โฆษณาเวอร์ชันที่ใช้งานจริง มิเช่นนั้นจะถูกระงับบัญชี

วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบสำหรับแบนเนอร์ Android โดยเฉพาะ

/6499/example/adaptive-banner

โดยได้รับการกำหนดค่ามาเป็นพิเศษให้แสดงผลโฆษณาทดสอบสำหรับทุกคำขอ และคุณจะนำไปใช้ในแอปของตนเองได้ขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงตรวจสอบว่าคุณแทนที่หน่วยโฆษณาด้วยรหัสหน่วยโฆษณาของคุณเองก่อนเผยแพร่แอป

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ได้ที่ทดสอบโฆษณา

เพิ่ม AdManagerAdView ลงในเลย์เอาต์

ขั้นตอนแรกในการแสดงแบนเนอร์คือการวาง AdManagerAdView ในเลย์เอาต์สำหรับ Activity หรือ Fragment ที่ต้องการแสดง

Java

private AdSize getAdSize() {
  // Determine the screen width (less decorations) to use for the ad width.
  Display display = getWindowManager().getDefaultDisplay();
  DisplayMetrics outMetrics = new DisplayMetrics();
  display.getMetrics(outMetrics);

  float density = outMetrics.density;

  float adWidthPixels = adContainerView.getWidth();

  // If the ad hasn't been laid out, default to the full screen width.
  if (adWidthPixels == 0) {
    adWidthPixels = outMetrics.widthPixels;
  }

  int adWidth = (int) (adWidthPixels / density);
  return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}

private void loadBanner() {
  
  // Create a new ad view.
  AdManagerAdView adView = new AdManagerAdView(this);
  adView.setAdSizes(getAdSize());
  adView.setAdUnitId("/6499/example/adaptive-banner");

  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Kotlin


// Determine the screen width (less decorations) to use for the ad width.
// If the ad hasn't been laid out, default to the full screen width.
private val adSize: AdSize
  get() {
    val display = windowManager.defaultDisplay
    val outMetrics = DisplayMetrics()
    display.getMetrics(outMetrics)

    val density = outMetrics.density

    var adWidthPixels = binding.adViewContainer.width.toFloat()
    if (adWidthPixels == 0f) {
      adWidthPixels = outMetrics.widthPixels.toFloat()
    }

    val adWidth = (adWidthPixels / density).toInt()
    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
  }

private fun loadBanner() {
  
  // Create a new ad view.
  val adView = AdManagerAdView(this)
  adView.adSizes = adSize
  adView.adUnitId = "/6499/example/adaptive-banner"

  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

โหลดโฆษณา

เมื่อ AdManagerAdView พร้อมแล้ว ขั้นตอนต่อไปคือการโหลดโฆษณา โดยใช้เมธอด loadAd() ในคลาส AdManagerAdView โดยใช้พารามิเตอร์ AdManagerAdRequest ที่เก็บข้อมูลรันไทม์ เช่น ข้อมูลการกำหนดเป้าหมาย เกี่ยวกับคำขอโฆษณาเดียว

ตัวอย่างแสดงวิธีโหลดโฆษณาในเมธอด onCreate() ของ Activity

Java

private void loadBanner() {
  // Create a new ad view.
  adView = new AdManagerAdView(this);
  adView.setAdUnitId(AD_UNIT);
  adView.setAdSize(getAdSize());
  
  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Kotlin

private fun loadBanner() {
  // This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
  adView.adUnitId = "/6499/example/banner"
  adView.setAdSize(adSize)
  
  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

หากโฆษณาโหลดไม่สำเร็จ คุณไม่จำเป็นต้องขอหน่วยโฆษณาใหม่อย่างชัดแจ้ง ตราบใดที่ได้กำหนดค่าหน่วยโฆษณาให้รีเฟรชแล้ว SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะใช้อัตราการรีเฟรชที่คุณระบุใน Ad Managerอินเทอร์เฟซเว็บ หากคุณยังไม่ได้เปิดใช้การรีเฟรช คุณจะต้องส่งคำขอใหม่

เท่านี้ก็เรียบร้อย แอปของคุณพร้อมแสดงโฆษณาแบนเนอร์แล้ว

เหตุการณ์โฆษณา

คุณสามารถติดตามเหตุการณ์ต่างๆ ได้ในวงจรของโฆษณา ไม่ว่าจะเป็นการโหลด การแสดงโฆษณา และการคลิก ตลอดจนเหตุการณ์การเปิดและการปิดโฆษณา เราขอแนะนำให้ตั้งค่าโค้ดเรียกกลับก่อนที่จะโหลดแบนเนอร์

Java

AdManagerAdView.setAdListener(new AdListener() {
    @Override
    public void onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    @Override
    public void onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

    @Override
    public void onAdFailedToLoad(LoadAdError adError) {
      // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    @Override
    public void onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
});

Kotlin

AdManagerAdView.adListener = object: AdListener() {
    override fun onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    override fun onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

    override fun onAdFailedToLoad(adError : LoadAdError) {
      // Code to be executed when an ad request fails.
    }

    override fun onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    override fun onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    override fun onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
}

เมธอดที่ลบล้างได้แต่ละวิธีใน AdListener นั้นสอดคล้องกับเหตุการณ์ในวงจรของโฆษณา

วิธีที่ลบล้างได้
onAdClicked() ระบบจะเรียกใช้เมธอด onAdClicked() เมื่อมีการบันทึกการคลิกสำหรับโฆษณา
onAdClosed() ระบบจะเรียกใช้เมธอด onAdClosed() เมื่อผู้ใช้กลับไปที่แอปหลังจากดู URL ปลายทางของโฆษณา แอปของคุณสามารถใช้แอปดังกล่าวเพื่อกลับมาทำกิจกรรมที่ถูกระงับขึ้นต่อหรือดำเนินการอื่นๆ ที่จำเป็นเพื่อให้แอปพร้อมสำหรับการโต้ตอบ
onAdFailedToLoad() เมธอด onAdFailedToLoad() เป็นวิธีเดียวที่มีพารามิเตอร์ พารามิเตอร์ข้อผิดพลาดประเภท LoadAdError อธิบายข้อผิดพลาดที่เกิดขึ้น ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบการแก้ไขข้อบกพร่องของข้อผิดพลาดในการโหลดโฆษณา
onAdImpression() ระบบจะเรียกใช้เมธอด onAdImpression() เมื่อมีการบันทึกการแสดงผลสำหรับโฆษณา
onAdLoaded() ระบบจะเรียกใช้เมธอด onAdLoaded() เมื่อโฆษณาโหลดเสร็จแล้ว หากต้องการเลื่อนเวลาเพิ่ม AdManagerAdView ลงในกิจกรรมหรือส่วนย่อยจนกว่าจะแน่ใจว่าโฆษณาจะโหลด ก็ทำได้ที่นี่
onAdOpened() ระบบจะเรียกใช้เมธอด onAdOpened() เมื่อโฆษณาเปิดโฆษณาซ้อนทับที่บดบังหน้าจอ

การเร่งฮาร์ดแวร์สำหรับโฆษณาวิดีโอ

หากต้องการให้โฆษณาวิดีโอแสดงในมุมมองโฆษณาแบนเนอร์ได้สำเร็จ คุณต้องเปิดใช้การเร่งความเร็วด้วยฮาร์ดแวร์

การเร่งฮาร์ดแวร์จะเปิดใช้งานโดยค่าเริ่มต้น แต่แอปบางแอปอาจเลือกที่จะปิดใช้งาน ในกรณีนี้ เราขอแนะนำให้เปิดใช้การเร่งฮาร์ดแวร์สำหรับ คลาส Activity ที่ใช้โฆษณา

การเปิดใช้การเร่งฮาร์ดแวร์

หากแอปทำงานผิดปกติเมื่อเปิดการเร่งฮาร์ดแวร์ไว้ทั่วโลก คุณจะควบคุมแอปสำหรับแต่ละกิจกรรมได้เช่นกัน หากต้องการเปิดหรือปิดใช้การเร่งฮาร์ดแวร์ คุณสามารถใช้แอตทริบิวต์ android:hardwareAccelerated สำหรับองค์ประกอบ <application> และ <activity> ใน AndroidManifest.xml ตัวอย่างต่อไปนี้เปิดใช้การเร่งฮาร์ดแวร์ สำหรับทั้งแอป แต่ปิดใช้ 1 กิจกรรม

<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>

ดูคู่มือการเร่งฮาร์ดแวร์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกในการควบคุมการเร่งฮาร์ดแวร์ โปรดทราบว่าการดูโฆษณาแต่ละครั้งสำหรับการเร่งฮาร์ดแวร์ไม่ได้ หากปิดใช้กิจกรรมอยู่ ดังนั้นกิจกรรมจะต้องเปิดใช้การเร่งฮาร์ดแวร์ด้วย

การนับการแสดงผลด้วยตนเอง

การนับการแสดงผลด้วยตนเองใช้ได้กับแคมเปญแบบขายตรงและแคมเปญเฮาส์ที่มีครีเอทีฟโฆษณาที่ดูแลการแสดงใน Ad Manager โดยตรงเท่านั้น และไม่ควรใช้เป็นโฆษณาทดแทนหรือโฆษณาในเครือข่ายของบุคคลที่สาม ดูรายละเอียดเพิ่มเติมได้ที่การนับการแสดงผลและการคลิก

คุณสามารถส่งการใช้คำสั่ง ping การแสดงผลไปยัง Ad Manager ได้ด้วยตัวเองหากมีเงื่อนไขพิเศษว่าควรจะบันทึกการแสดงผลเมื่อใด โดยเปิดใช้ AdManagerAdRequest สำหรับการแสดงผลด้วยตนเองก่อนโหลดโฆษณา ดังนี้

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build();

Kotlin

val adRequest = AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build()

เมื่อคุณพิจารณาว่าการแสดงโฆษณาสำเร็จแล้วและโฆษณาอยู่บนหน้าจอแล้ว คุณสามารถบันทึกการแสดงผลด้วยตนเองได้โดยทำดังนี้

Java

AdManagerAdView.recordManualImpression();

Kotlin

AdManagerAdView.recordManualImpression()

เหตุการณ์ของแอป

เหตุการณ์ในแอปช่วยให้คุณสร้างโฆษณาที่ส่งข้อความไปยังโค้ดของแอปได้ จากนั้นแอปจะดำเนินการโดยอิงตามข้อความเหล่านี้ได้

คุณฟังเหตุการณ์ของแอปที่เจาะจงของ Ad Manager ได้โดยใช้ AppEventListener เหตุการณ์เหล่านี้สามารถเกิดขึ้นได้ทุกเมื่อในระหว่างวงจรของโฆษณา แม้ว่าจะก่อนที่จะมีการเรียกใช้ onAdLoaded() ก็ตาม

Java

public interface AppEventListener {
  void onAppEvent(String name, String info);
}

Kotlin

interface AppEventListener {
    fun onAppEvent(name: String, info: String)
}

ระบบจะเรียกใช้ void onAppEvent(String name, String info) เมื่อมีเหตุการณ์ในแอป เกิดขึ้นในโฆษณา คุณอาจนำอินเทอร์เฟซนี้ไปใช้ได้จากกิจกรรมหรือออบเจ็กต์อื่นๆ

Java

import com.google.android.gms.ads.admanager.*;

public class BannerExample extends Activity implements AppEventListener {
}

Kotlin

import com.google.android.gms.ads.admanager.*

class BannerExample : Activity(), AppEventListener {
}

และส่งไปยัง AdManagerAdView:

Java

AdManagerAdView.setAppEventListener(this);

Kotlin

AdManagerAdView.appEventListener = this

นี่คือตัวอย่างที่แสดงวิธีเปลี่ยนสีพื้นหลังของแอป โดยขึ้นอยู่กับเหตุการณ์ของแอปที่มีชื่อสี

Java

@Override
public void onAppEvent(String name, String info) {
  if ("color".equals(name)) {
    if ("green".equals(info)) {
      // Set background color to green.
    } else if ("blue".equals(info)) {
      // Set background color to blue.
    } else {
      // Set background color to black.
    }
  }
}

Kotlin

override fun onAppEvent(name: String?, info: String?) {
    if (name == "color") {
        when (info) {
            "green" -> {
                // Set background color to green.
            }
            "blue" -> {
                // Set background color to blue.
            }
            else -> {
                // Set background color to black.
            }
        }
    }
}

และนี่คือครีเอทีฟโฆษณาที่เกี่ยวข้องที่จะส่งข้อความเหตุการณ์ของแอปสีไปยัง Listener

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

ดูตัวอย่างเหตุการณ์ในแอปของ Ad Manager สำหรับการติดตั้งใช้งานเหตุการณ์ของแอปในแอปเดโม API

Java Kotlin

แหล่งข้อมูลเพิ่มเติม

ตัวอย่างใน GitHub

  • ตัวอย่างโฆษณาแบนเนอร์แบบปรับขนาดได้แบบโฆษณา Anchor: Java | Kotlin
  • การสาธิตฟีเจอร์ขั้นสูง: Java | Kotlin

ขั้นตอนถัดไป

แบนเนอร์แบบย่อได้

โฆษณาแบนเนอร์แบบยุบได้คือโฆษณาแบนเนอร์ที่ในตอนแรกจะแสดงแบบวางซ้อนที่ใหญ่ขึ้น มีปุ่มให้ยุบโฆษณาให้มีขนาดเล็กลง ลองนำไปใช้เพื่อเพิ่มประสิทธิภาพ ให้มากขึ้นไปอีก ดูรายละเอียดเพิ่มเติมในโฆษณาแบนเนอร์แบบยุบได้

แบนเนอร์แบบปรับขนาดได้แบบแทรกในบรรทัด

แบนเนอร์แทรกในบรรทัดที่ปรับเปลี่ยนได้จะมีขนาดใหญ่กว่าและสูงกว่าแบนเนอร์แบบปรับขนาดได้ที่อยู่ด้านล่างสุด โฆษณาประเภทนี้มีความสูงไม่เท่ากันและอาจสูงเท่ากับหน้าจออุปกรณ์ ขอแนะนำให้ใช้แบนเนอร์แทรกในบรรทัดที่ปรับเปลี่ยนได้เหนือโฆษณาแบนเนอร์แบบปรับขนาดได้ที่อยู่ด้านล่างสุดสำหรับแอปที่วางโฆษณาแบนเนอร์ไว้ในเนื้อหาที่เลื่อนได้ ดูรายละเอียดเพิ่มเติมได้ที่แบนเนอร์ที่ปรับเปลี่ยนได้แบบแทรกในบรรทัด

ดูหัวข้ออื่นๆ