Mit dem Audience Network kannst du deine Android-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, Gegenstände in der App, exklusiven Content und mehr. Das Rewarded Video dauert 15–30 Sekunden, kann nicht übersprungen werden und die letzte Karte enthält einen Call to Action. Nachdem das Video vollständig wiedergegeben wurde, erhältst du einen Rückruf, um dem Nutzer die vorgeschlagene Belohnung zu gewähren.
Stelle sicher, dass du die Leitfäden zu den ersten Schritten mit dem Audience Network und mit Android abgeschlossen hast, bevor du fortfährst.
Diese Methode wurde in Android Audience Network SDK Version 5.1 hinzugefügt
Seit Version 5.3.0
ist die Initialisierung des Audience Network-SDK für Android obligatorisch In diesem Dokument finden Sie Informationen zur Initialisierung des Audience Network-SDK für Android.
Vor der Erstellung eines Werbeanzeigenobjekts und dem Laden von Werbeanzeigen müssen Sie Audience Network-SDK initialisieren. Dies wird beim App-Launch empfohlen.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Füge folgenden Code am Anfang deiner Aktivität hinzu, um das Facebook-Werbeanzeigen-SDK zu importieren:
import com.facebook.ads.*;
Initialisiere anschließend das Rewarded Video-Objekt, lege den Listener fest und lade deine Videoanzeige. Die Rewarded Video Ad benötigt eine RewardedVideoAdListener
-Schnittstelle, die die folgenden Methoden in den Beispielcode implementiert, um verschiedene Events zu verarbeiten. Beispiel für deine Aktivität:
private final String TAG = RewardedVideoAdActivity.class.getSimpleName(); private RewardedVideoAd rewardedVideoAd; @Override public void onCreate(Bundle savedInstanceState) { ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, 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 Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { @Override public void onError(Ad ad, AdError error) { // Rewarded video ad failed to load Log.e(TAG, "Rewarded video ad failed to load: " + error.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Rewarded video ad is loaded and ready to be displayed Log.d(TAG, "Rewarded video ad is loaded and ready to be displayed!"); } @Override public void onAdClicked(Ad ad) { // Rewarded video ad clicked Log.d(TAG, "Rewarded video ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Rewarded Video ad impression - the event will fire when the // video starts playing Log.d(TAG, "Rewarded video ad impression logged!"); } @Override public void onRewardedVideoCompleted() { // Rewarded Video View Complete - the video has been played to the end. // You can use this event to initialize your reward Log.d(TAG, "Rewarded video completed!"); // Call method to give reward // giveReward(); } @Override public void onRewardedVideoClosed() { // The Rewarded Video ad was closed - this can occur during the video // by closing the app, or closing the end card. Log.d(TAG, "Rewarded video ad closed!"); } }; rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); ... }
private RewardedVideoAd rewardedVideoAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, 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 Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... @Override public void onAdLoaded(Ad ad) { // Rewarded video ad is loaded and ready to be displayed rewardedVideoAd.show(); } ... }; rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); ... }
Falls die Werbeanzeige nicht sofort angezeigt wird, nachdem sie geladen wurde, muss der Entwickler prüfen, ob die Werbeanzeige ungültig gemacht wurde. Nach dem erfolgreichen Laden der Werbeanzeige ist diese 60 Minuten lang gültig. Du wirst nichtbezahlt, wenn du eine ungültige Werbeanzeige anzeigst. Du solltest isAdInvalidated()
aufrufen, um die Anzeige zu validieren.
Orientiere dich an nachstehendem Beispiel, aber kopiere bitte den Code nicht in dein Projekt, da es sich wie gesagt nur um ein Beispiel handelt:
private RewardedVideoAd rewardedVideoAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, 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 Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... }; // load the ad rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); // Here is just an example for displaying the ad with delay // Please call this method at appropriate timing in your project showAdWithDelay(); } private void showAdWithDelay() { /** * Here is an example for displaying the ad with delay; * Please do not copy the Handler into your project */ // Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Check if rewardedVideoAd has been loaded successfully if (rewardedVideoAd == null || !rewardedVideoAd.isAdLoaded()) { return; } // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad. if (rewardedVideoAd.isAdInvalidated()) { return; } rewardedVideoAd.show(); } }, 1000 * 60 * 15); // Show the ad after 15 minutes }
Wenn du den standardmäßigen Google Android-Emulator verwendest, füge die folgende Codezeile vor dem Laden einer Testwerbeanzeige hinzu:AdSettings.addTestDevice("HASHED ID");
.
Wenn du zum ersten Mal eine Werbeanzeige für ein Gerät anfragst, verwende die gehashte ID, die im Logcat aufgeführt wird.
Dieser Schritt wird in Genymotion und physischen Geräten nicht benötigt. Wenn du mit echten Werbeanzeigen testen möchtest, lies unseren Testleitfaden.
Bereinige abschließend das Objekt in seiner destroy
-Methode in der onDestroy
-Methode deiner Aktivität. Beachte außerdem Folgendes: Verwende die destroy
-Methode auch, um alte Werbeobjekte zu bereinigen, bevor du das Objekt einer neuen Instanz zuweist. So vermeidest du Speicherlecks.
@Override protected void onDestroy() { if (rewardedVideoAd != null) { rewardedVideoAd.destroy(); rewardedVideoAd = null; } super.onDestroy(); }
Für Videos Ads im Audience Network muss das Rendering mit Hardware-Beschleunigung aktiviert werden. Andernfalls kann es bei Videoaufrufen zu einem schwarzen Bildschirm kommen. Dies gilt für
Die Hardware-Beschleunigung wird standardmäßig aktiviert, wenn deine Ziel-API-Ebene größer oder gleich 14 ist (Ice Cream Sandwich, Android 4.0.1). Du kannst dieses Feature aber auch explizit auf App-Ebene oder Aktivitätsebene aktivieren.
Füge in der Android-Manifestdatei das folgende Attribut zum <application>
-Tag hinzu, um die Hardware-Beschleunigung für die gesamte App zu aktivieren:
<application android:hardwareAccelerated="true" ...>
Wenn du das Feature nur für bestimmte Aktivitäten in deiner App aktivieren möchtest, kannst du das folgende Feature in der Android-Manifestdatei zum <activity>
-Tag hinzufügen. Im folgenden Beispiel wird die Hardware-Beschleunigung für die AudienceNetworkActivity
aktiviert, die für das Rendering von Interstitial Ads und Videos mit Belohnung verwendet wird:
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
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.
onRewardServerSuccess
: Wird nur ausgelöst, wenn in Schritt 3 die Antwort „200“ empfangen wurde.onRewardServerFailed
: 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-ID und einen Bonusbetrag an die Daten für die Rewarded Video Ad übergeben, bevor eine Anzeige geladen wird. Bei der Nutzer-ID und dem Bonusbetrag handelt es sich um Strings. Beispiel:
private RewardedVideoAd rewardedVideoAd; private void loadRewardedVideoAd { // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, 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 Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... }; // Create the rewarded ad data RewardData rewardData = new RewardData("YOUR_USER_ID", "YOUR_REWARD"); rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .withRewardData(rewardData) .build()); }
Damit deine App benachrichtigt wird, ob die Belohnung validiert wurde oder nicht, musst du die S2SRewardedVideoAdListener
-Schnittstelle implementieren. Diese umfasst alle oben in der RewardedVideoAdListener
-Schnittstelle erläuterten Events sowie zwei zusätzliche Events. Folgende können zusammen mit den oben genannten Events verwendet werden.
@Override public void onRewardServerSuccess() { // Rewarded video ad validated } @Override public void onRewardServerFailed() { // Rewarded video ad not validated or no response from server }
Beachte Folgendes: Die Rückrufe zur Server-Validierung können erfolgen, nachdem die letzte Karte durch einen Nutzer verworfen wurde. Du solltest die Zuordnung für das Rewarded Video-Objekt erst nach einem dieser Rückrufe aufheben.
Sieh dir unsere Codebeispiele für das Audience Network auf Android auf Github an. Importiere die Projekte in deine IDE und führe sie auf einem Gerät oder im Emulator aus.
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.