Как показывать промежуточную рекламу admob при нажатии на элемент listview?

#android #android-fragments #admob

#Android #android-фрагменты #admob

Вопрос:

У меня есть фрагмент, содержащий listview, я хочу показывать промежуточную рекламу, когда пользователь нажимает на элемент listview, я попробовал следующий код, но он не отображается :

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

......

mInterstitialAd = new InterstitialAd(mContext);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    mInterstitialAd.loadAd(new AdRequest.Builder().build());
                }

            }
        });

......        

return rootView;
    }
  

Ответ №1:

Настройте новый класс, который устанавливает, загружает и показывает статические методы interstatialAd, как показано ниже:

 public class AdSetup {
    // Application context returned by function --> Application.get()

    public static String TesttingDeviceID = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
    final static InterstitialAd mInterstitialAd = new InterstitialAd(Application.get());  

    public static void setInterstitial() {
        try {
            if (mInterstitialAd.getAdUnitId() == null) {
                mInterstitialAd.setAdUnitId(Application.get().getString(R.string.interstitialAd));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void loadInterstatial() {
        try {
            setInterstitial();

            AdRequest adRequestInter = new AdRequest.Builder().build();

            mInterstitialAd.setAdListener(new AdListener() {
                @Override
                public void onAdLoaded() {
                    Log.e("mInterstetial onloaded", "onloaded isLoaded"   mInterstitialAd.isLoaded());
                }

                @Override
                public void onAdFailedToLoad(int i) {
                    Log.e("mInterstetial onloaded", "onloaded onAdFailedToLoad");
                }

                @Override
                public void onAdOpened() {
//                    super.onAdOpened();
                }

                @Override
                public void onAdClosed() {
//                    super.onAdClosed();
                }

                @Override
                public void onAdClicked() {
//                    super.onAdClicked();
                }

            });
            mInterstitialAd.loadAd(adRequestInter);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static void showInterstatial() {
        try {
            Log.e("mInterstetial show ", "isLoaded"   mInterstitialAd.isLoaded());
            if (mInterstitialAd.isLoaded() amp;amp; mInterstitialAd.getAdUnitId() != null) {
                mInterstitialAd.show();
            } else {

                loadInterstatial();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
  

Как вызвать эти методы при нажатии на элемент списка или onCreate () нового действия, чтобы соответствовать политике межпространственной рекламы:

   AdSetup.showInterstatial();  // Show ad if already loaded else load Ad
  AdSetup.loadInterstatial(); // Load new ad   
  

Обязательно следуйте правилам, перечисленным в приведенных ниже ссылках:

Запрещенные промежуточные реализации

Загрузка или выход приложения Не размещайте промежуточную рекламу при загрузке приложения и при выходе из приложений, поскольку промежуточные объявления должны размещаться только между страницами содержимого приложения. Объявления не должны размещаться в приложениях, которые выполняются в фоновом режиме устройства или вне среды приложения. Пользователю должно быть ясно, с каким приложением связано объявление или в каком оно реализовано.

Рекомендуемые промежуточные реализации

Кроме того, добавьте класс приложения:

 public class Application extends android.app.Application {
    //    public static DeviceName.DeviceInfo deviceInfo;
    private static Application _instance;


    @Override
    public void onCreate() {
        super.onCreate();
            _instance = this;

    }

//return the App context
    public static Application get() {
        return _instance;
    }
}
  

Также объявите Application класс в вашем AndroidManifest.xml , как вы можете видеть ниже в первой строке:

  <application
            android:name=".Application"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:largeHeap="true"
            android:allowBackup="false"
            android:supportsRtl="true"
            android:networkSecurityConfig="@xml/network_security_config"
            android:theme="@style/AppTheme">
  

Комментарии:

1. спасибо, я попробовал ваше решение, оно показывает мне ошибку, не удается разрешить метод ‘get ()’.

2. Я обновил ответ с помощью Appliaction класса и его объявления в manifest . Application.get() определенный в приведенном выше методе класса возвращает Application контекст. Как это вызывается при запуске приложения. Обязательно добавьте тестовый идентификатор interstatialAd для отладки, поскольку вы можете не видеть живую рекламу в приложении debug.

3. хорошо, я сделал все это, но все еще не показываю, я думаю, проблема здесь не в том, как объявляются объявления, а в том, где поместить метод load and show во фрагмент, потому что он отлично работает при других действиях, также, когда я проверил журнал, я обнаружил эту ошибку: функциональность инициализации Google Mobile Ads SDK недоступна для этого сеанса. Запросы на рекламу могут быть сделаны в любое время.

4. Существует вероятность того, что реклама может еще не загружаться при каждой попытке показа. Что такое error code , когда реклама не загружается? Вы можете использовать следующие методы в onCreateView () или в onResume() методе Fragment -> AdSetup.showInterstatial(); AdSetup.loadInterstatial(); Метод onCreateView() будет вызываться только один раз при создании фрагмента.

5. находятся ли ваши фрагменты внутри страницы просмотра?

Ответ №2:

Я только что реализовал это в своем коде. Это работает. В примере, который вы привели, я не видел, реализовали ли вы AdListener после AdRequest.Конструктор. Если нет, вот пример этого:

 ExampleInterstitial.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            ExampleInterstitial.loadAd(new AdRequest.Builder().build());

        }

    });
  

Далее, в вашем примере оказалось, что у вас есть только промежуточная реклама для показа onItemClick, но есть ли у вас намерение перейти к новому действию, также установленному там? Я этого не видел. Ознакомьтесь с моим кодом ниже. Я устанавливаю намерение начать новое действие, а затем показываю добавление после. Просто мысль, потому что это работает для меня. Удачи!

         @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

            Intent intent;
            intent = new Intent(getActivity(), ExampleActivity.class);
            startActivity(intent);


                if (ExampleInterstitial.isLoaded()) {
                    ExampleInterstitial.show();
                }

                else {
                    Log.d("TAG", "The interstitial wasn't loaded yet.");
                }
            }

    });