Cargando varios videos de AdMob
Para fines de demostración, la aplicación tiene una actividad que simplemente ofrece lo siguiente:
Haces clic en un botón, ver un video recompensado y te recompensa con lo que sea.
- ¿Cuál es la mejor manera de soportar apis de Google Maps (v1 y v2)?
- Android: recibe todas las notificaciones por código
- Detección de frecuencia / tono para maniquíes
- Utilice la función PHP openssl_verify () para verificar Firma y datos creados por Android Client APP
- Cómo configurar el color de resaltado para el elemento ListView?
El problema
¿Cómo puedo cargar los videos? Por lo que he visto, solo puedes llamar mAd.loadAd()
una vez. Hay 3 videos, cada uno con su propia identificación de la UNIDAD. Cada bloque de anuncios puede tener su propio oyente, pero sólo se carga un video, por lo que no importa …
Al intentar cargar varios vídeos
Por ejemplo:
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());
Sólo se obtiene el último video cargado y esto en el registro:
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 }
Gracias por tu ayuda
Edit: Está claro que estoy pensando en este problema mal. Tengo 5 + zonas publicitarias que cada uno reproducirá un video recompensado y dará una recompensa diferente (por ejemplo, uno da monedas, uno da un nivel hacia arriba, y así sucesivamente ..). No hay ninguna razón para cargar 5 videos. Debo cargar uno en onCreate()
, por lo que está listo cuando sea necesario, a continuación, cargarlo de nuevo después de que el artículo es recompensado por lo que está listo para la próxima vez.
Así que la pregunta sigue siendo, si sólo hay un video, y por lo tanto una zona de anuncios, cargando onCreate()
entonces ¿cómo puedo seguir qué recompensa dar?
- Android Cómo calcular el uso de la red de paquetes / datos
- ¿Cómo obfuscate el proyecto con Dagger 2.0 usando Proguard?
- ¿Cuál es la mejor manera de compartir datos entre actividades?
- Archivo de clase para java.nio.file.Path no encontrado
- Selección de elementos de una matriz
- Cómo cambiar de HttpClient a HttpUrlConnection
- Cómo convertir un objeto Java en un JSONObject?
- Obtener la dirección IP del equipo en un proyecto de Android utilizando java
Aquí hay una solución sencilla …
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(); } }
Constantes.java
public class Constants { public static String currentAd = ""; }
Mostrando el anuncio después de hacer clic en el botón
rewardButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Constants.currentAd = "REWARD1"; dismiss(); ((MainActivity) getActivity()).showRewardedVideo(); } });
REWARDED_VIDEO_UNIT_ID es un bloque de anuncios para vídeos recompensados en AdMob … elimine el resto. No hay necesidad de otras unidades, usted puede seguir lo que usted tiene gusto en el oyente.
Otras soluciones sencillas …
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(); } }
- Cómo solucionar el error: "!!! ¡TRANSACCIÓN DE BINDER FALLADA !!! "En android 4.4
- Uso del caché en ExoPlayer