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.
Relevante Codebeispiele in Swift und Objective-C findest du in unserem GitHub-Repository mit Beispiel-Apps
Teste die Integration deiner Werbeanzeigen mit deiner App.
Sobald wir eine Werbeanzeigenanfrage von deiner App oder Webseite empfangen, prüfen wir, ob diese den Audience Network-Richtlinien und Facebook-Gemeinschaftsstandards entspricht.