Conseils d’intégration du SDK Audience Network pour Android

Voici quelques bonnes pratiques concernant l’intégration à suivre par les développeurs pour l’implémentation sur Android. Ces conseils de codage et ces scénarios aideront votre équipe à mieux comprendre notre SDK Audience Network, à rendre la procédure d’intégration plus efficace et à maintenir votre solution à niveau après le lancement.

Conditions requises

Assurez-vous d’avoir terminé l’un de ces exemples :

Problème : plantages engendrés par l’appel de loadAd à plusieurs reprises.

Recommandé

Déconseillé


Recommandé :

Conseil 1 : renouvelez un appel de loadAd uniquement lorsque la publicité a été fermée ou lorsqu’une erreur intervient lors du chargement de la publicité, sauf dans le cas des bandeaux publicitaires.

Même si vous êtes notifié d’une fermeture de la publicité ou d’une erreur du rappel, assurez-vous de disposer du nombre maximum de nouvelles tentatives afin d’éviter de retenter l’appel indéfiniment. onError(Ad, AdError) sera appelé quelle que soit la cause de l’échec de chargement de la publicité. Par exemple, en cas d’« Absence de couverture Internet », le chargement d’une publicité est censé s’arrêter lorsque le nombre maximum de nouvelles tentatives est atteint.

Dans le SDK Audience Network, prenez vos précautions lorsque vous appelez loadAd pour tout type de publicité, hormis les bandeaux publicitaires. N’appelez jamais loadAd lors de l’affichage d’une publicité. Nous vous recommandons d’implémenter AdListener afin d’être notifié lorsqu’une publicité est fermée, s’achève ou rencontre des erreurs, conditions qui vous permettent de procéder légitimement à un nouvel appel loadAd et n’entraînent pas de problèmes.

Exemple 1 : appel de loadAd dans un rappel 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());
    ...
}

Exemple 2 : appel de loadAd dans un rappel onError pour une 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());
    ...
}

Conseil 2 : une instance de publicité n’est pas un gestionnaire de publicités. Vous êtes censés instancier une nouvelle instance chaque fois que vous devez « recharger » une publicité pour les publicités et les bandeaux publicitaires natifs.

Exemple :

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

Déconseillé :

Mise en garde 1 : n’utilisez jamais loadAd dans certains rappels Android, comme onResume() ou onStart(), qui peuvent entraîner la répétition incessante de l’appel de loadAd sans supprimer ni mettre fin à la dernière publicité en mémoire.


Exemple :

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

Mise en garde 2 : évitez d’appeler loadAd indéfiniment dans un rappel onError. Vous trouverez ci-dessous un exemple de ce qu’il ne faut jamais faire. Par exemple, en cas d’« Absence de couverture Internet », loadAd sera appelé indéfiniment, ce qui entraînera le plantage de votre application.


Exemple :

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

Étapes suivantes

Ressources supplémentaires

Guide de démarrage

Guide technique pour démarrer avec Audience Network

Référence concernant l’API

Référence concernant le SDK Facebook pour iOS