Audience Network te permite monetizar tus apps para Android y iOS con anuncios de Facebook. Los anuncios con video con premio son una experiencia en pantalla completa que ofrece a los usuarios la posibilidad de ver un anuncio con video a cambio de recibir una recompensa, como divisas virtuales, artículos en la app, contenido exclusivo, etc. La experiencia de anuncios consiste en un video breve y una tarjeta final con una llamada a la acción. Una vez que finalice el video, recibirás una devolución de llamada con el fin de otorgar al usuario la recompensa sugerida.
Asegúrate de haber completado las guías Primeros pasos de Audience Network y Primeros pasos de Unity antes de seguir.
El primer paso para mostrar un anuncio con video con premio es crear un objeto RewardedVideoAd
en un script C# adjunto a un GameObject
.
... using AudienceNetwork; ... public class RewardedVideoAdTest : MonoBehaviour { public void LoadRewardedVideo() { // Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings). // Use different ID for each ad placement in your app. this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID"); this.rewardedVideoAd.Register(this.gameObject); // Set delegates to get notified on changes or when the user interacts with the ad. this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() { Debug.Log("RewardedVideo ad loaded."); this.isLoaded = true; }); this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) { Debug.Log("RewardedVideo ad failed to load with error: " + error); }); this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() { Debug.Log("RewardedVideo ad logged impression."); }); this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() { Debug.Log("RewardedVideo ad clicked."); }); this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); // Initiate the request to load the ad. this.rewardedVideoAd.LoadAd(); } }
El constructor de un RewardedVideoAd
tiene los siguientes parámetros:
placementId
: el identificador de ubicación de Audience Network de este bloque de anuncios con video con premio.Luego, puedes implementar algunas devoluciones de llamada para suscribirte a los eventos del ciclo de vida del anuncio. Para reproducir estos eventos, registra un delegado del evento, como se muestra en el siguiente ejemplo:
... // Set delegates to get notified on changes or when the user interacts with the ad. this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() { Debug.Log("RewardedVideo ad loaded."); this.isLoaded = true; }); this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) { Debug.Log("RewardedVideo ad failed to load with error: " + error); }); this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() { Debug.Log("RewardedVideo ad logged impression."); }); this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() { Debug.Log("RewardedVideo ad clicked."); }); this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); ...
Esto es pertinente únicamente para Android.
Actualmente, los juegos de Unity para Android solo permiten que la principal Activity
de Unity tenga launchMode
de singleTask
. Consulta el Documento de Unity para el manifiesto de Android y el Documento de actividad de Android.
Como usamos Activity
para mostrar anuncios Interstitial
y Rewarded Video
, la actividad del anuncio podría destruirse sin que se cierre correctamente cuando un usuario pone en segundo plano una aplicación y la vuelve a iniciar usando el icono, en lugar del cambiador de aplicaciones. Puedes usar las siguientes devoluciones de llamadas y verificar si el usuario cerró el anuncio:
Para anuncios intersticiales:
this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* * Only relevant to Android. * This callback will only be triggered if the Interstitial activity has * been destroyed without being properly closed. This can happen if an * app with launchMode:singleTask (such as a Unity game) goes to * background and is then relaunched by tapping the icon. */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif
Para videos con premio:
this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* * Only relevant to Android. * This callback will only be triggered if the Rewarded Video activity * has been destroyed without being properly closed. This can happen if * an app with launchMode:singleTask (such as a Unity game) goes to * background and is then relaunched by tapping the icon. */ this.rewardedVideoAd.rewardedVideoAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Rewarded video activity destroyed without being closed first."); Debug.Log("Game should resume. User should not get a reward."); } }); #endif
Una vez que se crea una instancia de RewardedVideoAd
, el siguiente paso es cargar un anuncio. Para ello, se debe llamar al método loadAd
.
Aquí se muestra como crear una instancia de la carga del anuncio del ejemplo anterior:
... this.rewardedVideoAd.LoadAd(); ...
Por último, una vez cargado el anuncio, puedes llamar al método Show
para mostrar el anuncio con video con premio en la pantalla. Por ejemplo, puedes crear una función para ShowRewardedVideo
y llamar a esta función en el momento de mostrar el anuncio:
public void ShowRewardedVideo() { if (this.isLoaded) { this.rewardedVideoAd.Show(); this.isLoaded = false; } else { Debug.Log("Ad not loaded. Click load to request an ad."); } }
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.
placementId
: identificador de ubicación de Audience NetworkRewardData
: un objeto RewardData
consta de un UserId
, que representa el identificador de usuario, y Currency
, que representa el premio real en el juego.200 response
: la solicitud es válida y el premio se debe entregar.Non 200 response
: la solicitud no es válida y el premio no se debe entregar.RewardedVideoAdDidSucceed
: se activa solo si se recibe una respuesta con código 200 durante el paso 3.RewardedVideoAdDidFail
: se activa si se recibe 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. Esto se puede realizar con la clase RewardData
. La cantidad de identificadores de usuario y premios son cadenas. Por ejemplo:
public class RewardedVideoAdTest : MonoBehaviour { ... private bool isLoaded; private RewardedVideoAd rewardedVideoAd; public void LoadRewardedVideo() //Set the rewarded ad data RewardData rewardData = new RewardData(); rewardData.UserId = "USER_ID"; rewardData.Currency = "REWARD_ID"; // Instantiate RewardedVideoAd with reward data this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID", rewardData); this.rewardedVideoAd.Register(this.gameObject); // Set delegates to get notified on changes or when the user interacts with the ad. this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() { Debug.Log("RewardedVideo ad loaded."); this.isLoaded = true; }); this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) { Debug.Log("RewardedVideo ad failed to load with error: " + error); }); this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() { Debug.Log("RewardedVideo ad logged impression."); }); this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() { Debug.Log("RewardedVideo ad clicked."); }); this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); // For S2S validation you need to register the following two callback this.rewardedVideoAd.RewardedVideoAdDidSucceed = (delegate() { Debug.Log("Rewarded video ad validated by server"); }); this.rewardedVideoAd.RewardedVideoAdDidFail = (delegate() { Debug.Log("Rewarded video ad not validated, or no response from server"); }); this.rewardedVideoAd.loadAd(); } ... }
Para que tu app reciba una notificación en la que se indica si la recompensa se validó o no, tendrás que implementar las devoluciones de llamada RewardedVideoAdDidSucceed
y RewardedVideoAdDidFail
, además de las otras devoluciones de llamadas para RewardedVideoAd
.
Una vez cargado el anuncio, puedes presentarlo con el método Show
como un RewardedVideoAd
normal.
Ten en cuenta que las devoluciones de llamadas del servidor podrían realizarse 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.
Usa nuestras guías para integrar distintos formatos de anuncios en tu aplicación de Unity:
Cuando estés listo para lanzar tu aplicación y monetizarla, envíala para someterla a revisión, después de asegurarte de que cumpla las políticas de Audience Network y las Normas comunitarias de Facebook.