Hinzufügen von Rewarded Video Ads zu einer Unity-App

Mit dem Audience Network kannst du deine Android- und iOS-Apps mit Facebook-Werbeanzeigen zu Geld machen. Rewarded Video Ads sind eine Vollbilderfahrung, bei der Nutzer freiwillig eine Video Ad ansehen und dafür einen Gegenwert erhalten – etwa virtuelle Währung, Artikel in der App, exklusiven Content und mehr. Die Werbeanzeige besteht aus einem kurzen Video und einer letzten Karte mit einem Call to Action. Nachdem das Video vollständig wiedergegeben wurde, erhältst du einen Rückruf, um dem*der Nutzer*in die vorgeschlagene Belohnung zu gewähren.

Stelle sicher, dass du die Leitfäden zu den ersten Schritten mit dem Audience Network und mit Unity abgeschlossen hast, bevor du fortfährst.

Schritte zur Erstellung von Rewarded Video Ads

Schritt 1: Initialisierung von Rewarded Video Ads

Schritt 2: Callback-Events hinzufügen

Schritt 3: Werbeanzeige laden

Schritt 4: Werbeanzeige präsentieren

Schritt 1: Initialisierung von Rewarded Video Ads

Zum Anzeigen einer Rewarded Video Ad musst du zunächst ein RewardedVideoAd-Objekt in einem C#-Skript erstellen, das an ein GameObject angehängt ist.

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

Der Konstruktor für eine RewardedVideoAd weist die folgenden Parameter auf:

  • placementId: Die Audience Network-Placement ID für diese Rewarded Video Ad-Einheit.

Schritt 2: Callback-Events hinzufügen

Als Nächstes kannst du einige Rückrufe implementieren, um die Lebenszyklus-Events der Werbeanzeige zu abonnieren. Höre diese Events ab, indem du einen Delegate für das Event registrierst, wie im folgenden Beispiel gezeigt.

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

Rückruf für zerstörte Werbeanzeigen-Aktivität in Unity (Android)

Dies ist nur für Android relevant.

Zurzeit unterstützen Unity-Spiele für Android in der Unity-Haupt-Activity als launchMode nur singleTask. Weitere Informationen findest du im Unity-Dokument für das Android-Manifest und im Android-Dokument für „activity“.

Da wir Activity zum Anzeigen von Interstitial und Rewarded Video Ads verwenden, könnte die Anzeigenaktivität ohne ordnungsgemäßes Schließen zerstört werden, wenn ein Nutzer eine App in den Hintergrund stellt und dann mit dem Symbol neu startet, anstatt den App-Umschalter zu verwenden. Du kannst die folgenden Rückrufe verwenden und prüfen, ob die Werbeanzeige vom Nutzer geschlossen wurde:

Für Interstitial Ads:

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 

Für Rewarded Video Ads:

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 

Schritt 3: Werbeanzeige laden

Nachdem die RewardedVideoAd instanziiert wurde, musst du im nächsten Schritt eine Werbeanzeige laden. Das geschieht, indem du die loadAd-Methode aufrufst.

Hier siehst du, wie im obigen Beispiel das Laden der Werbeanzeige initiiert wird:

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

Schritt 4: Werbeanzeige präsentieren

Nachdem die Anzeige geladen wurde, kannst du schließlich die Show-Methode aufrufen, um die Rewarded Video Ad auf dem Bildschirm zu rendern. Du kannst beispielsweise eine Funktion für ShowRewardedVideo erstellen und diese Funktion aufrufen, wenn die Anzeige gezeigt werden soll:

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

Serverseitige Validierung der Belohnung

Das ist optional. Um Rewarded Video Ads nutzen zu können, musst du keine serverseitige Validierung der Belohnung implementieren. Das ist nur dann erforderlich, wenn du Belohnungen auf deinem eigenen Server validieren möchtest, um auf diese Weise für mehr Sicherheit zu sorgen. Wenn du diese Funktion aktivieren möchtest, gib deinem Facebook-Ansprechpartner deinen Publisher-Endpunkt an.

Übersicht

Wenn du Belohnungen für Nutzer serverseitig verwaltest, bietet Facebook hierfür eine Lösung zur sicheren Ausführung unter Verwendung eines Validierungsverfahrens. Unser Server kommuniziert mit einem festgelegten https-Endpunkt, um jede Werbeanzeigen-Impression zu validieren und zu prüfen, ob eine Belohnung gewährt werden soll.

  1. Das Audience Network-SDK fordert eine Rewarded Video Ad mit folgenden Parametern an:
    • placementId: Audience Network-Placement ID
    • RewardData: Ein RewardData-Objekt besteht aus der UserId, die die Nutzer*innen-ID darstellt und aus Currency, was die tatsächliche Belohnung im Spiel darstellt.
  2. Nach Abschluss des Videos leitet der Facebook-Server diese Werte an den von dir festgelegten Endpunkt weiter, zusammen mit dem App-Geheimcode und einer individuellen Transaktions-ID.
  3. Bei Empfang prüft der Server die Anforderung und sendet eine der folgenden Antworten:
    • 200 response: Anforderung ist gültig, die Belohnung soll ausgeliefert werden
    • Non 200 response: Anforderung ist nicht gültig, die Belohnung soll nicht ausgeliefert werden.
  4. Sobald das Video abgeschlossen ist, wird die letzte Karte angezeigt und eines der folgenden Events ausgelöst.
    • RewardedVideoAdDidSucceed: Wird nur ausgelöst, wenn in Schritt 3 die Antwort „200“ empfangen wurde.
    • RewardedVideoAdDidFail: Wird nur ausgelöst, wenn in Schritt 3 nicht die Antwort „200“ empfangen wurde.

Ein Beispiel für die URL, die deinen Publisher-Endpunkt vom Facebook-Server erreicht: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

Der Workflow sieht wie folgt aus:

Implementierung

Nachdem du das Rewarded Video-Objekt initialisiert hast, musst du eine Nutzer*innen-ID und einen Bonusbetrag an die Daten für die Rewarded Video Ad übergeben, bevor eine Anzeige geladen wird. Dies kannst du mit der Klasse RewardData tun. Bei der Nutzer*innen-ID und dem Bonusbetrag handelt es sich um Strings. Beispiel:

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

Damit deine App darüber benachrichtigt wird, ob die Belohnung validiert wurde oder nicht, musst du die Rückrufe RewardedVideoAdDidSucceed und RewardedVideoAdDidFail zusammen mit den anderen Rückrufen für die RewardedVideoAd implementieren.

Sobald die Anzeige geladen ist, kannst du sie mit der Show-Methode wie eine normale RewardedVideoAd rendern.

Beachte Folgendes: Die Rückrufe zur Server-Validierung können erfolgen, nachdem die letzte Karte durch eine*n Nutzer*in verworfen wurde. Du solltest die Zuordnung für das Rewarded Video-Objekt erst nach einem dieser Rückrufe aufheben.

Nächste Schritte

Folge unseren Leitfäden zur Integration verschiedener Anzeigenformate in deine Unity-App:

Wenn du bereit bist, deine App live zu schalten und zu Geld zu machen, stelle sicher, dass sie unsere Audience Network-Richtlinien und die Facebook-Gemeinschaftsstandards einhält, und reiche sie dann zur Überprüfung ein.