L’Audience Network vous permet de monétiser vos applications Android avec des publicités Facebook. Les publicités vidéo avec récompense sont une expérience en plein écran dans laquelle les utilisateurs choisissent de regarder une publicité vidéo en échange de quelque chose de valeur, comme une devise virtuelle, des objets dans l’application, des contenus exclusifs, etc. L’expérience publicitaire dure entre 15 et 30 secondes, ne peut pas être ignorée et contient une fiche finale avec un appel à l’action. Lorsque la vidéo complète sera terminée, vous recevrez un rappel vous invitant à accorder la récompense suggérée à l’utilisateur.
Assurez-vous d’avoir terminé le Guide de démarrage et le guide Démarrer avec Android avant de commencer.
La méthode a été ajoutée à la version 5.1 du SDK Audience Network pour Android.
L’initialisation explicite du SDK Audience Network pour Android est requise à partir de la version 5.3.0
. Veuillez consulter ce document pour savoir comment initialiser le SDK Audience Network pour Android.
Avant de télécharger un objet publicitaire et de charger des publicités, vous devez initialiser le SDK Audience Network. Il est recommandé de le faire lors du démarrage de l’application.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Pour importer le SDK Publicités Facebook, ajoutez le code suivant en haut de votre activité :
import com.facebook.ads.*;
Initialisez ensuite l’objet vidéo avec récompense, définissez l’auditeur et chargez le contenu créatif vidéo. La publicité vidéo avec récompense requiert une interface RewardedVideoAdListener
qui implémente les méthodes suivantes dans l’exemple de code pour gérer divers évènements. Voici un exemple dans votre activité :
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()); ... }
Si la publicité s’affiche non pas immédiatement, mais quelques secondes ou quelques minutes après son chargement, le développeur doit vérifier si celle-ci a été invalidée ou non. Une fois chargée, la publicité est valide pendant 60 minutes. Vous ne recevrez pas de paiement en cas d’affichage d’une publicité invalidée. Vous devez appeler isAdInvalidated()
pour valider la publicité.
Suivez l’idée ci-dessous, mais ne copiez surtout pas le code dans votre projet, car il s’agit d’un exemple :
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 }
Si vous utilisez l’émulateur Google Android par défaut, ajoutez la ligne de code suivante avant de charger une publicité test :AdSettings.addTestDevice("HASHED ID");
.
Utilisez l’ID haché imprimé sur le logcat la première fois que vous effectuez une demande de chargement d’une publicité sur un appareil.
Cette étape n’est pas nécessaire pour Genymotion ni pour les appareils physiques. Si vous souhaitez effectuer un test avec de vraies publicités, consultez notre guide de test.
Enfin, nettoyez l’objet avec sa méthode destroy
dans la méthode onDestroy
de votre activité. Notez que vous devez également utiliser la méthode destroy
pour nettoyer les anciens objets publicitaires avant de l’attribuer à une nouvelle instance pour éviter toute fuite de mémoire.
@Override protected void onDestroy() { if (rewardedVideoAd != null) { rewardedVideoAd.destroy(); rewardedVideoAd = null; } super.onDestroy(); }
Les publicités vidéo dans l’Audience Network nécessitent le rendu par accélération matérielle pour être activées. Elles risquent autrement d’afficher un écran noir. Cela concerne les :
L’accélération matérielle est activée par défaut si votre niveau d’API Target est >=14 (Ice Cream Sandwich, Android 4.0.1). Vous pouvez toutefois activer explicitement cette fonction au niveau de l’application ou de l’activité.
Dans votre fichier manifeste Android, ajoutez l’attribut suivant à la balise <application>
afin de permettre l’accélération matérielle pour toute votre application :
<application android:hardwareAccelerated="true" ...>
Si vous ne souhaitez activer la fonction que pour certaines activités dans votre application, ajoutez la fonction suivante à la balise <activity>
dans votre manifeste Android. L’exemple suivant permettra l’accélération matérielle pour le AudienceNetworkActivity
qui est utilisé pour le rendu des publicités interstitielles et des vidéos avec récompense :
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
Cette opération est facultative. Vous n’avez pas besoin d’implémenter une validation des récompenses côté serveur pour pouvoir utiliser les publicités vidéo avec récompense. Cela est nécessaire uniquement si vous décidez de valider des récompenses sur votre propre serveur pour améliorer la sécurité en introduisant une étape de validation au niveau de votre serveur. Veuillez communiquer votre point de terminaison d’éditeur à votre représentant Facebook afin d’activer cette fonctionnalité.
Si vous gérez les récompenses de vos utilisateurs côté serveur, Facebook vous propose une solution entièrement sécurisée reposant sur une technique de validation. Notre serveur communiquera avec un point de terminaison https particulier pour valider chaque impression publicitaire et pour valider l’octroi de la récompense.
onRewardServerSuccess
: déclenché uniquement si une réponse 200 a été reçue à l’étape 3.onRewardServerFailed
: déclenché si une réponse autre que 200 a été reçue à l’étape 3.Exemple d’une URL qui parvient au point de terminaison de votre éditeur en partant du serveur de Facebook : https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
Le flux de travail se présente comme suit :
Après l’initialisation de l’objet vidéo avec récompense, vous devrez transmettre un identifiant utilisateur et une valeur de récompense dans les données de publicité avec récompense avant de charger une publicité. L’identifiant utilisateur et la valeur de récompense sont des chaînes. Par exemple :
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()); }
Pour que votre application soit notifiée de la validation ou non de la récompense, vous devez implémenter l’interface S2SRewardedVideoAdListener
. Cela inclut tous les évènements notés ci-dessus dans l’interface RewardedVideoAdListener
, ainsi que deux évènements supplémentaires. Ce qui suit peut être utilisé avec les évènements mentionnés ci-dessus.
@Override public void onRewardServerSuccess() { // Rewarded video ad validated } @Override public void onRewardServerFailed() { // Rewarded video ad not validated or no response from server }
Notez que les rappels de validation du serveur peuvent se produire uniquement après que la fiche finale a été fermée par un utilisateur. Vous ne devez pas désaffecter l’objet vidéo avec récompense avant la survenue de l’un de ces rappels.
Découvrez nos exemples de code de l’Audience Network pour Android sur Github. Importez les projets dans votre environnement de développement intégré et lancez-les sur un appareil ou sur le simulateur.
Lorsque votre app est prête pour la mise en ligne et la monétisation, envoyez votre app pour qu’elle soit examinée afin de vérifier qu’elle est conforme aux règles de l’Audience Network et aux standards de la communauté Facebook.