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.
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.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(); } }); ...
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
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(); ...
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."); } }
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.
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.
placementId
: Audience Network-Placement IDRewardData
: Ein RewardData
-Objekt besteht aus der UserId
, die die Nutzer*innen-ID darstellt und aus Currency
, was die tatsächliche Belohnung im Spiel darstellt.200 response
: Anforderung ist gültig, die Belohnung soll ausgeliefert werdenNon 200 response
: Anforderung ist nicht gültig, die Belohnung soll nicht ausgeliefert werden.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:
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.
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.