Audience Network te permite monetizar tus aplicaciones para Android e iOS 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. La experiencia publicitaria es un vídeo corto y una imagen final con una llamada a la acción. Una vez visualizado el vídeo completo, recibirás una devolución de llamada que te concederá el premio sugerido.
Asegúrate de haber completado las guías Primeros pasos de Audience Network y Primeros pasos de Unity antes de continuar.
El primer paso para mostrar un anuncio que incluya un vídeo con premio consiste en crear un objeto RewardedVideoAd
en un script de 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 para un RewardedVideoAd
tiene los parámetros siguientes:
placementId
: el identificador de ubicación de Audience Network para este anuncio que incluye vídeo con premio.A continuación, puedes implementar algunas devoluciones de llamada para suscribirse en los eventos del ciclo de vida del anuncio. Para escuchar estos eventos, registra un delegado para el evento, tal y como se muestra a continuación en el 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(); } }); ...
Este contenido solo es pertinente para Android.
Actualmente, los juegos de Unity para Android solo admiten que el elemento Activity
principal de Unity tenga launchMode
de singleTask
. Consulta el documento de Unity sobre el manifiesto de Android y el documento de Android sobre activity.
Dado que usamos Activity
para mostrar anuncios Interstitial
y Rewarded Video
, la actividad de anuncios se podría destruir sin cerrarse correctamente cuando un usuario deja una aplicación en segundo plano y, luego, la vuelve a iniciar mediante el icono, en lugar de usar el conmutador de aplicaciones. Puedes usar las devoluciones de llamada siguientes para comprobar si el usuario cerró el anuncio:
Para los 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 los vídeos 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 haya creado una instancia de RewardedVideoAd
, el siguiente paso es cargar un anuncio. Para ello, debe llamarse al método loadAd
.
En el ejemplo anterior, la carga del anuncio se inicia de la siguiente manera:
... this.rewardedVideoAd.LoadAd(); ...
Finalmente, una vez que se carga el anuncio, puedes llamar al método Show
para representar el anuncio que incluye vídeo con premio en la pantalla. Por ejemplo, puedes crear una función para ShowRewardedVideo
y llamarla cuando se deba 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."); } }
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.
placementId
: identificador de ubicación de Audience NetworkRewardData
: un objeto RewardData
tiene 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 se debe entregar el premio.Non 200 response
: la solicitud no es válida y no se debe entregar el premio.RewardedVideoAdDidSucceed
: se activa únicamente si se recibe un código de respuesta 200 en el paso 3.RewardedVideoAdDidFail
: 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 el premio en los datos del anuncio con premio antes de cargarlo. Para ello, se puede usar la clase RewardData
. Tanto el identificador de usuario como el importe para el premio 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 aplicación reciba una notificación sobre si el premio se ha validado o no, tendrás que implementar las devoluciones de llamada RewardedVideoAdDidSucceed
y RewardedVideoAdDidFail
, además de las demás devoluciones de llamada para RewardedVideoAd
.
Una vez que se carga el anuncio, puedes representar el anuncio con el método Show
como un RewardedVideoAd
normal.
Ten en cuenta que las devoluciones de llamada de validación del servidor pueden producirse después de que el usuario haya descartado la imagen final. No es recomendable anular el objeto de vídeo con premio antes de que se produzca alguna de estas devoluciones de llamada.
Sigue nuestras guías para integrar distintos formatos de anuncio en tu aplicación de Unity:
Cuando estés listo para publicar tu aplicación y monetizarla, envíala a revisión tras asegurarte de que cumpla las Políticas de Audience Network y las Normas comunitarias de Facebook.