Полноэкранная реклама в ViewPager

У меня есть ViewPager со слайдами. После каждого 5-го слайда я хочу показывать полноэкранную рекламу. Я использую Flurry для рекламы. Я успешно добавил рекламу, и она работает.

Проблема: реклама загружается слишком медленно. Когда пользователь переключается на 5-й слайд, реклама появляется примерно через 3-4 секунды.

Мой подход:

  1. Я попытался поместить код загрузки в метод onStart для более быстрой загрузки, но тогда реклама больше не появляется.
  2. Каждый раз, когда вьюпейджер меняет слайд, фрагмент, содержащий рекламу, уничтожается, а затем на новом слайде ему приходится заново подключаться к Flurry. Я попытался поместить соединение в основное действие, которое запускает приложение, чтобы подключиться раньше, но тогда соединение не видно во фрагменте.

    public class CardFragment extends Fragment {
    
        private final String kLogTag = "FlurryAdServingAPI";
    
        Card mCard;
        TextView mTextView;
        private ViewPager mViewPager;
        private MenuItem mAddToFavorite;
        private AudioPlayer mPlayer = new AudioPlayer();
    
        private FlurryAdInterstitial mFlurryAdInterstitial = null;
        private String mAdSpaceName = "12thcard";
        private FrameLayout mAdLayout;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
            mCard = (Card) getArguments().getSerializable(EXTRA_CARD_ID);
            GameManager.get(getActivity()).changeCardTimesDisplayed(mCard);
            mViewPager = (ViewPager) getActivity().findViewById(R.id.viewPager);
            mFlurryAdInterstitial = new FlurryAdInterstitial(getActivity(), mAdSpaceName);
            mFlurryAdInterstitial.setListener(interstitialAdListener);
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_card, parent, false);
            mAdLayout = (FrameLayout)v.findViewById(R.id.bannerframe);
            if(mViewPager.getCurrentItem()%5 == 0) {
                Log.i("FluryTag", "Show ad");
                FlurryAds.fetchAd(getActivity(), mAdSpaceName, mAdLayout, FlurryAdSize.FULLSCREEN);
                FlurryAds.displayAd(getActivity(), mAdSpaceName, mAdLayout);
            }
            mTextView = (TextView) v.findViewById(R.id.questionText);
            mTextView.setText(mCard.getText());
            return v;
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            mPlayer.stop();
        }
    
        public void onStart() {
            super.onStart();
            try {
                Log.d(kLogTag, "onStartSession:  "+ AppConstants.FLURRY_API_KEY);
                FlurryAgent.onStartSession(getActivity(), AppConstants.FLURRY_API_KEY);
                mFlurryAdInterstitial.fetchAd();
            } catch (Exception e) {
                Log.e(kLogTag, e.getMessage());
            }
        }
        public void onStop() {
            super.onStop();
            FlurryAgent.onEndSession(getActivity());
            mFlurryAdInterstitial.destroy();
            Log.d(kLogTag, "onEndSession");
        }
    }
    

    FlurryAdinterstitialListener

    FlurryAdInterstitialListener interstitialAdListener = new FlurryAdInterstitialListener() {
    
            @Override
            public void onFetched(FlurryAdInterstitial adInterstitial) {
                Log.d(kLogTag, "onFetched( " + adInterstitial + " )");
                adInterstitial.displayAd();
            }
            @Override
            public void onError(FlurryAdInterstitial adInterstitial, FlurryAdErrorType adErrorType, int errorCode) {
                Log.d(kLogTag, "onError( " + adInterstitial + " )");
                Log.d(kLogTag, "onError adErrorType( " + adErrorType + " )");
                Log.d(kLogTag, "onError errorCode( " + errorCode + " )");
                adInterstitial.destroy();
            }
            //..
            //the remainder of listener callbacks
        };
    

Идеи: я иду не в том направлении? Я имею в виду, что природа ViewPager заключается в создании и удалении фрагментов, и если каждому фрагменту требуется время для подключения к службе, извлечения рекламы и последующего отображения. Возможно, мне не стоило показывать рекламу в ViewPager.


person max    schedule 31.01.2015    source источник


Ответы (1)


Если кому интересно. Я не смог решить проблему с Flurry. В конце концов, я переключился на AdMob, чтобы решить проблему с медленной загрузкой рекламы.

person max    schedule 27.02.2015
comment
Я хочу сделать то же самое. Не могли бы вы поделиться своим кодом, как вы показывали рекламу после 5 свайпов в viewpager. - person Faisal Shaikh; 23.01.2018