Audience Network te permite monetizar tus aplicaciones para Android con anuncios de Facebook. Los anuncios que incluyen vídeos con premio son una experiencia a pantalla completa en la que los usuarios tienen la opción de ver un anuncio con vídeo a cambio de recibir una recompensa, como divisa virtual, artículos en la aplicación, contenido exclusivo, etc. Esta experiencia publicitaria, que dura entre 15 y 30 segundos y no se puede omitir, contiene una imagen final con una llamada a la acción. Una vez visualizado el vídeo completo, recibirás una devolución de llamada para conceder el premio sugerido al usuario.
Asegúrate de haber completado las guías de primeros pasos de Audience Network y Android antes de continuar.
Este método se añadió en la versión 5.1 del SDK de Audience Network para Android.
La inicialización explícita del SDK de Audience Network para Android es necesaria para la versión 5.3.0
y versiones posteriores. Consulta este documento, que contiene información sobre cómo inicializar el SDK de Audience Network para Android.
Antes de crear un objeto publicitario y cargar anuncios, debes inicializar el SDK de Audience Network. Te recomendamos que lo hagas al iniciar la aplicación.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Añade el siguiente código en la parte superior de tu actividad para importar el SDK de anuncios de Facebook:
import com.facebook.ads.*;
A continuación, inicializa el objeto de vídeo con premio, define el agente de escucha y carga el contenido del vídeo. Los anuncios que incluyen vídeos con premio requieren una interfaz RewardedVideoAdListener
que implemente los métodos siguientes en el código de ejemplo para gestionar diferentes eventos. Tu actividad tendrá un aspecto similar a este:
private final String TAG = RewardedVideoAdActivity.class.getSimpleName(); private RewardedVideoAd rewardedVideoAd; @Override public void onCreate(Bundle savedInstanceState) { ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { @Override public void onError(Ad ad, AdError error) { // Rewarded video ad failed to load Log.e(TAG, "Rewarded video ad failed to load: " + error.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Rewarded video ad is loaded and ready to be displayed Log.d(TAG, "Rewarded video ad is loaded and ready to be displayed!"); } @Override public void onAdClicked(Ad ad) { // Rewarded video ad clicked Log.d(TAG, "Rewarded video ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Rewarded Video ad impression - the event will fire when the // video starts playing Log.d(TAG, "Rewarded video ad impression logged!"); } @Override public void onRewardedVideoCompleted() { // Rewarded Video View Complete - the video has been played to the end. // You can use this event to initialize your reward Log.d(TAG, "Rewarded video completed!"); // Call method to give reward // giveReward(); } @Override public void onRewardedVideoClosed() { // The Rewarded Video ad was closed - this can occur during the video // by closing the app, or closing the end card. Log.d(TAG, "Rewarded video ad closed!"); } }; rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); ... }
private RewardedVideoAd rewardedVideoAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... @Override public void onAdLoaded(Ad ad) { // Rewarded video ad is loaded and ready to be displayed rewardedVideoAd.show(); } ... }; rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); ... }
En caso de que el anuncio no se muestre inmediatamente una vez se haya cargado, el desarrollador será responsable de comprobar si ha quedado invalidado o no. Una vez se cargue correctamente, el anuncio será válido durante 60 minutos. No recibirás pagos si muestras un anuncio invalidado. Para validar el anuncio, debes llamar al método isAdInvalidated()
.
Debes seguir la idea siguiente, pero no copies el código en el proyecto, ya que se trata solo de un ejemplo:
private RewardedVideoAd rewardedVideoAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... }; // load the ad rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); // Here is just an example for displaying the ad with delay // Please call this method at appropriate timing in your project showAdWithDelay(); } private void showAdWithDelay() { /** * Here is an example for displaying the ad with delay; * Please do not copy the Handler into your project */ // Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Check if rewardedVideoAd has been loaded successfully if (rewardedVideoAd == null || !rewardedVideoAd.isAdLoaded()) { return; } // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad. if (rewardedVideoAd.isAdInvalidated()) { return; } rewardedVideoAd.show(); } }, 1000 * 60 * 15); // Show the ad after 15 minutes }
Si usas el emulador predeterminado de Android de Google, debes añadir esta línea de código antes de cargar un anuncio de prueba:AdSettings.addTestDevice("HASHED ID");
.
Utiliza el identificador con hash que figura en el logcat la primera vez que realices una solicitud para cargar un anuncio en un dispositivo.
Este paso no es necesario si se utiliza el emulador Genymotion o dispositivos físicos. Si quieres realizar pruebas con anuncios reales, consulta nuestra guía para pruebas.
Por último, borra el objeto con su método destroy
en el método onDestroy
de tu actividad. Ten en cuenta que también debes usar el método destroy
para borrar objetos de anuncio antiguos antes de asignarlo a una nueva instancia para evitar una fuga de memoria.
@Override protected void onDestroy() { if (rewardedVideoAd != null) { rewardedVideoAd.destroy(); rewardedVideoAd = null; } super.onDestroy(); }
Para evitar la posibilidad de que se muestre una pantalla en negro al reproducir los anuncios con vídeo de Audience Network, es necesario activar la renderización con aceleración por hardware. Este requerimiento se aplica a:
La aceleración por hardware se activa de forma predeterminada si la versión de la API a la que te diriges es la 14 o posterior (Ice Cream Sandwich, Android 4.0.1), pero también puedes activarla de forma explícita en el nivel de la aplicación o de la actividad.
En el archivo de manifiesto de Android, añade el siguiente atributo a la etiqueta <application>
para activar la aceleración por hardware en toda la aplicación:
<application android:hardwareAccelerated="true" ...>
Si solo quieres activar la función para determinadas actividades de la aplicación, puedes añadir la siguiente función a la etiqueta <activity>
en el archivo de manifiesto de Android. En el siguiente ejemplo, se muestra cómo activar la aceleración por hardware para la actividad AudienceNetworkActivity
, que se utiliza para mostrar anuncios intersticiales y vídeos con premio:
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
Es opcional. No es necesario que implementes la validación de las recompensas en el lado del servidor para poder usar los anuncios que incluyen vídeos con premio. Esta acción solo es obligatoria si decides validar las recompensas en tu propio servidor a fin de mejorar la seguridad. Proporciona a tu representante de Facebook el extremo de editor para activar esta función.
En el caso de aquellos que gestionan las recompensas a los usuarios en el lado del servidor, Facebook ofrece una solución para llevar dicho proceso a cabo de forma segura mediante una técnica de validación. Nuestro servidor se comunicará con el extremo HTTPS especificado con el objetivo de validar cada impresión de anuncio y el hecho de si una recompensa debe concederse o no.
onRewardServerSuccess
: se activa únicamente si se recibe un código de respuesta 200 en el paso 3.onRewardServerFailed
: se activa si se recibe un código de respuesta distinto a 200 en el paso 3.Este es un ejemplo de la URL que se recibirá en tu extremo de editor desde el servidor de Facebook: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
Este es el aspecto que tendrá el proceso:
Tras inicializar el objeto de vídeo con premio, deberás pasar un identificador de usuario y un importe para la recompensa en los datos del anuncio antes de cargarlo. Tanto el identificador de usuario como el importe para la recompensa son cadenas. Por ejemplo:
private RewardedVideoAd rewardedVideoAd; private void loadRewardedVideoAd { // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... }; // Create the rewarded ad data RewardData rewardData = new RewardData("YOUR_USER_ID", "YOUR_REWARD"); rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .withRewardData(rewardData) .build()); }
Deberás implementar la interfaz S2SRewardedVideoAdListener
a fin de que tu aplicación reciba una notificación para confirmar si se ha validado el premio. Esta interfaz incluye todos los eventos que figuran más arriba en la interfaz RewardedVideoAdListener
, así como otros dos adicionales. Los eventos mencionados anteriormente pueden usarse con el siguiente fragmento de código:
@Override public void onRewardServerSuccess() { // Rewarded video ad validated } @Override public void onRewardServerFailed() { // Rewarded video ad not validated or no response from server }
Ten en cuenta que las devoluciones de llamada de validación del servidor pueden producirse después de que el usuario haya descartado la tarjeta final. No es recomendable anular el objeto de vídeo con premio antes de que se produzca alguna de estas devoluciones de llamada.
Examina nuestros ejemplos de código de Audience Network para Android en GitHub. Importa los proyectos a tu IDE y ejecútalos en un dispositivo o en el emulador.
Cuando estés listo para publicar tu aplicación y monetizarla, envíala a revisión tras asegurarte de que cumpla la Política de Audience Network y las Normas comunitarias de Facebook.