เพิ่มโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบลงในแอพ Android

Audience Network ช่วยให้คุณสามารถสร้างรายได้จากแอพ Android ของคุณด้วยโฆษณาบน Facebook ได้ โฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบเป็นประสบการณ์แบบเต็มหน้าจอที่ผู้ใช้สามารถเลือกที่จะดูโฆษณาแบบวิดีโอแลกกับสิ่งตอบแทน เช่น สกุลเงินเสมือนจริง ไอเท็มในแอพ เนื้อหาสำหรับสมาชิกโดยเฉพาะ และอื่นๆ ประสบการณ์การรับชมโฆษณาจะมีความยาว 15-30 วินาทีและข้ามไม่ได้ โดยมีการ์ดต่อท้ายเป็นการกระตุ้นให้ดำเนินการ เมื่อผู้ใช้ดูวิดีโอจนจบแล้ว คุณจะได้รับการเรียกกลับให้มอบรางวัลที่แนะนำให้กับผู้ใช้ดังกล่าว

อย่าลืมดูคู่มือเริ่มต้นใช้งาน Audience Network และเริ่มต้นใช้งาน Android ก่อนดำเนินการต่อ

วิธีทำ

ขั้นตอนที่ 1: การเริ่มโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบในกิจกรรมของคุณ

ขั้นตอนที่ 2: การแสดงโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบในกิจกรรมของคุณ

เริ่มต้น Audience Network SDK

ระบบได้เพิ่มเมธอดนี้ใน Android Audience Network SDK เวอร์ชั่น 5.1

การเริ่มต้นของ Audience Network Android SDK ที่ชัดเจนเป็นข้อบังคับตั้งแต่เวอร์ชั่น 5.3.0 ขึ้นไป โปรดดูเอกสารนี้เกี่ยวกับวิธีการเริ่มต้น Audience Network Android SDK

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

public class YourApplication extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialize the Audience Network SDK
        AudienceNetworkAds.initialize(this);       
    }
    ...
}

ขั้นตอนที่ 1: การเริ่มโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบในกิจกรรมของคุณ

เพิ่มโค้ดต่อไปนี้ไว้ที่ด้านบนสุดของกิจกรรมเพื่อนำเข้า SDK โฆษณาบน Facebook

import com.facebook.ads.*;

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

private final String TAG = RewardedVideoAdActivity.class.getSimpleName();
private RewardedVideoAd rewardedVideoAd;

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        @Override
        public void onError(Ad ad, AdError error) {
            // Rewarded video ad failed to load
            Log.e(TAG, "Rewarded video ad failed to load: " + error.getErrorMessage());
        }

        @Override
        public void onAdLoaded(Ad ad) {
            // Rewarded video ad is loaded and ready to be displayed  
            Log.d(TAG, "Rewarded video ad is loaded and ready to be displayed!");
        }

        @Override
        public void onAdClicked(Ad ad) {
            // Rewarded video ad clicked
            Log.d(TAG, "Rewarded video ad clicked!");
        }

        @Override
        public void onLoggingImpression(Ad ad) {
            // Rewarded Video ad impression - the event will fire when the 
            // video starts playing
            Log.d(TAG, "Rewarded video ad impression logged!");
        }

        @Override
        public void onRewardedVideoCompleted() {
            // Rewarded Video View Complete - the video has been played to the end.
            // You can use this event to initialize your reward
            Log.d(TAG, "Rewarded video completed!");

            // Call method to give reward
            // giveReward();
        }

        @Override
        public void onRewardedVideoClosed() {
            // The Rewarded Video ad was closed - this can occur during the video
            // by closing the app, or closing the end card.
            Log.d(TAG, "Rewarded video ad closed!");
        }
    };
    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .build());
    ...
}

ขั้นตอนที่ 2: การแสดงโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบ

สถานการณ์ที่ 1: แสดงโฆษณาโดยทันทีที่โหลดโฆษณาสำเร็จ ปรับเปลี่ยนเมธอด onAdLoaded() ข้างต้นเพื่อเรียกดูคุณสมบัติและแสดงในรูปแบบดังต่อไปนี้:

private RewardedVideoAd rewardedVideoAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        ...
        @Override
        public void onAdLoaded(Ad ad) {
            // Rewarded video ad is loaded and ready to be displayed  
            rewardedVideoAd.show();
        }
        ...
    };
    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .build());
    ...
}

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

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

คุณควรปฏิบัติตามแนวคิดด้านล่างนี้ แต่โปรดอย่าคัดลอกโค้ดลงในโปรเจ็กต์ เนื่องจากเป็นเพียงตัวอย่างเท่านั้น

private RewardedVideoAd rewardedVideoAd;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        ...
    };
    // load the ad
    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .build());

    // Here is just an example for displaying the ad with delay
    // Please call this method at appropriate timing in your project
    showAdWithDelay();
}

private void showAdWithDelay() {
    /**
     * Here is an example for displaying the ad with delay;
     * Please do not copy the Handler into your project
     */
    // Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            // Check if rewardedVideoAd has been loaded successfully
            if (rewardedVideoAd == null || !rewardedVideoAd.isAdLoaded()) {
                return;
            }
            // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad.
            if (rewardedVideoAd.isAdInvalidated()) {
                return;
            }
            rewardedVideoAd.show();
        }
    }, 1000 * 60 * 15); // Show the ad after 15 minutes
}

หากคุณใช้โปรแกรมจำลอง Google Android คุณจะต้องเพิ่มบรรทัดโค้ดต่อไปนี้ก่อนโหลดโฆษณาทดสอบ:
AdSettings.addTestDevice("HASHED ID");

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

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

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

@Override
protected void onDestroy() {
    if (rewardedVideoAd != null) {
        rewardedVideoAd.destroy();
        rewardedVideoAd = null;
    }
    super.onDestroy();
}

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

ในการแสดงโฆษณาแบบวิดีโอใน Audience Network การแสดงผลแบบเร่งฮาร์ดแวร์จะต้องเปิดใช้งาน ไม่เช่นนั้นคุณอาจเห็นหน้าจอดำในการรับชมวิดีโอ ซึ่งมีผลกับ

  • ชิ้นงานโฆษณาในโฆษณาแบบเนทีฟ
  • ชิ้นงานโฆษณาในโฆษณาคั่น
  • โฆษณาแบบวิดีโอในสตรีม
  • วิดีโอที่มีรางวัลหลังชมจบ

การเร่งฮาร์ดแวร์จะเปิดใช้งานตามค่าเริ่มต้นหากระดับ API เป้าหมายของคุณเท่ากับ 14 ขึ้นไป (Ice Cream Sandwich, Android 4.0.1) แต่คุณยังสามารถเปิดใช้งานคุณสมบัตินี้ในระดับแอพพลิเคชั่นหรือระดับกิจกรรมด้วยตนเองได้ด้วย

ระดับแอพพลิเคชั่น

ในไฟล์รายงาน Android ของคุณ เพิ่มแอตทริบิวต์ต่อไปนี้ไปยังแท็ก <application> เพื่อเปิดใช้งานการเร่งฮาร์ดแวร์สำหรับแอพพลิเคชั่นทั้งหมดของคุณ:

<application android:hardwareAccelerated="true" ...>

ระดับกิจกรรม

หากคุณต้องการเปิดใช้งานคุณสมบัติสำหรับกิจกรรมที่เฉพาะเจาะจงในแอพพลิเคชั่นของคุณเท่านั้น ในไฟล์รายงาน Android ของคุณ คุณสามารถเพิ่มคุณสมบัติต่อไปนี้ไปยังแท็ก <activity> ตัวอย่างต่อไปนี้จะเปิดใช้งานการเร่งฮาร์ดแวร์สำหรับ AudienceNetworkActivity ซึ่งใช้ในการแสดงผลโฆษณาคั่นและวิดีโอที่มีรางวัลหลังชมจบ:

<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>

การตรวจสอบความถูกต้องของรางวัลในฝั่งเซิร์ฟเวอร์

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

ภาพรวม

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

  1. SDK ของ Audience Network ส่งคำขอโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบด้วยพารามิเตอร์ต่อไปนี้
    • ID ตำแหน่งการจัดวางบน Audience Network
    • ID ผู้ใช้ที่ไม่ซ้ำกัน ซึ่งจะเป็นแอตทริบิวต์ที่คุณใช้เพื่อระบุผู้ใช้ที่ไม่ซ้ำกัน ตัวอย่างเช่น ตัวระบุตัวเลข
    • มูลค่าของรางวัล คือ มูลค่าของรางวัลที่คุณต้องการมอบให้ผู้ใช้ ตัวอย่างเช่น 100 เหรียญ
  2. เมื่อรับชมวิดีโอจนจบแล้ว เซิร์ฟเวอร์ของ Facebook จะส่งค่าเหล่านี้ไปยังตำแหน่งข้อมูลที่คุณระบุพร้อมกับข้อมูลลับของแอพและ ID ธุรกรรมที่ไม่ซ้ำกัน
  3. เมื่อได้รับแล้ว เซิร์ฟเวอร์จะตรวจสอบความถูกต้องของคำขอและตอบกลับดังนี้
    • คำตอบ 200: คำขอถูกต้องและควรส่งรางวัล
    • คำตอบที่ไม่ใช่ 200: คำขอไม่ถูกต้องและไม่ควรส่งรางวัล
  4. เมื่อชมวิดีโอจบแล้ว การ์ดต่อท้ายจะปรากฏขึ้นและหนึ่งในเหตุการณ์ต่อไปนี้จะทำงาน
    • onRewardServerSuccess - มีการทริกเกอร์ก็ต่อเมื่อได้รับการตอบกลับแบบ 200 ในระหว่างขั้นตอนที่ 3
    • onRewardServerFailed - มีการทริกเกอร์ก็ต่อเมื่อได้รับ การตอบกลับที่ไม่ใช่ 200 ในระหว่างขั้นตอนที่ 3

ตัวอย่างของ URL จากเซิร์ฟเวอร์ของ Facebook ที่จะไปถึงตำแหน่งข้อมูลผู้เผยแพร่ของคุณ: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

ขั้นตอนการทำงานของคุณจะมีลักษณะดังนี้

การนำไปใช้งาน

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

private RewardedVideoAd rewardedVideoAd;

private void loadRewardedVideoAd { 
    // Instantiate a RewardedVideoAd object. 
    // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
    // now, while you are testing and replace it later when you have signed up.
    // While you are using this temporary code you will only get test ads and if you release
    // your code like this to the Google Play your users will not receive ads (you will get
    // a no fill error).
    rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID");
    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        ...
    };

    // Create the rewarded ad data
    RewardData rewardData = new RewardData("YOUR_USER_ID", "YOUR_REWARD");

    rewardedVideoAd.loadAd(
            rewardedVideoAd.buildLoadAdConfig()
                    .withAdListener(rewardedVideoAdListener)
                    .withRewardData(rewardData)
                    .build());
}

หากต้องการให้แอพของคุณได้รับการแจ้งเตือนว่ารางวัลได้รับการตรวจสอบความถูกต้องแล้วหรือไม่ คุณจะต้องใช้อินเทอร์เฟซ S2SRewardedVideoAdListener ซึ่งรวมถึงเหตุการณ์ทั้งหมดที่ระบุไว้ข้างต้นในอินเทอร์เฟซ RewardedVideoAdListener และเหตุการณ์เพิ่มเติมอีก 2 เหตุการณ์ รายการต่อไปนี้สามารถใช้ร่วมกับเหตุการณ์ที่มีการกล่าวถึงในข้างต้น

@Override
public void onRewardServerSuccess() {
    // Rewarded video ad validated
}

@Override
public void onRewardServerFailed() {
    // Rewarded video ad not validated or no response from server  
}  

โปรดทราบว่าการเรียกกลับการตรวจสอบความถูกต้องของเซิร์ฟเวอร์อาจเกิดขึ้นหลังจากที่ผู้ใช้ข้ามการ์ดต่อท้าย คุณต้องไม่ยกเลิกการจัดสรรอ็อบเจ็กต์ของวิดีโอที่มีรางวัลหลังชมจบจนกว่าหนึ่งในการเรียกกลับเหล่านี้จะมาถึง

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