نصائح حول دمج مجموعة Audience Network SDK في نظام Android

فيما يلي بعض أفضل ممارسات الدمج لعمليات التنفيذ الخاصة بالمطوّر في نظام Android. وستساعد نصائح وسيناريوهات كتابة التعليمات البرمجية فريقك على فهم مجموعة Audience Network SDK الخاصة بنا بشكل أفضل مما يجعل عملية الدمج أكثر فاعلية ويحافظ على تحديث الحل بعد التشغيل.

المتطلبات الأساسية

تأكد من إكمال أحد الأمثلة التالية:

المشكلة: الأعطال الناجمة عن استدعاء loadAd عدة مرات.

الممارسات الصحيحة

الممارسات الخاطئة


الممارسات الصحيحة:

النصيحة الأولى: لا تستدعِ 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());
    ...
}

المثال الثاني: استدعاء 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());
    ...
}

النصيحة الثانية: مثيل الإعلان لا يمثل مدير الإعلان. ومن المفترض أن تنشئ مثيلاً جديدًا عندما تحتاج إلى "إعادة تحميل" إعلان للإعلانات الأصلية وإعلانات البانر.

المثال:

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());
        }
    });
    ...
}

الممارسات الخاطئة:

النصيحة الأولى: لا تستخدم 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());
}

النصيحة الثانية: النصيحة الثانية: احرص على عدم استدعاء 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