#android #libgdx #admob
#Android #libgdx #admob
Вопрос:
У меня эта проблема уже несколько недель. Я, наконец, сузил поиск до этого: видимость AdView, похоже, застряла на View.GONE
, независимо от того, как сильно я пытаюсь установить ее на View.VISIBLE
.
Вот мой код :
public class AndroidLauncher extends AndroidApplication {
AdView bannerView;
RelativeLayout layout;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppLovinSdk.initializeSdk(this);
AppLovinPrivacySettings.setHasUserConsent(false, this);
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713"); // test APP ID
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
game = new GameClass(this);
// // Create Layout that will call both Libgdx View and AdMod View
layout = new RelativeLayout(this);
// InitializeCommonRessources Libgdx View
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
//
View gameView = initializeForView(game, config);
layout.addView(gameView);
// Tell Android to use this Layout
setContentView(layout);
setupBanner();
}
@Override
public void setupBanner() {
SetupAdMobBanner();
}
public void SetupAdMobBanner() {
System.out.println("Setup AdMob BANNER");
bannerView = new AdView(this);
bannerView.setVisibility(View.VISIBLE); // These are my desperate attempts to make the banner visible
System.out.println("visibility == " bannerView.getVisibility()); // Always prints "visibility == 8" which is the value for View.GONE (View.VISIBLE is 0)
bannerView.setAdListener(new AdListener() {
@Override public void onAdOpened() {
System.out.println("BANNER AD OPENED");
Ressources.incrementBannerClicks();
}
@Override public void onAdClosed() {
System.out.println("BANNER AD CLOSED");
}
@Override public void onAdLeftApplication() {
System.out.println("BANNER LEFT APP");
}
@Override public void onAdFailedToLoad(int var1) {
System.out.println("BANNER FAILED TO LOAD : " var1);
destroyAdMobBanner();
SetupAdMobBanner();
}
@Override public void onAdLoaded() {
System.out.println("BANNER LOADED");
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
}
@Override public void onAdImpression() {
System.out.println("BANNER IMPRESSION");
}
});
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
bannerView.setAdSize(AdSize.SMART_BANNER);
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
bannerView.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); // Test banners
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_TOP);
adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
layout.addView(bannerView, adParams);
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
loadAdMobBanner();
bannerView.setVisibility(View.VISIBLE);
System.out.println("visibility == " bannerView.getVisibility());
}
public void loadAdMobBanner() {
System.out.println("BANNER loadAd(adRequest)");
AdRequest adRequest = new AdRequest.Builder().addTestDevice("36429449DBD95B918CFD96E610995AE6").build(); // Test ads for my Honor 7x
bannerView.loadAd(adRequest);
}
public void destroyAdMobBanner() {
if (bannerView == null) return;
System.out.println("Destroying BANNER");
layout.removeView(bannerView);
bannerView.destroy();
bannerView = null;
}
}
Как вы можете видеть, я отчаянно пытаюсь установить видимость на VISIBLE, но она всегда печатается visibility == 8
сразу после (8 — значение для GONE, VISIBLE равно 0).
Самое странное, что иногда баннер действительно появляется. Он может работать день или два, а затем внезапно перестать работать день или два, баннер не будет отображаться, даже если AdListener сообщает, что он успешно загружен, и я ничего не делаю.
Проблема возникает на физическом устройстве, Honor 7X, как с живой, так и с тестовой рекламой.
Ответ №1:
Вы должны добавить тестовое устройство в AdView. Вы найдете идентификатор тестового устройства в logcat. Если вы не добавите тестовое устройство во время разработки и не будете нажимать на рекламу много раз, реклама перестанет работать для этого идентификатора объявления.
Комментарии:
1. Я добавил тестовое устройство. В объявлениях действительно написано «Тестовое объявление» при их появлении. И, как я уже сказал, даже тестовые объявления (с помощью тестового рекламного блока) не работают должным образом.
Ответ №2:
Добавьте только этот код, не устанавливающий видимость
попробуйте этот код
private AdView mAdView;
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
// Check the LogCat to get your test device ID
.addTestDevice("36429449DBD95B918CFD96E610995AE6")
.build();
mAdView.loadAd(adRequest);
@Override
protected void onResume() {
super.onResume();
if (mAdView != null) {
mAdView.resume();
}
}
@Override
public void onDestroy() {
if (mAdView != null) {
mAdView.destroy();
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mAdView != null) {
mAdView.pause();
}
super.onPause();
}
Я надеюсь, что это может вам помочь!
Спасибо.