2016-10-18 3 views
15

Для демонстрационных целей, приложение имеет один вид деятельности, который просто предлагает это: enter image description hereЗагрузка нескольких 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 
} 

Спасибо за вашу помощь

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

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

ответ

9

Вот простое решение ...

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 ... удалить остальные. Нет необходимости в других устройствах, вы можете отслеживать все, что вам нравится в слушателе.

+1

Не имеет смысла, если для всех видео существует только один идентификатор устройства. Не могли бы вы это доказать? – YTerle

0

Другой простой soluction ...

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

    } 

} 
Смежные вопросы