web-dev-qa-db-fra.com

AdMob RewardedVideoAd.loadAd renvoie toujours "échec du chargement des annonces, code d'erreur: 0".

J'utilise firebase-ads: 9.2.0 avec le niveau 24 de l'API.

Et le module aar-unity-ads est importé en ajoutant compile (nom: 'unity-ads', ext: 'aar') à mon build.gradle.

Tout se passe bien si je choisis d'utiliser directement l'API UnityAds.

Mais lorsque j'essaie d'intégrer des annonces de type unit avec AdMob comme ceci:

    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance( this );

    mRewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            logger.debug("onRewardedVideoAdLoaded");
        }

        @Override
        public void onRewardedVideoAdOpened() {
            logger.debug("onRewardedVideoAdOpened");
        }

        @Override
        public void onRewardedVideoStarted() {
            logger.debug("onRewardedVideoStarted");
        }

        @Override
        public void onRewardedVideoAdClosed() {
            logger.debug("onRewardedVideoAdClosed");
        }

        @Override
        public void onRewarded(RewardItem rewardItem) {
            logger.debug("onRewarded");
        }

        @Override
        public void onRewardedVideoAdLeftApplication() {
            logger.debug("onRewardedVideoAdLeftApplication");
        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {
            Toast.makeText( 
                getApplicationContext(), 
                "onRewardedVideoAdFailedToLoad", 
                Toast.LENGTH_SHORT ).show();
        }
    });

    AdRequest adRewardRequest = new AdRequest.Builder()
        .addTestDevice("E921B48960E16DA3ABD13C4AFB7052A4")
        .build();

    mRewardedVideoAd.loadAd( 
        getResources().getString(R.string.reward_ad_unit_id), 
        adRewardRequest );

Ça revient toujours

Il y avait un problème pour obtenir une réponse publicitaire. Code d'erreur: 0
Échec du chargement de l'annonce: 0.

Y a-t-il quelque chose que j'ai mal fait?

Ou j'ai juste manqué quelques étapes?

Voici ma capture d'écran de la page AdMob:

 AdMob page

8
Kimi Chiu

Ok, j'ai trouvé des solutions.

La première chose à faire est que je n'ai pas inclus d'adaptateurs dans mon projet.

Je dois télécharger les adpaters ici: Cartes réseau tierces

Et placez-le dans le dossier libs . Ces adaptateurs ne sont pas inclus dans le SDK (si vous le téléchargez depuis github).

Deuxièmement, je dois supprimer cette ligne de mon code.

.addTestDevice("E921B48960E16DA3ABD13C4AFB7052A4")

Il semble que si AdMob considère cet appareil comme un appareil de test, aucune annonce vidéo ne sera téléchargée (du moins dans mon cas).

La même chose se produit si je choisis d'utiliser l'AVD, ils obligent à diffuser des annonces test sur ces émulateurs.

Je change donc pour Genymotion, supprime addTestDevice () et ensuite cela fonctionne.

6
Kimi Chiu

Cela se produit généralement pour les annonces nouvellement créées, alors attendez une heure et réessayer.

public static final int ERROR_CODE_INTERNAL_ERROR

Quelque chose s'est passé en interne; Par exemple, une réponse non valide a été reçue du serveur de publicité.

Valeur constante: 0

Source: Développeurs Google

4
PSN

J'utilise des annonces interstitielles, mais je pense que c'est le même problème. Google donne parfois du code qui ne fonctionne pas, ne me demandez pas pourquoi.

Ajoutez ceci après votre méthode mRewardedVideoAd.loadAd():

mRewardedVideoAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            //your code when Ad is loaded
            //you can show your ad immediately, but I don't suggest it
            if (mRewardedVideoAd.isLoaded()) {
                mRewardedVideoAd.show(); //this shows ad immediately
            }
        }

        @Override
        public void onAdClosed() {
        }
    });

Ou vous pouvez définir AdListener, ne le montrez pas immédiatement, mais créez plutôt une nouvelle méthode:

public static void displayAd() {
    if (mRewardedVideoAd.isLoaded()) {
        mRewardedVideoAd.show();
    }
}

Et de cette façon, vous pouvez appeler cette méthode à partir de n’importe quelle activité qui affiche l’annonce presque instantanément (car elle était déjà chargée), sans avoir à la recharger.

1
leonz