Dicas de integração do SDK do Audience Network no Android

Veja aqui melhores práticas de integração para implementações de desenvolvedor no Android. Estes cenários e dicas de programação ajudarão a sua equipe a entender melhor o SDK do Audience Network, tornar o processo de integração mais eficiente e manter a sua solução atualizada após o lançamento.

Pré-requisitos

Verifique se você concluiu um destes exemplos:

Problema: falhas causadas por chamar loadAd várias vezes.

Boas práticas

Más práticas


Boas práticas:

Dica 1: só chame loadAd novamente quando o anúncio tiver sido ignorado ou o carregamento do anúncio encontrar um erro, exceto em anúncios em banner.

Mesmo que receba uma notificação de que o anúncio foi ignorado ou que houve um erro no retorno de chamada, você deverá ter um número máximo de tentativas para evitar que elas se repitam indefinidamente. O erro onError(Ad, AdError) será chamado independentemente do motivo da falha no carregamento do anúncio. Por exemplo, no caso do erro "Sem internet", será necessário parar o carregamento do anúncio quando ele atingir o número máximo de tentativas.

No SDK do Audience Network, para qualquer tipo de anúncio exceto anúncios em banner, tenha cuidado ao chamar loadAd. Nunca chame loadAd quando um anúncio estiver em exibição. A melhor prática é implementar AdListener para ser notificado sempre que um anúncio for ignorado, concluído, fechado ou encontrar erros. Isso permite que você chame loadAd legalmente outra vez e não causará problemas.

Exemplo 1: chamar loadAd no retorno de chamada 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());
    ...
}

Exemplo 2: chamar loadAd no retorno de chamada onError para 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());
    ...
}

Dica 2: a instância do anúncio não é um gerenciador de anúncios. Você deve instanciar uma nova instância sempre que precisar “recarregar” um anúncio para anúncios nativos ou anúncios em banner.

Exemplo:

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

Más práticas:

Dica 1: nunca use loadAd em alguns retornos de chamada do Android, como onResume() ou onStart(), pois isso pode fazer com que loadAd seja chamado repetidas vezes sem ignorar ou liberar o último anúncio na memória.


Exemplo:

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

Dica 2: tenha cuidado para não chamar loadAd indefinidamente no retorno de chamada onError. Veja abaixo um exemplo do que você nunca deve fazer. Caso haja um problema do tipo "Sem Internet", loadAd será chamado repetidas vezes, o que acabará causando uma falha no aplicativo.


Exemplo:

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

Próximas etapas

Mais recursos

Guia de introdução

Guia técnico de introdução ao Audience Network

Referência da API

Referência do SDK do Facebook para iOS