Ce document a été mis à jour.
La traduction en Français (France) n’est pas encore terminée.
Anglais mis à jour : 22 juin 2022

Ajouter des publicités vidéo avec récompense à une application iOS

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 dure entre 15 et 30 secondes, ne peut pas être ignorée et contient une fiche finale avec un appel à l’action. Une fois la vidéo terminée, vous recevrez un rappel vous invitant à accorder la récompense suggérée à l’utilisateur.

Vous trouverez ci-dessous des détails concernant l’implémentation des publicités vidéo avec récompense de l’Audience Network sur iOS.

Notez que la vidéo avec récompense est prise en charge uniquement sur iOS 9 et les versions ultérieures.

Configurer le SDK

Le format de vidéo avec récompense de l’Audience Network est désormais inclus dans le SDK public. La vidéo avec récompense sera bientôt disponible pour toutes les applications de jeu. Si la vidéo avec récompense n’apparaît pas dans le Gestionnaire de monétisation et que vous disposez du dernier SDK, demandez la vidéo.

Assurez-vous d’avoir terminé le guide de démarrage et le guide Démarrer avec iOS avant de commencer.

Implémentation

À présent, dans votre fichier d’en-tête du contrôleur d’affichage (ou fichier Swift, si vous êtes un utilisateur de Swift), importez FBAudienceNetwork, indiquez la conformité au protocole FBRewardedVideoAdDelegate, puis ajoutez une variable d’instance pour l’unité de publicité vidéo avec récompense.

import UIKit
import FBAudienceNetwork

class ViewController: UIViewController, FBRewardedVideoAdDelegate {
  private var rewardedVideoAd: FBRewardedVideoAd?
}
#import <UIKit/UIKit.h>
@import FBAudienceNetwork;

@interface ViewController : UIViewController <FBRewardedVideoAdDelegate>

@property (nonatomic, strong) FBRewardedVideoAd *rewardedVideoAd;

@end

Ajoutez à votre contrôleur d’affichage une fonction qui initialise l’objet vidéo avec récompense et met en cache le contenu vidéo avant le moment auquel vous souhaitez le montrer.

override func viewDidLoad() {
  super.viewDidLoad()
  
  // Instantiate an rewarded video object.
  // NOTE: the placement ID will eventually identify this as your app. You can ignore it 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 App Store your users will not receive ads (you will get a 'No Fill' error).
  let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
  rewardedVideoAd.delegate = self
  
  // For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
  rewardedVideoAd.load()
  
  self.rewardedVideoAd = rewardedVideoAd
}
- (void) viewDidLoad 
{
  [super viewDidLoad];
  // Instantiate a rewarded video ad object. 
  // NOTE: the placement ID will eventually identify this as your app. You can ignore it 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 App Store your users will not receive ads (you will get a 'No Fill' error).
  self.rewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:@"YOUR_PLACEMENT_ID"];
  self.rewardedVideoAd.delegate = self;

  // For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
  [self.rewardedVideoAd loadAd];
}

L’ID correspondant à YOUR_PLACEMENT_ID est un ID temporaire à des fins de tests uniquement.

Si vous utilisez cet ID temporaire dans votre code en direct, vos utilisateurs ne recevront pas de publicité, mais une erreur No Fill. Vous devez revenir ici après le test et remplacer cet ID temporaire par un ID de placement en direct.

Pour découvrir comment générer un ID de placement en direct, reportez-vous à Configuration d’Audience Network

À présent que vous avez ajouté le code de chargement de la publicité, vous pouvez ajouter des fonctions qui géreront différents évènements.

Par exemple :

  • rewardedVideoAdDidLoad garantit que votre application sait que la publicité est mise en cache et est prête à être affichée
  • rewardedVideoAdVideoComplete vous permet de savoir quand fournir votre récompense à l’utilisateur après la fin d’une vidéo
func rewardedVideoAdDidLoad(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Video ad is loaded and ready to be displayed")
}

func rewardedVideoAd(_ rewardedVideoAd: FBRewardedVideoAd, didFailWithError error: Error) {
  print("Rewarded video ad failed to load")
}

func rewardedVideoAdDidClick(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Video ad clicked")
}

func rewardedVideoAdDidClose(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded Video ad closed - this can be triggered by closing the application, or closing the video end card")
}

func rewardedVideoAdVideoComplete(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded Video ad video completed - this is called after a full video view, before the ad end card is shown. You can use this event to initialize your reward")
}
- (void)rewardedVideoAdDidLoad:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Video ad is loaded and ready to be displayed");
}
    
- (void)rewardedVideoAd:(FBRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error
{
  NSLog(@"Rewarded video ad failed to load");
}

- (void)rewardedVideoAdDidClick:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Video ad clicked");
}
    
- (void)rewardedVideoAdDidClose:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded Video ad closed - this can be triggered by closing the application, or closing the video end card");
}

- (void)rewardedVideoAdVideoComplete:(FBRewardedVideoAd *)rewardedVideoAd;
{
  NSLog(@"Rewarded Video ad video completed - this is called after a full video view, before the ad end card is shown. You can use this event to initialize your reward");
}

Enfin, lorsque vous êtes prêt(e) à diffuser la publicité vidéo avec récompense, vous pouvez appeler le code suivant dans votre propre fonction de récompense.

private func showRewardedVideoAd() {
  guard let rewardedVideoAd = rewardedVideoAd, rewardedVideoAd.isAdValid else {
    return
  }
  rewardedVideoAd.show(fromRootViewController: self)
}
- (void)showRewardedVideoAd
{
  if (self.rewardedVideoAd && self.rewardedVideoAd.isAdValid) {
    [self.rewardedVideoAd showAdFromRootViewController:self];
  }
}

La méthode de diffusion d’une publicité vidéo avec récompense inclut un indicateur booléen animated qui vous permet d’animer la présentation. Par défaut, il a la valeur YES / true, mais vous pouvez la remplacer.

Lorsqu’elles sont exécutées sur le simulateur, les publicités tests sont diffusées par défaut. Pour activer les publicités tests sur un appareil, ajoutez la ligne de code suivante avant le chargement d’une publicité : AdSettings.addTestDevice(HASHED ID). Utilisez l’ID chiffré imprimé sur le logcat la première fois que vous effectuez une demande de chargement d’une publicité sur un appareil.

Facultatif : vous pouvez ajouter les fonctions supplémentaires suivantes pour gérer les cas où la publicité vidéo avec récompense va se fermer ou lorsque l’impression de la vidéo avec récompense est en cours de capture :

func rewardedVideoAdWillClose(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("The user clicked on the close button, the ad is just about to close")
}

func rewardedVideoAdWillLogImpression(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded Video impression is being captured")
}
- (void)rewardedVideoAdWillClose:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"The user clicked on the close button, the ad is just about to close");
}

- (void)rewardedVideoAdWillLogImpression:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded Video impression is being captured");
}

Validation des récompenses côté serveur

Présentation

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 :
    • un ID de placement de l’Audience Network ;
    • un identifiant d’utilisateur unique : un attribut à utiliser pour identifier un utilisateur unique (par exemple, un identifiant numérique) ;
    • une valeur de récompense : la valeur de la récompense que vous souhaitez accorder à l’utilisateur. Par exemple, point de terminaison indiqué 100Coins avec la clé secrète.
  2. À réception, le serveur valide la requête et répond comme suit :
    • Réponse 200 : la requête est valide et la récompense doit être fournie.
    • Réponse autre que 200 : la requête est non valide et la récompense ne doit pas être fournie.
  3. Lorsque la vidéo est terminée, la fiche finale est présentée et l’un des évènements suivants se déclenche.
    • onRewardServerSuccess : déclenché uniquement si une réponse 200 a été reçue à l’étape 3.
    • onRewardServerFailed : déclenché si une réponse autre que 200 a été reçue à l’étape 3.

Un exemple d’URL qui atteindra votre point de terminaison d’éditeur, depuis le serveur Facebook.

https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

Veuillez communiquer votre point de terminaison d’éditeur à votre représentant Facebook afin d’activer cette fonctionnalité.

Implémentation du SDK

Il est possible de définir les données de récompense (USER_ID et CURRENCY) avant ou après la méthode loadAd. Les deux données sont incluses dans l’extrait de code ci-dessous.

let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
rewardedVideoAd.delegate = self

// Set the rewarded ad data before or after `load` method is called
rewardedVideoAd.setRewardDataWithUserID("USER_ID", withCurrency: "CURRENCY")

// For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
rewardedVideoAd.load()

self.rewardedVideoAd = rewardedVideoAd
self.rewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:@"YOUR_PLACEMENT_ID"];
self.rewardedVideoAd.delegate = self;

// Set the rewarded ad data before or after `loadAd` method is called
[self.rewardedVideoAd setRewardDataWithUserID:@"USER_ID" withCurrency:@"CURRENCY"];

[self.rewardedVideoAd loadAd];

En plus des fonctions répertoriées ci-dessus dans le code FBRewardedVideoAdDelegate, les événements suivants doivent être utilisés pour gérer l’octroi des récompenses dans votre application. Ce qui suit peut être utilisé avec les évènements mentionnés ci-dessus.

func rewardedVideoAdServerRewardDidFail(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded video ad not validated, or no response from server")
}

func rewardedVideoAdServerRewardDidSucceed(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded video ad validated by server")
}
- (void)rewardedVideoAdServerRewardDidSucceed:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded video ad validated by server");
}

- (void)rewardedVideoAdServerRewardDidFail:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded video ad not validated, or no response from server");
}

Notez que les rappels de validation du serveur se produiront uniquement après la fermeture de la fiche finale 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.

Next Steps