Anuncios bonificados

Los anuncios bonificados permiten a los usuarios conseguir recompensas en aplicaciones a cambio de interactuar con ellos. En esta guía se explica cómo integrar anuncios bonificados de AdMob en aplicaciones Android. Lee algunos casos de éxito de los clientes: caso de éxito 1 y caso de éxito 2.

Si quieres hacerte una idea de cómo funcionan los anuncios bonificados, echa un vistazo a la demostración que aparece más adelante. En ella, se muestra el flujo de los anuncios de vídeo bonificados integrado en un juego sencillo.

Requisitos previos

  • Tener la versión 17.2.0 del SDK de anuncios de Google para móviles o una posterior.
  • Seguir la guía de introducción para importar el SDK de anuncios de Google para móviles y actualizar el archivo de manifiesto de Android.

Crear un objeto de anuncio bonificado

Los anuncios bonificados se solicitan y se muestran mediante los objetos RewardedAd. El primer paso es crear una instancia de RewardedAd. Puedes ver cómo se hace con el método onCreate() en un objeto Activity en el siguiente fragmento de código:

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "ca-app-pub-3940256099942544/5224354917");
    }

}

Kotlin

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : Activity() {

  private lateinit var rewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    ...
    rewardedAd = RewardedAd(this,
        "ca-app-pub-3940256099942544/5224354917")
  }
}

El constructor necesita los siguientes argumentos:

Comprobar siempre las aplicaciones con anuncios de prueba

Cuando crees y pruebes tus aplicaciones, utiliza siempre anuncios de prueba en lugar de anuncios reales que se estén publicando. De lo contrario, podríamos suspender tu cuenta.

La forma más sencilla de cargar anuncios de prueba es usar el ID del bloque de anuncios de prueba que hemos creado para los anuncios bonificados de Android:

ca-app-pub-3940256099942544/5224354917

Lo hemos configurado especialmente para devolver anuncios de prueba como respuesta de cada solicitud, y puedes usarlo para programar, probar y depurar tus propias aplicaciones. Recuerda sustituirlo por el ID de uno de tus bloques de anuncios cuando vayas a publicar la aplicación.

Para obtener más información sobre cómo funcionan los anuncios de prueba del SDK de anuncios para móviles, consulta la guía Anuncios de prueba.

Cargar anuncios

Para cargar un anuncio bonificado, haz una llamada al método loadAd() del objeto RewardedAd. Este método requiere utilizar instancias de AdRequest y RewardedAdLoadCallback como argumentos.

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "ca-app-pub-3940256099942544/5224354917");

        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

           @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
    }
}

Kotlin

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : Activity() {

  private val rewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
    val adLoadCallback = object: RewardedAdLoadCallback() {
      fun onRewardedAdLoaded() {
        // Ad successfully loaded.
      }
      fun onRewardedAdFailedToLoad(adError: LoadAdError) {
        // Ad failed to load.
      }
    }
    rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
  }
}

Los métodos onRewardedAdLoaded() y onRewardedAdFailedToLoad() de RewardedAdLoadCallback proporcionan el resultado de la operación de carga de anuncios.

Métodos anulables
onRewardedAdLoaded() Este método se ejecuta cuando un anuncio termina de cargarse.
onRewardedAdFailedToLoad() Este método se invoca cuando un anuncio no puede cargarse. Incluye un parámetro de tipo LoadAdError que indica el tipo de error que se ha producido. Si quieres obtener más información, consulta la documentación sobre cómo depurar errores de carga de anuncios.

Mostrar anuncios

Antes de mostrar un anuncio bonificado a los usuarios, debes ofrecerles explícitamente la posibilidad de elegir si quieren ver este tipo de contenido publicitario a cambio de una bonificación. Estos anuncios siempre deben ser una experiencia que los usuarios elijan de forma voluntaria.

Si quieres mostrar un RewardedAd, utiliza el método isLoaded() para verificar que ha terminado de cargarse y haz una llamada a show(). El método show() requiere que se usen instancias Activity y RewardedAdCallback como argumentos. La instancia Activity debe ser la actividad desde la que se presenta el anuncio bonificado.

El anuncio bonificado del ejemplo de código anterior podría mostrarse en el objeto OnClickListener de un botón de esta manera:

Java

myButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (rewardedAd.isLoaded()) {
            Activity activityContext = MainActivity.this
            RewardedAdCallback adCallback = new RewardedAdCallback() {
                @Override
                public void onRewardedAdOpened() {
                    // Ad opened.
                }

                @Override
                public void onRewardedAdClosed() {
                    // Ad closed.
                }

                @Override
                public void onUserEarnedReward(@NonNull RewardItem reward) {
                    // User earned reward.
                }

                @Override
                public void onRewardedAdFailedToShow(AdError adError) {
                    // Ad failed to display.
                }
            };
            rewardedAd.show(activityContext, adCallback);
        } else {
            Log.d("TAG", "The rewarded ad wasn't loaded yet.");
        }
    }
});

Kotlin

myButton.setOnClickListener {
  if (rewardedAd.isLoaded) {
    val activityContext: Activity = this@MainActivity
    val adCallback = object: RewardedAdCallback() {
      override fun onRewardedAdOpened() {
        // Ad opened.
      }
      override fun onRewardedAdClosed() {
        // Ad closed.
      }
      override fun onUserEarnedReward(@NonNull reward: RewardItem) {
        // User earned reward.
      }
      override fun onRewardedAdFailedToShow(adError: AdError) {
        // Ad failed to display.
      }
    }
    rewardedAd.show(activityContext, adCallback)
  }
  else {
    Log.d("TAG", "The rewarded ad wasn't loaded yet.")
  }
}

Recibir notificaciones de eventos de anuncio

El objeto RewardedAdCallback proporcionado al método show() recibe notificaciones de los eventos de anuncios bonificados. Cada uno de los métodos anulables de RewardedAdCallback se corresponde con un evento del ciclo de vida de un anuncio bonificado. Por ejemplo, el método onUserEarnedReward() es el lugar perfecto para ofrecer al usuario su recompensa. A continuación te facilitamos más detalles sobre cada método de evento de anuncio.

Métodos anulables
onRewardedAdOpened() Este método se invoca cuando el anuncio mostrado ocupa toda la pantalla del dispositivo.
onRewardedAdClosed() Este método se invoca cuando el anuncio de vídeo bonificado se cierra debido a que el usuario toca el icono de cerrar o el botón para volver atrás. Si la aplicación ha detenido la salida de audio o el bucle del juego, este es un buen lugar para reanudarlos.
onUserEarnedReward() Este método se invoca cuando debe recompensarse al usuario por interactuar con el anuncio. Puedes acceder a los detalles de la recompensa que se han configurado en tu bloque de anuncios a través de los métodos getType() y getAmount() del parámetro RewardItem.
onRewardedAdFailedToShow() Este método se invoca cuando un anuncio no puede mostrarse. Incluye un parámetro adError que indica el tipo de error que se ha producido. Los valores posibles del código de error (adError.getCode()) son constantes que se especifican en la clase RewardedAdCallback.

Usar RewardedAdCallback para precargar el siguiente anuncio bonificado

RewardedAd es un objeto de un solo uso. Esto quiere decir que, una vez que se muestre un anuncio bonificado, este objeto no podrá usarse para cargar otro anuncio de este tipo. Para solicitar otro anuncio bonificado, deberás crear otro objeto RewardedAd.

Te recomendamos que cargues otro anuncio bonificado en el método onRewardedAdClosed() de RewardedAdCallback, de forma que el siguiente anuncio de este tipo empiece a cargarse en cuanto el anterior se haya cerrado, tal como se muestra a continuación:

Java

public RewardedAd createAndLoadRewardedAd() {
        RewardedAd rewardedAd = new RewardedAd(this,
                "ca-app-pub-3940256099942544/5224354917");
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
}

@Override
public void onRewardedAdClosed() {
    this.rewardedAd = createAndLoadRewardedAd();
}

Kotlin

fun createAndLoadRewardedAd(): RewardedAd {
  val rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
  val adLoadCallback = object: RewardedAdLoadCallback() {
    override fun onRewardedAdLoaded() {
      // Ad successfully loaded.
    }
    override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
      // Ad failed to load.
    }
  }
  rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
  return rewardedAd
}
fun onRewardedAdClosed() {
  this.rewardedAd = createAndLoadRewardedAd()
}

Cargar varios anuncios bonificados

Si quieres cargar varios anuncios bonificados, sigue los pasos que se describen en las secciones Crear un objeto de anuncio bonificado y Cargar anuncios con cada uno de los anuncios en cuestión. En el siguiente fragmento de código se muestra cómo cargar dos anuncios bonificados en dos emplazamientos publicitarios diferentes:

Java

package ...

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        gameOverRewardedAd = createAndLoadRewardedAd(
          "ca-app-pub-3940256099942544/5224354917");
        extraCoinsRewardedAd = createAndLoadRewardedAd(
          "ca-app-pub-3940256099942544/5224354917");
    }

    public RewardedAd createAndLoadRewardedAd(String adUnitId) {
        RewardedAd rewardedAd = new RewardedAd(this, adUnitId);
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
    }
}

Kotlin

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity: Activity() {

  private val gameOverRewardedAd:RewardedAd
  private val extraCoinsRewardedAd:RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    ...
    gameOverRewardedAd = createAndLoadRewardedAd(
      "ca-app-pub-3940256099942544/5224354917")
    extraCoinsRewardedAd = createAndLoadRewardedAd(
      "ca-app-pub-3940256099942544/5224354917")
  }

  fun createAndLoadRewardedAd(adUnitId:String): RewardedAd {
    val rewardedAd = RewardedAd(this, adUnitId)
    val adLoadCallback = object: RewardedAdLoadCallback() {
      override fun onRewardedAdLoaded() {
        // Ad successfully loaded.
      }
      override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
        // Ad failed to load.
      }
    }
    rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
    return rewardedAd
  }
}

Preguntas frecuentes

¿Puedo obtener detalles de la bonificación del objeto RewardedAd?
Sí. Si necesitas conocer el valor de la bonificación antes de que se realice la retrollamada a onUserEarnedReward(), puedes consultar el método getRewardItem() de RewardedAd una vez que se haya cargado el anuncio.
¿Las llamadas de inicialización tienen un tiempo de espera determinado?
Después de 10 segundos, el SDK de anuncios de Google para móviles invoca el elemento OnInitializationCompleteListener aunque la red de mediación aún no haya completado la inicialización.
¿Qué ocurre si una red de mediación no está lista cuando recibo la retrollamada de inicialización?

Te recomendamos que cargues los anuncios en la retrollamada de OnInitializationCompleteListener. Incluso si la red de mediación no está lista, el SDK de anuncios de Google para móviles seguirá solicitándole el anuncio. Por lo tanto, aunque una red de mediación complete la inicialización tras finalizar el tiempo de espera, podrá servir solicitudes de anuncio más adelante en esa misma sesión.

Puedes seguir consultando el estado de la inicialización de todos los adaptadores a través de la sesión de tu aplicación. Solo tienes que llamar a MobileAds.getInitializationStatus().

¿Cómo puedo saber por qué una red de mediación concreta no está lista?

La propiedad AdapterStatus.getDescription() describe por qué un adaptador no está listo para servir solicitudes de anuncio.

Pasos siguientes

  • Crea tu propio bloque de anuncios de vídeo bonificados en la interfaz de AdMob.

  • Prueba otro formato de anuncio: