Загрузка нескольких видео AdMob

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

Вы нажимаете кнопку, просматриваете награжденное видео и получаете вознаграждение.

Проблема

Как загрузить видео? Из того, что я видел, вы можете называть только mAd.loadAd() один раз. Есть 3 видеоролика, каждый со своим идентификатором AD UNIT. Каждый рекламный блок может иметь свой собственный слушатель, но загружается только одно видео, поэтому это не имеет значения...

При попытке загрузить несколько видео

Например:

mAd1.loadAd("AD_UNIT_1", new AdRequest.Builder().build());
mAd2.loadAd("AD_UNIT_2", new AdRequest.Builder().build());
mAd3.loadAd("AD_UNIT_3", new AdRequest.Builder().build());

выводится только последнее загружаемое видео и это в журнале:

W/Ads: Loading already in progress, saving this object for future refreshes.

OnCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAd1 = MobileAds.getRewardedVideoAdInstance(this);
    mAd2 = MobileAds.getRewardedVideoAdInstance(this);
    mAd3 = MobileAds.getRewardedVideoAdInstance(this);

    listeners...

    mAd1.loadAd() etc
}

Спасибо за помощь

Изменить: ясно, что я думаю об этой проблеме неправильно. У меня есть 5+ рекламных зон, каждый из которых будет воспроизводить награжденное видео и давать другую награду (например, один дает монеты, один дает уровень вверх и т.д.). Нет причин загружать 5 видео. Я должен загрузить один в onCreate(), поэтому он готов, когда это необходимо, затем загрузите его снова после того, как товар будет вознагражден, чтобы он был готов в следующий раз.

Итак, вопрос остается, если есть только одно видео и, следовательно, одна рекламная зона, загружаемая onCreate(), то как я могу отслеживать, какую награду дать?

Ответы

Ответ 1

Здесь простое решение...

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAd = MobileAds.getRewardedVideoAdInstance(this);

    mAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {

        @Override
        public void onRewarded(RewardItem rewardItem) {
            switch(Constants.currentAd) {
                case("REWARD1"):
                    //do something
                    Constants.currentAd = "";
                    break;

                case("REWARD2"):
                    //do something
                    Constants.currentAd = "";
                    break;

                case("REWARD3"):
                    //do something
                    Constants.currentAd = "";
                    break;
            }
        }
    });

   mAd.loadAd("REWARDED_VIDEO_UNIT_ID", new AdRequest.Builder().build());
}

public void showRewardedVideo() {
        if (mAd.isLoaded()) {
            mAd.show();
        }
    }

Constants.java

public class Constants {
    public static String currentAd = "";
}

Показывая объявление после нажатия кнопки

rewardButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Constants.currentAd = "REWARD1";
                dismiss();
                ((MainActivity) getActivity()).showRewardedVideo();
            }
        });

REWARDED_VIDEO_UNIT_ID - это один рекламный блок для награжденного видео в AdMob... удалите остальные. Нет необходимости в других устройствах, вы можете отслеживать все, что вам нравится в слушателе.

Ответ 2

Другое простое совпадение...

AbstractRewardVideo.java

public abstract class AbstractRewardVideo {
    private RewardedVideoAd mAd;
    private String adId = "ca-app-pub...";
    private Activity activity;

    abstract protected RewardedVideoAdListener getListener();

    public void init(Activity activity) {
        this.activity = activity;
        mAd = MobileAds.getRewardedVideoAdInstance(activity);
        setAdId(adId);
        loadRewardedVideoAd();
    }

    public Activity getActivity(){
        return this.activity;
    }

    public void loadRewardedVideoAd() {
        mAd.loadAd(adId, new AdRequest.Builder().build());
    }

    public void showVideo(){
        setListener(getListener());
        if (mAd.isLoaded()) {
            mAd.show();
        } else {
            Utils.exibirToast("Don't loaded!");
        }
    }

    public void setAdId(@NonNull String id){
        this.adId = id;
    }

    public void setListener(RewardedVideoAdListener listener){
        mAd.setRewardedVideoAdListener(listener);
    }

}

Reward1.java

public class Reward1 extends AbstractRewardVideo {

    public Reward1(Activity activity) {
        init(activity);
    }

    @Override
    protected RewardedVideoAdListener getListener() {
        return new Listener();
    }

    private class Listener implements RewardedVideoAdListener {
        @Override
        public void onRewarded(RewardItem rewardItem) {
            //Do something...
        }
        public void onRewardedVideoAdLoaded() {}
        public void onRewardedVideoAdOpened() {}
        public void onRewardedVideoStarted() {}
        public void onRewardedVideoAdClosed() { loadRewardedVideoAd(); }
        public void onRewardedVideoAdLeftApplication() {}
        public void onRewardedVideoAdFailedToLoad(int i) {}
    }

}

Reward2.java

public class Reward2 extends AbstractRewardVideo {

    public Reward2(Activity activity) {
        init(activity);
    }

    @Override
    protected RewardedVideoAdListener getListener() {
        return new Listener();
    }

    private class Listener implements RewardedVideoAdListener {
        @Override
        public void onRewarded(RewardItem rewardItem) {
            //Do something...
        }
        public void onRewardedVideoAdLoaded() {}
        public void onRewardedVideoAdOpened() {}
        public void onRewardedVideoStarted() {}
        public void onRewardedVideoAdClosed() { loadRewardedVideoAd(); }
        public void onRewardedVideoAdLeftApplication() {}
        public void onRewardedVideoAdFailedToLoad(int i) {}
    }

}

MainActivity.java

public class MainActivity extends AppCompatActivity{
    Reward1 reward1;
    Reward2 reward2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        reward1 = new Reward1(this);
        reward2 = new Reward1(this);
        ...
        reward1.showVideo();
        ...
        reward2.showVideo();

    }

}

Ответ 3

    MobileAds.initialize ( this, "ca-app-pub-4761500786576152~8215465788" );

    RewardedVideoAd mAd = MobileAds.getRewardedVideoAdInstance(this);
    mAd.setRewardedVideoAdListener(Video_Ad.this);

}

@Override
public void onRewardedVideoAdLoaded() {

}

@Override
public void onRewardedVideoAdOpened() {

}

@Override
public void onRewardedVideoStarted() {

}

@Override
public void onRewardedVideoAdClosed() {

}

@Override
public void onRewarded(RewardItem rewardItem) {

}

@Override
public void onRewardedVideoAdLeftApplication() {

}

@Override
public void onRewardedVideoAdFailedToLoad(int i) {

}

@Override
public void onRewardedVideoCompleted() {

}