Ajouter des fonctionnalités propres aux récompenses

L'une des méthodes pour déverrouiller des produits intégrés et des avantages pour vos utilisateurs consiste à créer des récompenses, c'est-à-dire des articles qu'ils reçoivent après avoir regardé une publicité vidéo. En proposant des récompenses, vous permettez aux utilisateurs d'obtenir des récompenses et des avantages dans l'application sans qu'ils aient à les acheter.

Ce document explique comment implémenter une fonctionnalité spécifique aux récompenses. La section Diagramme du workflow de cette page illustre le processus.

Identifier les récompenses de votre application

Les récompenses ont un SkuType de type INAPP. Pour que les utilisateurs puissent regarder plusieurs annonces et obtenir plusieurs récompenses, les produits doivent être utilisés.

Pour pouvoir proposer une récompense à un utilisateur, vous devez d'abord obtenir le SkuDetails correspondant. Pour ce faire, appelez querySkuDetailsAsync() avec SkuType.INAPP comme type de produit.

Déclarer des annonces adaptées à l'âge

Pour faciliter la mise en conformité avec les obligations légales relatives aux enfants et aux utilisateurs mineurs, y compris la loi COPPA (Children's Online Privacy Protection Act) et le Règlement général sur la protection des données (RGPD), votre application doit indiquer quelles annonces doivent être considérées comme étant destinées aux enfants aux États-Unis, et quelles annonces s'adressent aux utilisateurs n'ayant pas l'âge minimal requis applicable dans leur pays. Dans le centre d'aide AdMob, nous vous expliquons à quel moment taguer vos demandes d'annonces pour un traitement adapté aux contenus destinés aux enfants ou pour un traitement adapté aux utilisateurs n'ayant pas l'âge minimal requis, ainsi que les conséquences de cette action.

Lorsque vous créez le client de facturation de votre application, déterminez si les demandes d'annonces avec récompense doivent être traitées comme étant destinées aux enfants ou comme étant destinées à des utilisateurs n'ayant pas atteint l'âge minimal requis. Si ces restrictions doivent être appliquées aux demandes d'annonces, appelez les méthodes setChildDirected() et setUnderAgeOfConsent() en transmettant les valeurs appropriées à chaque méthode.

L'extrait de code suivant indique comment déclarer que des annonces vidéo devraient être adaptées aux enfants ou aux utilisateurs n'ayant pas atteint l'âge minimal requis :

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

Charger des annonces vidéo

Avant de proposer à l'utilisateur de visionner une annonce vidéo pour recevoir une récompense, vous devez charger la vidéo. Pour ce faire, créez un objet RewardLoadParams en l'associant à l'objet SkuDetails qui représente la récompense. Appelez ensuite la méthode loadRewardedSku() du client de facturation, ce qui transmet l'objet RewardLoadParams et un objet RewardResponseListener.

L'écouteur RewardResponseListener est averti lorsque le chargement de la vidéo est terminé. L'écouteur est également averti si la vidéo est indisponible ou si une autre erreur, telle qu'un délai d'inactivité du serveur, se produit.

Pour maintenir les performances de l'appareil lors du chargement des vidéos associées aux récompenses de votre application, tenez compte des bonnes pratiques suivantes :

  • Chargez au maximum trois codes SKU de récompense à la fois.
  • Essayez de charger les vidéos chaque fois que l'utilisateur accède à votre application. Cette étape vous permet de vérifier si les vidéos sont toujours chargées et disponibles.
  • Lorsque vous choisissez de charger les vidéos, choisissez l'équilibre entre l'utilisation de la bande passante et la réactivité de l'application qui convient le mieux à votre cas d'utilisation :

    • Chargez les vidéos après avoir appelé getSkuDetails() pour la récompense associée. Votre application reste très réactive, mais vous risquez de gaspiller des données réseau pour charger une vidéo que l'utilisateur ne regarde jamais.
    • Chargez la vidéo lorsque l'utilisateur accède à la page où elle doit être affichée. Dans ce cas, votre application consomme rarement de la bande passante, mais l'utilisateur peut avoir à patienter quelques instants avant de pouvoir cliquer sur le bouton permettant de regarder la vidéo.

L'extrait de code suivant illustre le processus de chargement d'une annonce vidéo qui sera diffusée avant que l'utilisateur ne reçoive la récompense :

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

Offrir des récompenses aux utilisateurs

Si la Bibliothèque Google Play Billing charge correctement la vidéo associée à une récompense, c'est-à-dire si RewardResponseListener reçoit BillingResponse.OK comme responseCode, vous pouvez lancer le flux de facturation.

Vous commencez à diffuser des annonces pour une récompense en appelant launchBillingFlow(), comme vous le faites pour tous les autres types de produits intégrés. Même si l'utilisateur n'effectue pas d'achat direct pour recevoir une récompense, vous devez tout de même activer le flux de facturation pour que l'utilisateur puisse obtenir et utiliser le produit.

Utiliser l'achat

Pour avertir votre client de facturation qu'un utilisateur a reçu et utilisé une récompense, traitez l'achat dans la méthode onPurchasesUpdated() de l'écouteur du client de facturation. Notez que les achats avec récompense doivent être utilisés.

Tester vos récompenses

Pour tester la façon dont votre application charge les annonces vidéo et fournit des récompenses aux utilisateurs, utilisez des testeurs agréés, qui reçoivent par défaut des annonces tests, et non de vraies annonces. Pour savoir comment configurer des comptes pour ces testeurs, consultez Test utilisateur d'une application Google Play Billing.

Une autre méthode de test consiste à utiliser l'ID produit android.test.reward. Ce produit spécifique est un nom réservé dans Google Play Billing. Vous n'avez donc pas besoin de l'ajouter à votre liste de produits intégrés à l'application dans la Play Console.

Attention : Lorsque vous testez les récompenses de votre application, n'utilisez pas de produits réels, sinon, votre compte pourrait être signalé comme compte spam ou frauduleux.

Lorsque vous avez terminé les tests, veillez toutefois à remplacer android.test.reward par les ID produits de vos récompenses avant de déployer votre application aux utilisateurs finaux.

Diagramme du workflow d'une récompense

Le diagramme de séquence suivant montre comment l'utilisateur, votre application et la Bibliothèque Google Play Billing interagissent pour afficher une annonce vidéo et accorder à l'utilisateur l'accès à une récompense :

Diagramme de séquence du protocole pour les récompenses
Figure 1. Étapes à suivre pour obtenir une récompense via Google Play Billing