Questo documento è stato aggiornato.
La traduzione in Italiano non è ancora completa.
Aggiornamento inglese: 2 ago 2021

Aggiunta di inserzioni video con premio all'app per iOS

Le inserzioni video con premio sono un'esperienza a schermo intero in cui gli utenti accettano di visualizzare un'inserzione video in cambio di qualcosa, ad esempio una valuta virtuale, articoli in-app, contenuti esclusivi e altro ancora. L'esperienza pubblicitaria è di 15-30 secondi, non può essere saltata e contiene un'immagine finale con una call to action. Al termine dell'intero video, riceverai una callback per concedere il premio suggerito all'utente.

Qui sotto vengono indicati i dettaglio della modalità di implementazione delle inserzioni video con premio da Audience Network su iOS.

Tieni presente che i video con premio sono supportati solo a partire da iOS 9.

Configurazione dell'SDK

Il formato del video con premio di Audience Network è ora incluso nell'SDK pubblico. Il video con premio sarà presto disponibile per tutte le app di gaming. Se non vedi il video con premio nella Gestione della monetizzazione e hai l'SDK più recente, richiedilo ora.

Prima di proseguire, assicurati di aver consultato le guide Primi passi di Audience Network e Primi passi su iOS.

Implementazione

Nel file di intestazione del controller di visualizzazione (o il file Swift se sei un utente Swift), importa FBAudienceNetwork, dichiara la conformità al protocollo FBRewardedVideoAdDelegate e aggiungi una variabile dell'istanza per l'unità pubblicitaria video con premio:

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

Aggiungi al tuo controller di visualizzazione una funzione che inizializzi l'oggetto video con premio e che memorizzi nella cache le creatività video in anticipo rispetto al momento in cui intendi mostrarle.

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 che viene visualizzato su YOUR_PLACEMENT_ID è un ID temporaneo solo a scopo di test.

Se utilizzi questo ID temporaneo nel tuo codice live, i tuoi utenti non riceveranno inserzioni (visualizzeranno un errore Mancato riempimento). Devi tornare qui dopo il test e sostituire questo ID temporaneo con un ID del posizionamento live.

Per scoprire come generare un ID del posizionamento live, consulta Configurazione di Audience Network

Ora che hai aggiunto il codice per il caricamento dell'inserzione, puoi aggiungere le funzioni che gestiranno i vari eventi.

Ad esempio:

  • rewardedVideoAdDidLoad garantisce che l'app riceva una notifica quando l'inserzione viene memorizzata nella cache ed è pronta per la visualizzazione.
  • rewardedVideoAdVideoComplete ti informa quando consegnare il premio all'utente dopo una visualizzazione completa del video.
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");
}

Infine, quando è tutto pronto per mostrare l'inserzione video con premio, puoi chiamare il codice seguente all'interno della tua funzione relativa al premio.

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];
  }
}

Il metodo per mostrare un'inserzione video con premio include un flag booleano animated che ti consente di animare la presentazione. Per impostazione predefinita è impostato su YES/true, ma puoi sovrascriverlo con quanto segue:

Usando il simulatore, le inserzioni di prova saranno mostrate per impostazione predefinita. Per abilitarle su un dispositivo, aggiungi la seguente linea di codice prima del caricamento di un'inserzione: AdSettings.addTestDevice(HASHED ID). Usa l'ID con hash che viene visualizzato nel logcat alla prima richiesta di caricamento di un'inserzione su un dispositivo.

Facoltativamente, puoi aggiungere le seguenti funzioni aggiuntive per gestire i casi in cui un'inserzione video con premio verrà chiusa o quando verrà acquisita l'impression relativa al video con premio:

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");
}

Convalida del premio sul lato server

Panoramica

Se gestisci i premi per i tuoi utenti sul lato server, Facebook ti offre una soluzione per eseguire questa attività in sicurezza tramite una tecnica di convalida. Il nostro server comunicherà con un endpoint https specificato per la convalida di ogni impression relativa all'inserzione e per stabilire se il premio debba essere concesso o meno.

  1. L'SDK di Audience Network richiede un'inserzione video con premio con i seguenti parametri:
    • ID del posizionamento di Audience Network
    • ID utente unico, ovvero un attributo utilizzato per identificare un utente unico, ad esempio, un identificativo numerico
    • Valore del premio che vuoi concedere all'utente, ad esempio, l'endpoint specificato per le 100 monete, insieme alla chiave segreta.
  2. Al ricevimento, il server convalida la richiesta e risponde nel modo seguente:
    • Risposta 200: la richiesta è valida e il premio deve essere consegnato.
    • Risposta diversa da 200: la richiesta non è valida e il premio non deve essere consegnato.
  3. Una volta completato il video, viene presentata l'immagine finale e viene attivato uno degli eventi seguenti.
    • onRewardServerSuccess: attivato solo se è stata ricevuta una risposta 200 durante il passaggio 3.
    • onRewardServerFailed: attivato se una risposta diversa da 200 è stata ricevuta durante il passaggio 3.

Un esempio di URL che punta al tuo endpoint dell'editore dal server di Facebook.

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

Indica il tuo endpoint dell'editore al rappresentante di Facebook per poter abilitare questa funzione.

Implementazione dell'SDK

È possibile impostare i dati relativi al premio (USER_ID e CURRENCY) prima o dopo il metodo loadAd. Entrambi i casi sono illustrati nel seguente snippet di codice.

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];

Oltre alle funzioni delineate in precedenza in FBRewardedVideoAdDelegate, devi usare i seguenti eventi per gestire l'assegnazione dei premi nella tua app. Puoi usare quanto segue insieme agli eventi menzionati in precedenza.

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");
}

Tieni presente che le callback di convalida del server si verificheranno solo dopo che l'immagine finale è stata ignorata da un utente. Non devi annullare l'allocazione dell'oggetto video con premio finché non si verifica una di queste callback.

Next Steps