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:
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.
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
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.