Audience Network te permite monetizar tus aplicaciones para Android mediante anuncios de Facebook. Los anuncios con video con premio son una experiencia en pantalla completa que ofrece a los usuarios la opción de ver un anuncio con video a cambio de recibir una recompensa, como divisa virtual, artículos en la app, contenido exclusivo, etc. La experiencia de anuncios dura entre 15 y 30 segundos, no se puede omitir y contiene una tarjeta final con una llamada a la acción. Una vez que finalice el video, recibirás una devolución de llamada para otorgar la recompensa sugerida al usuario.
Asegúrate de completar las guías de primeros pasos para Audience Network y Android antes de continuar.
Este método se agregó 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 obligatoria a partir de la versión 5.3.0
. Consulta este documento sobre cómo inicializar el SDK de Audience Network para Android.
Antes de crear un objeto de anuncio y cargar anuncios, debes inicializar el SDK de Audience Network. Se recomienda hacerlo durante el inicio de la aplicación.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Agrega el siguiente código en la parte superior de la actividad para importar el SDK de anuncios de Facebook:
import com.facebook.ads.*;
A continuación, inicializa el objeto de video, define el destinatario y carga el contenido de video. El anuncio con video con premio requiere una interfaz RewardedVideoAdListener
que implemente los siguientes métodos en el código de ejemplo para gestionar varios eventos. Por ejemplo, en la actividad:
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 de forma automática después de cargarse, el desarrollador es responsable de verificar si el anuncio fue invalidado. Una vez que se carga satisfactoriamente, el anuncio es válido por 60 minutos. Si muestras un anuncio invalidado, no recibirás el pago. Debes hacer una llamada a isAdInvalidated()
para validar el anuncio.
Te recomendamos que sigas el modelo que aparece a continuación, pero no copies el código en tu proyecto, ya que es solo 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 estás usando el emulador predeterminado de Google Android, debes agregar la siguiente 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.
Genymotion y los dispositivos físicos no necesitan este paso. Si quieres probar con anuncios reales, consulta nuestra guía de pruebas.
Por último, borra el objeto con este método destroy
en el método onDestroy
de la actividad. Ten en cuenta que también debes usar el método destroy
para borrar objetos de anuncios antiguos antes de asignarlo a una nueva instancia para evitar fugas de memoria.
@Override protected void onDestroy() { if (rewardedVideoAd != null) { rewardedVideoAd.destroy(); rewardedVideoAd = null; } super.onDestroy(); }
Los anuncios con video en Audience Network requieren que se active la función de aceleración de hardware, ya que, de lo contrario, las reproducciones de video podrían mostrar una pantalla negra. Esto se aplica a:
La aceleración de hardware se activa de forma predeterminada si el nivel de API objetivo es mayor o igual a 14 (Ice Cream Sandwich, Android 4.0.1), pero también puedes activar explícitamente esta función en la aplicación o actividad.
En tu archivo de manifiesto de Android, agrega el siguiente atributo a la etiqueta <application>
para activar la aceleración de hardware para toda la aplicación:
<application android:hardwareAccelerated="true" ...>
Si solo quieres activar la función para actividades concretas de tu aplicación, puedes agregar la siguiente función a la etiqueta <activity>
en el archivo de manifiesto de Android. El siguiente ejemplo activará la aceleración de hardware para AudienceNetworkActivity
, que se usa para mostrar anuncios intersticiales y videos con premio:
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
Esto es opcional. No es necesario que implementes validación de premios en el servidor para usar anuncios con video con premio. Esta acción solo es necesario si decides validar los premios en tu propio servidor como paso adicional para mejorar la seguridad. Proporciona tu punto de conexión de editor a a tu representante de Facebook para habilitar esta función.
Si administras los premios de tus usuarios en el servidor, Facebook ofrece una solución para hacerlo de forma segura usando una técnica de validación. Nuestro servidor se comunicará con un punto de conexión https especificado para validar cada impresión de anuncio y determinar si se debe otorgar un premio.
onRewardServerSuccess
: se activa solo si se recibe a una respuesta con código 200 durante el paso 3.onRewardServerFailed
: se activa si se recibe a una respuesta sin código 200 durante el paso 3.Un ejemplo de la URL que llegará a tu punto de conexión 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
El flujo de trabajo tendrá un aspecto como este:
Después de inicializar el objeto de video con premio, deberás pasar una cantidad de identificadores de usuario y premios a los datos de anuncios con premio antes de cargar un anuncio. La cantidad de identificadores de usuario y premios 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()); }
Para que tu app reciba notificaciones si el premio se validó o no, deberás implementar la interfaz S2SRewardedVideoAdListener
. Esto incluye todos los eventos observados anteriormente en la interfaz RewardedVideoAdListener
y dos eventos adicionales. Lo siguiente se puede usar junto con los eventos antes mencionados.
@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 lo siguiente: las devoluciones de llamadas de servidor podrían tener lugar después de que un usuario descarte la tarjeta final. No debes desasignar el objeto de video con premio hasta después de una de estas devoluciones de llamadas.
Revisa los ejemplos de código de Android para Audience Network en GitHub. Importa los proyectos a tu entorno de desarrollo integrado y ejecútalo en un dispositivo o en el emulador.
Cuando estés listo para lanzar tu aplicación y monetizarla, envíala para su revisión después de asegurarte de que cumple las políticas de Audience Network y las Normas comunitarias de Facebook.