Видимость баннера AdMob заблокирована для просмотра.ПРОПАЛ

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

Я надеюсь, что это может вам помочь!

Спасибо.