Annonces avec récompense


Les annonces avec récompense permettent aux utilisateurs d'interagir avec elles en échange de récompenses dans l'application. Ce guide vous explique comment intégrer des annonces avec récompense dans des applications Android et iOS à l'aide du SDK Google Mobile Ads C++.

Lisez quelques témoignages de réussite de clients : étude de cas 1, étude de cas 2.

Conditions préalables

Effectuez toujours des tests avec des annonces tests

Lorsque vous créez et testez vos applications, veillez à utiliser des annonces tests plutôt que des annonces de production en ligne. À défaut, votre compte risque d'être suspendu.

Le moyen le plus simple de charger des annonces tests consiste à utiliser notre ID de bloc d'annonces de test dédié pour les annonces avec récompense, qui varie selon la plate-forme de l'appareil :

  • Android : ca-app-pub-3940256099942544/5224354917
  • iOS : ca-app-pub-3940256099942544/1712485313

Ils ont été spécialement configurés pour renvoyer des annonces de test pour chaque requête. Vous pouvez les utiliser dans vos propres applications lors du codage, des tests et du débogage. Veillez simplement à le remplacer par votre propre ID de bloc d'annonces avant de publier votre application.

Pour en savoir plus sur le fonctionnement des annonces tests du SDK Mobile Ads, consultez Annonces tests.

Implémentation

Voici les principales étapes à suivre pour intégrer des annonces avec récompense :

  1. Chargez une annonce.
  2. Demandez à recevoir les rappels.
  3. Afficher l'annonce et gérer l'événement de récompense

Configurer un RewardedAd

Les annonces avec récompense sont diffusées dans des objets RewardedAd. La première étape pour intégrer des annonces avec récompense à votre application consiste donc à créer et à initialiser une instance de RewardedAd.

  1. Ajoutez l'en-tête suivant au code C++ de votre application :

     #include "firebase/gma/rewarded_ad.h"

  2. Déclarez et instanciez un objet RewardedAd :

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();

  3. Initialisez l'instance RewardedAd à l'aide de votre vue parente castée en type AdParent. La vue parente est une référence jobject JNI à un Activity Android ou un pointeur vers un UIView iOS.

    // my_ad_parent is a jobject reference to an Android Activity or
    // a pointer to an iOS UIView.
    firebase::gma::AdParent ad_parent =
      static_cast<firebase::gma::AdParent>(my_ad_parent);
    firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
    
  4. Au lieu de conserver l'avenir en tant que variable, vous pouvez vérifier périodiquement l'état de l'opération d'initialisation en appelant InitializeLastResult() sur l'objet RewardedAd. Cela peut être utile pour suivre le processus d'initialisation dans votre boucle de jeu globale.

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = rewarded_ad->InitializeLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      // Initialization completed.
      if(future.error() == firebase::gma::kAdErrorCodeNone) {
        // Initialization successful.
      } else {
        // An error has occurred.
      }
    } else {
      // Initialization on-going.
    }
    

Pour en savoir plus sur l'utilisation de firebase::Future, consultez la section Utiliser des futures pour surveiller l'état d'achèvement des appels de méthode.

Charger une annonce

Pour charger une annonce, la méthode LoadAd() doit être utilisée sur un objet RewardedAd. La méthode de chargement nécessite que vous ayez initialisé l'objet RewardedAd, que vous disposiez de l'ID de votre bloc d'annonces et d'un objet AdRequest. Un firebase::Future est renvoyé. Vous pouvez l'utiliser pour surveiller l'état et le résultat du chargement.

Le code suivant montre comment charger une annonce une fois que RewardedAd a été correctement initialisé :

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);

S'inscrire pour recevoir des rappels

Vous devez étendre la classe FullScreenContentListener pour recevoir des notifications de présentation d'annonces avec récompense et d'événements de cycle de vie. Votre sous-classe FullScreenContentListener personnalisée peut être enregistrée via la méthode RewardedAd::SetFullScreenContentListener(). Elle recevra des rappels lorsque l'annonce sera diffusée avec succès ou non, ainsi que lorsqu'elle sera ignorée.

Le code suivant montre comment développer la classe et l'attribuer à l'annonce :

  class ExampleFullScreenContentListener
      : public firebase::gma::FullScreenContentListener {

   public:
    ExampleFullScreenContentListener() {}

    void OnAdClicked() override {
      // This method is invoked when the user clicks the ad.
    }

    void OnAdDismissedFullScreenContent() override {
     // This method is invoked when the ad dismisses full screen content.
    }

    void OnAdFailedToShowFullScreenContent(const AdError& error) override {
      // This method is invoked when the ad failed to show full screen content.
      // Details about the error are contained within the AdError parameter.
    }

    void OnAdImpression() override {
      // This method is invoked when an impression is recorded for an ad.
    }

    void OnAdShowedFullScreenContent() override {
      // This method is invoked when the ad showed its full screen content.
    }
  };

  ExampleFullScreenContentListener* example_full_screen_content_listener =
    new ExampleFullScreenContentListener();
  rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);

RewardedAd est un objet à usage unique. Cela signifie qu'une fois qu'une annonce avec récompense a été diffusée, elle ne peut plus être diffusée à nouveau. Il est recommandé de charger une autre annonce avec récompense dans la méthode OnAdDismissedFullScreenContent() de votre FullScreenContentListener afin que la prochaine annonce avec récompense commence à se charger dès que la précédente est fermée.

Diffuser l'annonce et gérer l'événement lié à la récompense

Avant de diffuser une annonce avec récompense auprès des utilisateurs, vous devez leur donner la possibilité explicite de regarder le contenu de l'annonce avec récompense en échange d'une récompense. Les annonces avec récompense doivent toujours être activées.

Lorsque vous présentez votre annonce, vous devez fournir un objet UserEarnedReward pour gérer la récompense de l'utilisateur.

Le code suivant montre comment afficher un RewardedAd :

// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
    public firebase::gma::UserEarnedRewardListener {
 public:
   ExampleUserEarnedRewardListener() { }

  void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
    // Reward the user!
  }
};

ExampleUserEarnedRewardListener* user_earned_reward_listener =
  new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);

Questions fréquentes

L'appel d'initialisation est-il soumis à un délai avant expiration ?
Au bout de 10 secondes, le SDK Google Mobile Ads C++ termine la firebase::Future renvoyée par Initialize(), même si un réseau de médiation n'a pas encore terminé l'initialisation.
Que se passe-t-il si certains réseaux de médiation ne sont pas prêts lorsque je reçois le rappel d'initialisation ?

Il est recommandé de charger les annonces une fois l'initialisation du SDK terminée. Même si un réseau de médiation n'est pas prêt, le SDK C++ Google Mobile Ads lui demandera toujours une annonce. Par conséquent, si un réseau de médiation termine son initialisation après le délai avant expiration, il peut toujours traiter les futures demandes d'annonces de cette session.

Vous pouvez continuer à interroger l'état d'initialisation de tous les adaptateurs tout au long de votre session d'application en appelant GetInitializationStatus().

Comment savoir pourquoi un réseau de médiation donné n'est pas prêt ?

AdapterStatus.description() indique pourquoi un adaptateur n'est pas prêt à traiter les requêtes d'annonces. Consultez le code source de notre exemple d'application de démarrage rapide sur GitHub pour voir un exemple de journalisation de l'état de l'adaptateur de médiation.

Autres ressources

Exemple dans GitHub