Ajout de publicités vidéo avec récompense à une application Unity

L’Audience Network vous permet de monétiser vos applications Android et iOS avec des publicités Facebook. Les publicités vidéo avec récompense sont une expérience en plein écran dans laquelle les utilisateurs choisissent de regarder une publicité vidéo en échange de quelque chose de valeur, comme une devise virtuelle, des objets dans l’application, des contenus exclusifs, etc. L’expérience publicitaire consiste en une vidéo courte et une fiche finale avec appel à l’action. Lorsque la vidéo est entièrement terminée, vous recevez un rappel pour accorder la récompense suggérée à l’utilisateur.

Assurez-vous d’avoir lu le Guide de démarrage d’Audience Network et le Guide démarrage de Unity avant de commencer.

Étapes des publicités vidéo avec récompense

Étape 1 : initialisation des publicités vidéo avec récompense

Étape 2 : ajout d’évènements de rappel

Étape 3 : chargement d’une publicité

Étape 4 : affichage de la publicité

Étape 1 : initialisation des publicités vidéo avec récompense

Pour afficher une publicité vidéo avec récompense, commencez par créer un objet RewardedVideoAd dans un script C# rattaché à 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();
    }
}

Le créateur d’une publicité RewardedVideoAd dispose des paramètres suivants :

  • placementId, l’ID de placement de l’Audience Network de cette unité de publicité vidéo avec récompense.

Étape 2 : ajout d’évènements de rappel

Vous pouvez ensuite insérer quelques rappels pour vous inscrire aux évènements du cycle de vie de la publicité. Tenez-vous informé de ces évènements en inscrivant un délégué chargé de l’évènement, comme indiqué dans l’exemple ci-dessous :

...
// 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();
    }
});
...

Rappel pour l’extrait d’activité publicitaire détruite dans Unity pour Android

Ce rappel ne s’applique qu’à Android.

Les jeux Unity pour Android ne prennent actuellement en charge que l’activité Unity principale pour l’Activity du launchMode d’une singleTask. Reportez-vous au document Unity pour le manifeste Android et au document Android pour l’activité.

Comme nous utilisons une Activity pour afficher les publicités Interstitial et les Rewarded Video, l’activité publicitaire risque d’être détruite sans avoir été correctement fermée lorsqu’un utilisateur met une app en tâche de fond, puis la relance en appuyant sur l’icône plutôt que sur le sélecteur d’applications. Vous pouvez utiliser les rappels suivants et vérifier si la publicité a été fermée par l’utilisateur :

Publicité interstitielle :

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. * Ce rappel ne se déclenche que si l’activité interstitielle a * été détruite sans avoir été fermée correctement. Cela peut se produire si une * app avec launchMode:singleTask (comme un jeu Unity, par exemple) est mise * en tâche de fond, puis relancée par un appui sur l’icône. */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif 

Vidéo avec récompense :

this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* * Ne s’applique qu’à Android. * Ce rappel ne se déclenche que si l’activité de vidéo avec récompense a * été détruite sans avoir été fermée correctement. Cela peut se produire si une * app avec launchMode:singleTask (comme un jeu Unity, par exemple) est mise en * tâche de fond, puis relancée par un appui sur l’icône. */ 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 

Étape 3 : chargement d’une publicité

Une fois la publicité RewardedVideoAd instanciée, l’étape suivante consiste à charger la publicité. Cela s’effectue en appelant la méthode loadAd.

Selon l’exemple ci-dessus, voici comment démarrer le chargement de la publicité :

...
this.rewardedVideoAd.LoadAd();
...

Étape 4 : affichage de la publicité

Enfin, une fois la publicité chargée, vous pouvez appeler la méthode Show pour afficher la publicité vidéo avec récompense. Vous pouvez, par exemple, créer une fonction de ShowRewardedVideo et l’appeler au moment d’afficher la publicité :

public void ShowRewardedVideo()
{
    if (this.isLoaded) {
        this.rewardedVideoAd.Show();
        this.isLoaded = false;
    } else {
        Debug.Log("Ad not loaded. Click load to request an ad.");
    }
}

Validation des récompenses côté serveur

Cette opération est facultative. Vous n’avez pas besoin d’implémenter une validation des récompenses côté serveur pour pouvoir utiliser les publicités vidéo avec récompense. Cela est nécessaire uniquement si vous décidez de valider des récompenses sur votre propre serveur pour améliorer la sécurité en introduisant une étape de validation au niveau de votre serveur. Veuillez communiquer votre point de terminaison d’éditeur à votre représentant Facebook afin d’activer cette fonctionnalité.

Vue d’ensemble

Si vous gérez les récompenses de vos utilisateurs côté serveur, Facebook vous propose une solution entièrement sécurisée reposant sur une technique de validation. Notre serveur communiquera avec un point de terminaison https particulier pour valider chaque impression publicitaire et pour valider l’octroi de la récompense.

  1. Le SDK Audience Network demande une publicité vidéo avec récompense avec les paramètres suivants :
    • placementId : ID de placement de l’Audience Network.
    • RewardData : objet RewardData se compose d’UserId, qui représente l’ID de l’utilisateur, et de Currency, qui représente la récompense en jeu.
  2. Lorsque la vidéo est terminée, le serveur Facebook envoie ces données au point de terminaison indiqué, ainsi que la clé secrète et un identifiant de transaction unique.
  3. À réception, le serveur valide la demande et répond comme suit :
    • 200 response : demande valide, la récompense doit être fournie.
    • Non 200 response : demande non valide, la récompense ne doit pas être fournie.
  4. Lorsque la vidéo est terminée, la fiche finale est présentée et l’un des évènements suivants se déclenche.
    • RewardedVideoAdDidSucceed : déclenché uniquement si une réponse 200 a été reçue à l’étape 3.
    • RewardedVideoAdDidFail : déclenché si une réponse autre que 200 a été reçue à l’étape 3.

Exemple d’une URL qui parvient au point de terminaison de votre éditeur en partant du serveur de Facebook : https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

Le flux de travail se présente comme suit :

Implémentation

Après l’initialisation de l’objet vidéo avec récompense, vous devez transmettre un identifiant utilisateur et une valeur de récompense dans les données de publicité avec récompense avant de charger une publicité. Pour cela, vous pouvez utiliser la catégorie de RewardData. L’identifiant utilisateur et la valeur de récompense sont des chaînes. Par exemple :

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();
  }
  ...
}

Pour notifier votre application de la validation ou non d’une récompense, vous devrez implémenter les rappels de RewardedVideoAdDidSucceed et de RewardedVideoAdDidFail, en plus des autres rappels de RewardedVideoAd.

Une fois la publicité chargée, vous pouvez l’afficher au moyen de la méthode Show, comme une publicité RewardedVideoAd normale.

Notez que les rappels de validation du serveur peuvent se produire uniquement après que la fiche finale a été fermée par un utilisateur. Vous ne devez pas désaffecter l’objet vidéo avec récompense avant la survenue de l’un de ces rappels.

Étapes suivantes

Suivez nos guides sur l’intégration des différents formats publicitaires à votre app Unity :

Lorsque votre app est prête pour la mise en ligne et la monétisation, envoyez-la pour faire vérifier sa conformité aux règles de l’Audience Network et aux standards de la communauté Facebook.