Audience Network ti consente di monetizzare le tue app per Android con le inserzioni di Facebook. Le inserzioni video con premio sono un'esperienza a schermo intero in cui gli utenti accettano di visualizzare un'inserzione video in cambio di qualcosa, ad esempio una valuta virtuale, articoli nell'app, contenuti esclusivi e altro ancora. L'esperienza pubblicitaria è di 15-30 secondi, non può essere saltata e contiene un'immagine finale con una call to action. Al termine dell'intero video, riceverai una callback per concedere il premio suggerito all'utente.
Prima di proseguire, assicurati di aver consultato le guide Primi passi di Audience Network e Primi passi su Android.
Questo metodo è stato aggiunto nell'SDK Android Audience Network versione 5.1.
L'inizializzazione esplicita dell'SDK Audience Network per Android è obbligatoria a partire dalla versione 5.3.0
. Consulta questo documento per informazioni su come inizializzare l'SDK Audience Network per Android.
Prima di creare un oggetto pubblicitario e caricare le inserzioni, devi inizializzare l'SDK di Audience Network. È consigliabile eseguire questa operazione all'avvio dell'app.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Aggiungi il codice di seguito nella parte superiore della tua attività per importare l'SDK Facebook Ads:
import com.facebook.ads.*;
Quindi, inizializza l'oggetto video con premio, configura il processo di ascolto e carica le creatività video. L'inserzione video con premio richiede un'interfaccia RewardedVideoAdListener
che implementa i seguenti metodi nel codice di esempio per gestire vari eventi. Ad esempio nella tua attività:
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()); ... }
In caso di mancata visualizzazione dell'inserzione subito dopo il caricamento, lo sviluppatore è responsabile di verificare se l'inserzione è stata ritenuta non valida. Dopo aver caricato correttamente l'inserzione, questa sarà valida per 60 minuti. Non riceverai alcun pagamento se l'inserzione visualizzata non è valida. Devi chiamare isAdInvalidated()
per convalidare l'inserzione.
Prendi spunto dal codice seguente, ma non copiarlo nel progetto poiché è solo un esempio:
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 }
Se usi l'emulatore Google Android predefinito, aggiungi la riga di codice seguente prima di caricare un'inserzione di prova:AdSettings.addTestDevice("HASHED ID");
.
Usa l'ID con hash che viene visualizzato nel logcat alla prima richiesta di caricamento di un'inserzione sul dispositivo.
Genymotion e i dispositivi fisici non richiedono questo passaggio. Se desideri eseguire il test con inserzioni reali, consulta la nostra guida ai test.
Per ultimo, rimuovi l'oggetto con il relativo metodo destroy
nel metodo onDestroy
dell'attività. Tieni presente che devi usare il metodo destroy
anche per rimuovere oggetti pubblicitari precedenti prima di assegnarlo a una nuova istanza per evitare perdite di memoria.
@Override protected void onDestroy() { if (rewardedVideoAd != null) { rewardedVideoAd.destroy(); rewardedVideoAd = null; } super.onDestroy(); }
Le inserzioni video in Audience Network richiedono l'abilitazione del rendering con accelerazione hardware, in caso contrario potresti visualizzare una schermata nera nelle visualizzazioni del video. Elementi a cui si applica
L'accelerazione hardware è abilitata per impostazione predefinita se il livello dell'API di destinazione è maggiore di o uguale a 14 (Ice Cream Sandwich, Android 4.0.1), ma puoi anche abilitare questa funzione in modo esplicito al livello dell'app o dell'attività.
Nel file manifest di Android, aggiungi l'attributo seguente al tag <application>
per abilitare l'accelerazione hardware per tutta la tua app:
<application android:hardwareAccelerated="true" ...>
Se vuoi abilitare la funzione solo per attività specifiche nella tua app, puoi aggiungere la funzione seguente al tag <activity>
nel tuo file manifest di Android. Nell'esempio seguente, l'accelerazione hardware viene abilitata per l'elemento AudienceNetworkActivity
, usato per il rendering delle inserzioni interstitial e dei video con premio:
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
Questa operazione è facoltativa! Non è obbligatorio implementare la convalida del premio lato server per usare le inserzioni video con premio. Diventa necessario solo se decidi di convalidare i premi sul tuo server per migliorare la sicurezza introducendo un passaggio di convalida sul tuo server. Indica il tuo endpoint dell'editore al rappresentante di Facebook per poter abilitare questa funzione.
Se gestisci i premi per i tuoi utenti sul lato server, Facebook ti offre una soluzione per eseguire questa attività in sicurezza tramite una tecnica di convalida. Il nostro server comunicherà con un endpoint https specificato per la convalida di ogni impression relativa all'inserzione e per stabilire se il premio debba essere concesso o meno.
onRewardServerSuccess
: attivato solo se è stata ricevuta una risposta 200 durante il passaggio 3.onRewardServerFailed
: attivato se è stata ricevuta una risposta diversa da 200 durante il passaggio 3.Un esempio dell'URL che raggiungerà l'endpoint dell'editore, dal server di Facebook: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
Il flusso di lavoro sarà simile a questo:
Dopo aver inizializzato l'oggetto video con premio, dovrai inserire un ID utente e un importo premio nei dati delle inserzioni con premio prima di caricare un'inserzione. Sia l'ID utente che l'importo del premio sono stringhe. Ad esempio:
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()); }
Affinché la tua app riceva una notifica in merito alla convalida o meno del premio, dovrai implementare l'interfaccia S2SRewardedVideoAdListener
. Ciò include tutti gli eventi sopra indicati nell'interfaccia RewardedVideoAdListener
, oltre a due ulteriori eventi. Puoi usare quanto segue insieme agli eventi menzionati in precedenza.
@Override public void onRewardServerSuccess() { // Rewarded video ad validated } @Override public void onRewardServerFailed() { // Rewarded video ad not validated or no response from server }
Tieni presente che le callback di convalida del server potrebbero verificarsi dopo che l'immagine finale è stata ignorata da un utente. Non devi annullare l'allocazione dell'oggetto video con premio finché non si verifica una di queste callback.
Scopri i nostri esempi di codice di Audience Network per Android su GitHub. Importa i progetti nel tuo IDE ed eseguili su un dispositivo o su un emulatore.
Quando è tutto pronto per la pubblicazione della tua app e per la monetizzazione, invia l'app per l'analisi dopo averne verificato la conformità con le normative di Audience Network e gli Standard della community di Facebook.