โฆษณาเนทีฟ

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

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

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

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

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

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

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

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

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

ca-app-pub-3940256099942544/2247696110

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

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

โหลดโฆษณา

โฆษณาเนทีฟจะโหลดด้วยคลาส AdLoader ซึ่งมีคลาส Builder ของตัวเองสําหรับปรับแต่งระหว่างการสร้าง การเพิ่มตัวรับฟังลงใน 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() เมธอดของออบเจ็กต์ตัวฟัง

ตั้งค่า 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 เสร็จแล้ว ก็ถึงเวลาใช้ 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>

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

แสดงโฆษณา

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