Советы по интеграции SDK Audience Network в Android

Ниже приведены некоторые рекомендации для разработчиков по интеграции SDK в Android. Они помогут вашей команде разобраться в особенностях SDK Audience Network, повысить эффективность процесса интеграции и поддерживать решение в актуальном состоянии после запуска.

Предварительные требования

Необходимо ознакомиться с одним из следующих примеров:

Проблема: сбои из-за многократного вызова loadAd.

Рекомендуется

Не рекомендуется


Рекомендуется:

Совет 1. Вызывайте loadAd повторно, только если объявление было отклонено или при его загрузке произошла ошибка (это не касается баннерной рекламы).

Даже если в обратном вызове сообщается об отклонении объявления или ошибке, необходимо задать максимальное количество попыток, чтобы они не повторялись бесконечно. Метод onError(Ad, AdError) вызывается независимо от того, по какой причине произошел сбой загрузки. Например, при отсутствии подключения к Интернету загрузка объявления должна прекращаться по достижении максимального количества попыток.

В SDK Audience Network метод 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. Совет 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