web-dev-qa-db-fra.com

Comment savoir si une annonce AdMob a été chargée

Mon application Andorid fonctionne hors ligne et en ligne. Il affiche des annonces quand il est en mode en ligne. Dans un scénario où il fonctionne en mode hors connexion et où l'utilisateur active la connectivité Internet, je souhaite savoir si l'annonce est déjà chargée. Sinon, je chargerais une nouvelle annonce. J'ai regardé l'API AdMob (classe AdView), mais je n'ai rien trouvé qui fasse cela. 

Voici l'implémentation de ma AdListener selon la réponse de @Hounshell. Mais aucune des méthodes mises en œuvre ici ne sont exécutées.

        adView.setAdListener(new AdListener() {

        @Override
        public void onReceiveAd(Ad arg0) {
            Toast.makeText(act, "Ad received",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onPresentScreen(Ad arg0) {
        }

        @Override
        public void onLeaveApplication(Ad arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
            Toast.makeText(act, "Failed to receive Ad",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onDismissScreen(Ad arg0) {
            // TODO Auto-generated method stub

        }
    });

Et une partie de main.xml qui couvre le AdView

<FrameLayout 
                    Android:layout_width="fill_parent"
                    Android:layout_height="50dp"
                    >
                <com.google.ads.AdView
                    xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
                    Android:id="@+id/adView"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent"
                    ads:adSize="BANNER"
                    ads:adUnitId="xxxxxxxxxxxxxxxx"
                    ads:loadAdOnCreate="true" />
                </FrameLayout>
22
Balkrishna Rawool

De https://developers.google.com/mobile-ads-sdk/docs/Android/intermediate#adlistener

AdView.setAdListener(new AdListener() {
      // Implement AdListener
    });

Votre onReceiveAd() AdListener sera appelé lorsqu'une annonce est disponible, onFailedToReceiveAd() sera appelé lorsqu'une annonce n'est pas disponible avec un code expliquant pourquoi (y compris le réseau n'est pas disponible et aucun remplissage)

Mettre à jour:

Même réponse de base, nouvelle URL: https://developers.google.com/admob/Android/banner?hl=fr

26
Hounshell

Simplement...!!!

final AdView mAdView = (AdView) findViewById(R.id.adView);
        mAdView.setVisibility(View.GONE);
    mAdView.setAdListener(new AdListener() {
        private void showToast(String message) {
            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAdLoaded() {
            showToast("Ad loaded.");
            if (mAdView.getVisibility() == View.GONE) {
                mAdView.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            showToast(String.format("Ad failed to load with error code %d.", errorCode));
        }

        @Override
        public void onAdOpened() {
            showToast("Ad opened.");
        }

        @Override
        public void onAdClosed() {
            showToast("Ad closed.");
        }

        @Override
        public void onAdLeftApplication() {
            showToast("Ad left application.");
        }
    });


    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
3
Waqar Vicky

J'ai résolu ce problème avec un peu d'une solution de contournement. Pour la première fois, j'ai vérifié si AdView avait une balise vide ou non.

if (adView.getTag() != null && adView.getTag() instanceof Boolean && (Boolean) adView.getTag()) {
        //Adview is already loaded
    }

Si adView a un objet de balise Boolean et que cela est vrai, ad est déjà chargé, sinon chargez-le et définissez le tag - 

adView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                adView.setTag(true); // Set tag true if adView is loaded
            }

            @Override
            public void onAdFailedToLoad(int i) {
                super.onAdFailedToLoad(i);
                adView.setTag(false); // Set tag false if loading failed
            }
        });
1
mjosh