เคล็ดลับการผสานการทำงาน SDK ของ Audience Network บน Android

ต่อไปนี้เป็นหลักปฏิบัติที่ดีที่สุดของการผสานการทำงานบางส่วนเพื่อนำไปใช้สำหรับผู้พัฒนาบน Android เคล็ดลับและสถานการณ์การเขียนโค้ดเหล่านี้จะช่วยให้ทีมของคุณเข้าใจ SDK ของ Audience Network ของเราได้ดียิ่งขึ้น ดำเนินการผสานการทำงานได้อย่างมีประสิทธิภาพมากขึ้น และอัพเดตโซลูชั่นของคุณให้ทันสมัยอยู่เสมอหลังจากเริ่มใช้งาน

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

อย่าลืมดำเนินการกับตัวอย่างเหล่านี้จนเสร็จสิ้น:

ปัญหา: ข้อขัดข้องที่เกิดจากการเรียกใช้คำสั่ง loadAd หลายครั้ง

หลักปฏิบัติที่ดี

หลักปฏิบัติที่ไม่ดี


หลักปฏิบัติที่ดี:

เคล็ดลับที่ 1: เรียกใช้คำสั่ง loadAd อีกครั้งเฉพาะเมื่อโฆษณาถูกปิดกลางคันหรือเกิดข้อผิดพลาดในการโหลดโฆษณาเท่านั้น ยกเว้นในกรณีของโฆษณาแบบแบนเนอร์

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

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

ตัวอย่างที่ 1: เรียกใช้คำสั่ง loadAd ในการเรียกกลับ onInterstitialDismissed

private InterstitialAd mInterstitialAd;
private static final MAX_NUMBER_OF_RETRIES = 3;
private boolean shouldLoadAd = true;
private int retryCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onCreate 
    super.onCreate(savedInstanceState);
    ...
    mInterstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID");
    InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {
        ...
        @Override
        public void onInterstitialDismissed(Ad ad) {
            // Interstitial dismissed callback
            if (shouldLoadAd) {
                /* Change shouldLoadAd value to false, 
                    or a new interstitial ad will show immediately 
                    when previous interstitial ad gets dismissed. */
                shouldLoadAd = false;
                mInterstitialAd.loadAd();
            }
        }
        
        @Override
        public void onError(Ad ad, AdError adError) {
            // Ad error callback
            // Stop retrying when it reaches to MAX_NUMBER_OF_RETRIES
            if(retryCount < MainActivity.MAX_NUMBER_OF_RETRIES) {
                retryCount += 1;
                mInterstitialAd.loadAd();
            }
        }
        ...
    };
    mInterstitialAd.loadAd(
            mInterstitialAd.buildLoadAdConfig()
                    .withAdListener(interstitialAdListener)
                    .build());
    ...
}

ตัวอย่างที่ 2: เรียกใช้คำสั่ง loadAd ในการเรียกกลับ onError สำหรับ NativeAd

private static final MAX_NUMBER_OF_RETRIES = 3;
private NativeAd mNativeAd;
private int retryCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID");
    NativeAdListener nativeAdListener = new AdListener() {
        ...
        @Override
        public void onError(Ad ad, AdError error) {
            // Ad error callback
            // Stop retrying when it reaches to MAX_NUMBER_OF_RETRIES
            if (retryCount < MainActivity.MAX_NUMBER_OF_RETRIES) {
                retryCount += 1;
                mNativeAd.loadAd();
            }
        }
        ...
    };
    mNativeAd.loadAd(
            mNativeAd.buildLoadAdConfig()
                    .withAdListener(nativeAdListener)
                    .build());
    ...
}

เคล็ดลับที่ 2: อินสแตนซ์โฆษณาไม่ใช่ตัวจัดการโฆษณา คุณควรจะสร้างอินสแตนซ์ใหม่ทุกครั้งที่คุณต้องการ "โหลดซ้ำ" โฆษณาสำหรับโฆษณาแบบเนทีฟและโฆษณาแบบแบนเนอร์

ตัวอย่าง:

private Button showNativeAdButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    showNativeAdButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Create a native ad request with a placement ID
            nativeAd = new NativeAd(NativeAdSampleActivity.this, "YOUR_PLACEMENT_ID");

            // Create a listener to get notified when the ad was loaded.
            NativeAdListener nativeAdListener = new AdListener() {
                ...
            }

            // Initiate a request to load an ad.
            nativeAd.loadAd(
                    nativeAd.buildLoadAdConfig()
                            .withAdListener(nativeAdListener)
                            .build());
        }
    });
    ...
}

หลักปฏิบัติที่ไม่ดี:

เคล็ดลับที่ 1: ห้ามใช้คำสั่ง loadAd ในการเรียกกลับสำหรับ Android บางรายการ เช่นการเรียกกลับ onResume() หรือ onStart() ซึ่งอาจส่งผลให้มีการเรียกใช้คำสั่ง loadAd ซ้ำๆ โดยไม่ยกเลิกหรือปล่อยโฆษณาล่าสุดในหน่วยความจำ


ตัวอย่าง:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID");
    ...
}

@Override
protected void onResume() {
    super.onResume();
    ...
    // DON'T DO THIS!
    mNativeAd.loadAd(
            mNativeAd.buildLoadAdConfig()
                    .withAdListener(NativeAdSampleActivity.this)
                    .build());
}

เคล็ดลับที่ 2: ระมัดระวังไม่ให้เกิดการเรียกใช้คำสั่ง loadAd อย่างไม่รู้จบในการเรียกกลับ onError ด้านล่างนี้เป็นตัวอย่างของสิ่งที่คุณไม่ควรทำ ในกรณีที่ "ไม่มีอินเทอร์เน็ต" ระบบจะเรียกใช้คำสั่ง loadAd ซ้ำๆ ซึ่งจะทำให้แอพของคุณขัดข้องในที่สุด


ตัวอย่าง:

private NativeAd mNativeAd;
private boolean shouldRetry = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID");
    NativeAdListener nativeAdListener = new AdListener() {
        ...
        @Override
        public void onError(Ad ad, AdError error) {
            // Ad error callback
            // Remember to change shouldRetry to false, or DON'T implement like this! 
            if (shouldRetry) {
                mNativeAd.loadAd();
            }
        }
        ...
    };
    mNativeAd.loadAd(
            mNativeAd.buildLoadAdConfig()
                    .withAdListener(NativeAdSampleActivity.this)
                    .build());
    ...
}

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

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

คู่มือการเริ่มต้นใช้งาน

คู่มือเชิงเทคนิคในการเริ่มต้นใช้งาน Audience Network

ข้อมูลอ้างอิงเกี่ยวกับ API

ข้อมูลอ้างอิง Facebook SDK สำหรับ iOS