Rewarded Video Ads zu einer Android-App hinzufügen

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.

Schritt-für-Schritt

Schritt 1: Initialisierung von Rewarded Video Ads in deiner Aktivität

Schritt 2: Zeigen von Rewarded Video Ads in deiner Aktivität

Initialisiere das Audience Network-SDK

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

Schritt 1: Initialisierung von Rewarded Video Ads in deiner Aktivität

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

Schritt 2: Zeigen von Rewarded Video Ads

Szenario 1: Die Werbeanzeige nach dem erfolgreichen Laden sofort anzeigen. Ändere die oben angegebene onAdLoaded()-Methode wie folgt, um sie anzuzeigen:

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

Szenario 2: Die Werbeanzeige soll einige Sekunden oder Minuten, nachdem sie erfolgreich geladen wurde, angezeigt werden. Du solltest prüfen, ob die Werbeanzeige ungültig gemacht wurde, bevor du sie anzeigst.

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

Hardware-Beschleunigung bei Video Ads

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

  • Videowerbung in Native Ads
  • Videowerbung in Interstitials
  • In-Stream-Video Ads
  • Videos mit Belohnung

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.

App-Ebene

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" ...>

Aktivitätsebene

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" .../>

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:
    • Audience Network Placement ID
    • ID des individuellen Nutzers: Ein Attribut, das du zur Identifikation eines individuellen Nutzers verwendest (beispielsweise eine numerische Kennung).
    • Bonuswert: Der Bonuswert, den du dem Nutzer gewähren möchtest, beispielsweise 100 Münzen.
  2. Nach Abschluss des Videos leitet der Facebook-Server diesen Wert an den von dir festgelegten Endpunkt weiter, gemeinsam mit dem App-Geheimcode und einer eindeutigen Transaktions-ID.
  3. Bei Empfang prüft der Server die Anforderung und sendet eine der folgenden Antworten:
    • Antwort „200“: Anforderung ist gültig, die Belohnung soll ausgeliefert werden
    • Antwort lautet nicht „200“: 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.
    • 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:

Implementierung

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.

Nächste Schritte