โฆษณาเนทีฟ

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

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

โดยทั่วไปแล้ว การใช้งานโฆษณาเนทีฟให้ประสบความสําเร็จมี 2 ส่วน ได้แก่ การโหลดโฆษณาโดยใช้ SDK แล้วแสดงเนื้อหาโฆษณาในแอป

หน้านี้แสดงวิธีใช้ SDK เพื่อโหลด โฆษณาเนทีฟ เคล็ดลับ: ดูข้อมูลเพิ่มเติมเกี่ยวกับโฆษณาเนทีฟในPlaybook ของโฆษณาเนทีฟ

นอกจากนี้ คุณยังสามารถดูเรื่องราวความสำเร็จของลูกค้าได้: กรณีศึกษา 1, กรณีศึกษา 2

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

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

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

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

ca-app-pub-3940256099942544/2247696110

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

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

โหลดโฆษณา

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

สร้าง AdLoader

โค้ดต่อไปนี้แสดงวิธีสร้าง AdLoader ที่สามารถโหลดโฆษณาเนทีฟ

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110}")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

วิธีการ forNativeAd() จะมีหน้าที่รับผิดชอบในการจัดเตรียม AdLoader สำหรับรูปแบบ NativeAd เมื่อโฆษณาโหลดสำเร็จแล้ว ระบบจะเรียกเมธอด onNativeAdLoaded() ของออบเจ็กต์ Listener

ตั้งค่า AdListener ด้วย AdLoader (ไม่บังคับ)

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

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

ส่งคำขอแสดงโฆษณา

เมื่อคุณสร้าง AdLoader เสร็จแล้ว ก็ถึงเวลาใช้แอปพลิเคชันนี้เพื่อขอโฆษณา ซึ่งทำได้ 2 วิธี ได้แก่ loadAd() และ loadAds()

loadAd()

วิธีนี้จะส่งคําขอโฆษณารายการเดียว

Java

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())

loadAds()

วิธีนี้จะส่งคําขอโฆษณาหลายรายการ (สูงสุด 5 รายการ)

Java

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

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

โหลดโฆษณาหลายรายการ (ตัวเลือก)

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

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

อย่าใช้เมธอด loadAds() หากคุณใช้สื่อกลาง เนื่องจากปัจจุบันคําขอโฆษณาเนทีฟหลายรายการใช้ไม่ได้กับรหัสหน่วยโฆษณาที่กำหนดค่าไว้สําหรับสื่อกลาง

การติดต่อกลับ

หลังจากเรียกใช้ loadAd() ระบบจะเรียก Callback 1 ครั้งไปยังเมธอด Listener ที่กําหนดไว้ก่อนหน้านี้เพื่อแสดงออบเจ็กต์โฆษณาเนทีฟหรือรายงานข้อผิดพลาด

หลังจากโทรหา loadAds() จะมีการเรียกกลับดังกล่าวหลายครั้ง (อย่างน้อย 1 ครั้งและไม่เกินจำนวนโฆษณาที่ขอ) แอปที่ขอโฆษณาหลายรายการควรเรียก AdLoader.isLoading() ในการใช้งานการเรียกกลับเพื่อระบุว่ากระบวนการโหลดเสร็จสิ้นแล้วหรือยัง

ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีตรวจสอบ isLoading() ใน callback ของ onNativeAdLoaded()

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

ปล่อยทรัพยากร

อย่าลืมใช้เมธอด destroy() ในโฆษณาเนทีฟที่โหลด ซึ่งจะปล่อยทรัพยากรที่ไม่ได้ใช้และป้องกันการรั่วไหลของหน่วยความจำ

ตรวจสอบว่ามีการทำลายการอ้างอิง NativeAd ทั้งหมดในเมธอด onDestroy() ของกิจกรรม

ใน onNativeAdLoaded callback อย่าลืมทำลายโฆษณาเนทีฟที่มีอยู่ซึ่งจะถูกยกเลิกการอ้างอิง

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

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            nativeAd.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

แนวทางปฏิบัติแนะนำ

โปรดทำตามกฎต่อไปนี้เมื่อโหลดโฆษณา

  • แอปที่ใช้โฆษณาเนทีฟในรายการควรแคชรายการโฆษณาไว้ล่วงหน้า

  • เมื่อแคชโฆษณาล่วงหน้า ให้ล้างแคชและโหลดซ้ำหลังจากผ่านไป 1 ชั่วโมง

  • อย่าเรียกใช้ loadAd() หรือ loadAds() ใน AdLoader จนกว่าคำขอแรกจะโหลดเสร็จ

  • จำกัดการแคชโฆษณาเนทีฟไว้เฉพาะเท่าที่จำเป็น ตัวอย่างเช่น เมื่อแคชล่วงหน้า ให้แคชเฉพาะโฆษณาที่ปรากฏทันทีบนหน้าจอเท่านั้น โฆษณาเนทีฟใช้หน่วยความจำมาก และการแคชโฆษณาเนทีฟโดยไม่ทำลายโฆษณาจะทำให้ใช้หน่วยความจำมากเกินไป

  • ทำลายโฆษณาเนทีฟเมื่อไม่ได้ใช้งานแล้ว

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

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

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

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

หากแอปทำงานไม่ถูกต้องเมื่อเปิดการเร่งด้วยฮาร์ดแวร์ไว้โดยรวม คุณสามารถควบคุมการเร่งด้วยฮาร์ดแวร์สำหรับแต่ละกิจกรรมได้เช่นกัน หากต้องการเปิดหรือปิดใช้การเร่งฮาร์ดแวร์ ให้ใช้แอตทริบิวต์ 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>

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

แสดงโฆษณา

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