Notes de version de la bibliothèque Google Play Billing

Cet article contient des notes de version pour la bibliothèque Google Play Billing.

Bibliothèque Google Play Billing version 6.2.1 (16/04/2024)

La version 6.2.1 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Bibliothèque Google Play Billing version 6.2.0 (06/03/2024)

La version 6.2.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Bibliothèque Google Play Billing version 6.1.0 (14/11/2023)

La version 6.1.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Bibliothèque Google Play Billing version 6.0.1 (22/06/2023)

La version 6.0.1 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Mise à jour de la bibliothèque Play Billing pour qu'elle soit compatible avec Android 14.

Bibliothèque Google Play Billing version 6.0 (10/05/2023)

La version 6.0.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

  • Ajout d'une nouvelle énumération ReplacementMode pour remplacer ProrationMode.

    Veuillez noter que ProrationMode est toujours disponible pour des raisons de rétrocompatibilité.

  • L'ID de commande pour les achats PENDING a été supprimé.

    Auparavant, l'ID de commande était toujours créé même si l'achat était en attente. À partir de la version 6.0.0, aucun ID de commande n'est créé pour les achats en attente. Il n'est renseigné qu'une fois que l'achat passe à l'état PURCHASED.

  • Suppression des méthodes queryPurchases et launchPriceConfirmationFlow.

    Les méthodes queryPurchases et launchPriceConfirmationFlow auparavant marquées comme obsolètes ont été supprimées dans la bibliothèque Play Billing 6.0.0. Les développeurs doivent utiliser queryPurchasesAsync au lieu de queryPurchases. Pour les alternatives à launchPriceConfirmationFlow, consultez Changements de prix.

  • Ajout d'un code de réponse d'erreur réseau.

    Un nouveau code de réponse d'erreur réseau, NETWORK_ERROR, a été ajouté à partir de la version 6.0.0 de PBL. Ce code est renvoyé lorsqu'une erreur liée à un problème de connexion réseau se produit. Ces erreurs de connexion réseau étaient auparavant signalées par SERVICE_UNAVAILABLE.

  • Mise à jour de SERVICE_UNAVAILABLE et SERVICE_TIMEOUT.

    À partir de la version 6.0.0 de PBL, les erreurs liées à l'expiration du traitement sont renvoyées sous la forme SERVICE_UNAVAILABLE au lieu de SERVICE_TIMEOUT.

    Le comportement ne change pas dans les versions précédentes de PBL.

  • Suppression de SERVICE_TIMEOUT.

    À partir de la version 6.0.0 de PBL, SERVICE_TIMEOUT ne sera plus renvoyé. Les versions précédentes de PBL continueront à renvoyer ce code.

  • Ajout d'une journalisation supplémentaire.

    La version 6 de la bibliothèque Play Billing inclut une journalisation supplémentaire, qui fournit des informations sur l'utilisation des API (par exemple, la réussite et l'échec) et les problèmes de connexion au service. Ces informations sont utilisées pour améliorer les performances de la bibliothèque Play Billing et pour mieux gérer les erreurs.

Bibliothèque Google Play Billing version 5.2.1 (22/06/2023)

La version 5.2.1 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Mise à jour de la bibliothèque Play Billing pour qu'elle soit compatible avec Android 14.

Bibliothèque Google Play Billing version 5.2 (06/04/2023)

La version 5.2.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Bibliothèque Google Play Billing version 5.1 (31/10/2022)

La version 5.1.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Cette version contient les modifications suivantes.

Résumé des modifications

Bibliothèque Google Play Billing version 5.0 (11/05/2022)

La version 5.0.0 de la bibliothèque Google Play Billing et des extensions Kotlin est désormais disponible.

Cette version contient les modifications suivantes.

Résumé des modifications

  • Introduction d'un nouveau modèle d'abonnement incluant de nouvelles entités vous permettant de créer plusieurs offres pour un seul produit sur abonnement. Pour en savoir plus, consultez le guide de migration.
  • Ajout de BillingClient.queryProductDetailsAsync() pour remplacer BillingClient.querySkuDetailsAsync().
  • Ajout de la méthode setIsOfferPersonalized() pour les exigences de divulgation des prix personnalisés dans l'UE. Pour en savoir plus sur l'utilisation de cette méthode, consultez Indiquer un prix personnalisé.
  • Suppression de queryPurchases(), qui était obsolète et a été remplacé par queryPurchasesAsync, mis en place dans la bibliothèque Google Play Billing 4.0.0.
  • launchPriceChangeFlow est obsolète et sera supprimé dans une prochaine version. Pour en savoir plus sur les alternatives, consultez la page Lancer un flux de confirmation du changement de prix.
  • Suppression de setVrPurchaseFlow(), qui était auparavant utilisé lors de l'instanciation d'un parcours d'achat. Dans les versions précédentes, cette méthode redirigeait l'utilisateur pour qu'il finalise l'achat sur son appareil Android. Une fois cette méthode supprimée, les utilisateurs finaliseront leur achat via le parcours d'achat standard.

Bibliothèque Google Play Billing version 4.1 (23/02/2022)

La version 4.1.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Cette version contient les modifications suivantes.

Résumé des modifications

Bibliothèque Google Play Billing version 4.0 (18/05/2021)

La version 4.0.0 de la bibliothèque Google Play Billing et les extensions Kotlin sont désormais disponibles.

Résumé des modifications

Bibliothèque Google Play Billing version 3.0.3 (12/03/2021)

La version 3.0.3 de la bibliothèque Google Play Billing, l'extension Kotlin et le plug-in Unity sont désormais disponibles.

Correction de bugs Java et Kotlin

  • Correction des fuites de mémoire lorsque endConnection() est appelé.
  • Résolution du problème lorsque la bibliothèque Google Play Billing est utilisée par des applications qui utilisent le mode de lancement en une seule tâche. Un rappel onPurchasesUpdated() est déclenché lorsqu'une application est réactivée depuis le lanceur d'applications Android et que la boîte de dialogue de facturation était visible avant sa suspension.

Correction de bugs dans Unity

  • Mise à jour Java vers la version 3.0.3 pour corriger les fuites de mémoire et résoudre les problèmes empêchant les achats lorsqu'une application est réactivée depuis le lanceur d'applications Android et que la boîte de dialogue de facturation était visible avant sa suspension.

Bibliothèque Google Play Billing version 3.0.2 (24/11/2020)

La version 3.0.2 de la bibliothèque Google Play Billing et de l'extension Kotlin sont désormais disponibles.

Correction de bugs

  • Correction d'un bug dans l'extension Kotlin, qui entraîne la défaillance de la coroutine avec l'erreur "Déjà réactivé".
  • Correction des références non résolues lors de l'utilisation de l'extension Kotlin avec la bibliothèque kotlinx.coroutines version 1.4+.

Bibliothèque Google Play Billing version 3.0.1 (30/09/2020)

La version 3.0.1 de la bibliothèque Google Play Billing et de l'extension Kotlin sont désormais disponibles.

Correction de bugs

  • Correction d'un bug qui empêchait l'appel de l'application PurchasesUpdatedListener avec le résultat d'achat si l'application était fermée et restaurée lors du flux de facturation.

Bibliothèque Google Play Billing version 3.0 (08/06/2020)

La version 3.0.0 de la bibliothèque Google Play Billing, l'extension Kotlin et le plug-in Unity sont désormais disponibles.

Résumé des modifications

  • Suppression de la compatibilité avec les codes SKU avec récompense.
  • Suppression des paramètres ChildDirected et UnderAgeOfConsent.
  • Suppression des méthodes de charge utile de développeur obsolètes.
  • Suppression des méthodes obsolètes BillingFlowParams.setAccountId() et BillingFlowParams.setDeveloperId().
  • Suppression des méthodes obsolètes BillingFlowParams.setOldSkus(String oldSku) et BillingFlowParams.addOldSku(String oldSku).
  • Ajout d'annotations de possibilité de valeur nulle.

Correction de bugs

  • SkuDetails.getIntroductoryPriceCycles() renvoie désormais int au lieu de String.
  • Correction d'un bug qui entraînait le traitement du flux de facturation avec des paramètres supplémentaires, même si aucun paramètre supplémentaire n'était défini

Bibliothèque Google Play Billing version 2.2.1 (20/05/2020)

La version 2.2.1 de la bibliothèque Google Play Billing est désormais disponible.

Correction de bugs

  • Mise à jour de la version par défaut de la bibliothèque Java Play Billing dont dépend l'extension Kotlin.

Bibliothèque Google Play Billing version 2.2.0 et compatibilité avec Unity (23/03/2020)

La version 2.2.0 de Google Play Billing offre aux développeurs une fonctionnalité leur permettant de s'assurer que les achats sont attribués au bon utilisateur. Ces modifications remplacent la nécessité de créer des solutions personnalisées en fonction de la charge utile du développeur. Dans le cadre de cette mise à jour, la fonctionnalité de charge utile pour les développeurs est obsolète et sera supprimée dans une prochaine version. Pour en savoir plus, y compris sur les alternatives recommandées, consultez la section Charge utile pour les développeurs.

Bibliothèque Google Play Billing 2 pour Unity

En plus des versions Java et Kotlin actuelles de la bibliothèque Google Play Billing 2, nous avons lancé une version de la bibliothèque à utiliser avec Unity. Les développeurs de jeux qui utilisent l'API Unity pour les achats via une application peuvent effectuer une mise à niveau dès maintenant pour profiter de toutes les fonctionnalités de la bibliothèque Google Play Billing 2 et pour accéder plus facilement aux mises à niveau ultérieures des futures versions de la bibliothèque Google Play Billing.

Pour en savoir plus, consultez Utiliser Google Play Billing avec Unity.

Résumé des modifications

Versions 2.1.0 de la bibliothèque Google Play Billing et de l'extension Kotlin (10/12/2019)

La version 2.1.0 de la bibliothèque Google Play Billing et la nouvelle extension Kotlin sont désormais disponibles. L'extension Kotlin de la bibliothèque Play Billing fournit des alternatives API idiomatiques pour l'utilisation de Kotlin, offrant de meilleures fonctionnalités de sécurité null et des coroutines. Pour obtenir des exemples de code, consultez Utiliser la bibliothèque Google Play Billing.

Cette version contient les modifications suivantes.

Résumé des modifications

  • Dans BillingFlowParams, setOldSku(String oldSku) est obsolète et remplacé par setOldSku(String oldSku, String purchaseToken) pour permettre de déterminer quand plusieurs comptes sur l'appareil possèdent le même code SKU.

Bibliothèque Google Play Billing version 2.0.3 (05/08/2019)

La version 2.0.3 de la bibliothèque Google Play Billing est maintenant disponible.

Correction de bugs

  • Correction d'un bug qui entraînait parfois l'échec de querySkuDetailsAsync() avec le code DEVELOPER_ERROR au lieu de renvoyer un résultat réussi.

Bibliothèque Google Play Billing version 2.0.2 (08/07/2019)

La version 2.0.2 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient des mises à jour de la documentation de référence et ne modifie pas les fonctionnalités de la bibliothèque.

Bibliothèque Google Play Billing version 2.0.1 (06/06/2019)

La version 2.0.1 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient les modifications suivantes.

Correction de bugs

  • Correction d'un bug qui provoquait le renvoi des messages de débogage en tant que null dans certains cas.
  • Un problème potentiel de fuite de mémoire a été résolu.

Bibliothèque Google Play Billing version 2.0 (07/05/2019)

La version 2.0 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient les modifications suivantes.

Les achats doivent être confirmés dans les trois jours

Google Play est compatible avec l'achat de produits depuis votre application (intégrée) ou en dehors (hors application). Pour que Google Play offre une expérience d'achat cohérente, quel que soit l'endroit où l'utilisateur achète votre produit, vous devez confirmer tous les achats reçus via la bibliothèque Google Play Billing dès que possible après avoir accordé le droit d'accès à l'utilisateur. Si vous ne confirmez pas un achat dans un délai de trois jours, l'utilisateur reçoit automatiquement un remboursement, et Google Play révoque l'achat. Pour les transactions en attente (nouveau dans la version 2.0), la période de trois jours commence lorsque l'achat passe à l'état PURCHASED et ne s'applique pas tant que la l'état de l'achat est PENDING.

Pour les abonnements, vous devez confirmer tout achat comportant un nouveau jeton d'achat. Cela signifie que tous les achats initiaux, les changements de forfait et les réinscriptions doivent être confirmés, mais vous n'avez pas besoin de confirmer les renouvellements ultérieurs. Pour déterminer si un achat doit être confirmé, vous pouvez consulter le champ de confirmation de l'achat.

L'objet Purchase inclut désormais une méthode isAcknowledged() qui indique si un achat a été confirmé. De plus, l'API Google Play Developer inclut des valeurs booléennes de confirmation pour Purchases.products et Purchases.subscriptions. Avant de confirmer un achat, veillez à utiliser ces méthodes pour déterminer si l'achat a déjà été confirmé.

Vous pouvez confirmer un achat en utilisant l'une des méthodes suivantes :

  • Pour les produits consommables, utilisez consumeAsync(), que vous trouverez dans l'API cliente.
  • Pour les produits qui ne sont pas consommables, utilisez acknowledgePurchase(), que vous trouverez dans l'API cliente.
  • Une nouvelle méthode acknowledge() est également disponible dans l'API Server.

BillingFlowParams.setSku() a été supprimé

La méthode BillingFlowParams#setSku(), désormais obsolète, a été supprimée dans cette version. Avant d'afficher des produits dans un parcours d'achat, vous devez maintenant appeler BillingClient.querySkuDetailsAsync(), en transmettant les objets SkuDetails à BillingFlowParams.Builder.setSkuDetails().

Pour obtenir des exemples de code, consultez Utiliser la bibliothèque Google Play Billing.

Compatibilité avec la charge utile du développeur

La version 2.0 de la bibliothèque Google Play Billing est compatible avec la charge utile du développeur, à savoir des chaînes arbitraires pouvant être associées aux achats. Contrairement à la charge utile du développeur dans AIDL, qui peut être spécifiée lors du lancement du parcours d'achat, vous ne pouvez associer un paramètre de charge utile de développeur à un achat que lorsque l'achat est confirmé ou consommé. Étant donné que les achats peuvent désormais être effectués en dehors de votre application, cette modification vous permet de toujours pouvoir ajouter une charge utile aux achats.

Pour accéder à la charge utile dans la nouvelle bibliothèque, les objets Purchase incluent maintenant une méthode getDeveloperPayload().

Cohérence des offres

Lorsque vous proposez un code SKU de remise, Google Play renvoie désormais le prix d'origine du code SKU afin que vous puissiez indiquer aux utilisateurs qu'ils bénéficient d'une remise.

SkuDetails contient deux nouvelles méthodes pour récupérer le prix d'origine du code SKU :

Transactions en attente

Avec la version 2.0 de la bibliothèque Google Play Billing, vous devez prendre en charge les achats nécessitant une action supplémentaire avant d'accorder un droit d'accès. Par exemple, un utilisateur peut choisir d'acheter votre produit intégré à l'application dans un magasin physique en espèces. Cela signifie que la transaction est effectuée en dehors de votre application. Dans ce scénario, vous ne devez accorder le droit d'accès qu'une fois que l'utilisateur a terminé la transaction.

Pour activer les achats en attente, appelez enablePendingPurchases() lors de l'initialisation de votre application.

Utilisez Purchase.getPurchaseState() pour déterminer si l'état d'achat est PURCHASED ou PENDING. Notez que vous ne devez accorder des droits d'accès que lorsque l'état est PURCHASED. Vous devez vérifier les mises à jour de l'état de Purchase en procédant comme suit :

  1. Lorsque vous démarrez votre application, appelez BillingClient.queryPurchases() pour récupérer la liste des produits non consommés associés à l'utilisateur.
  2. Appelez Purchase.getPurchaseState() sur chaque objet Purchase renvoyé.
  3. Implémentez la méthode onPurchasesUpdated() pour répondre aux modifications apportées aux objets Purchase.

De plus, l'API Google Play Developer inclut un état PENDING pour Purchases.products. Les transactions en attente ne sont pas compatibles avec les abonnements.

Cette version introduit également un nouveau type de notification en temps réel pour les développeurs, OneTimeProductNotification. Ce type de notification contient un seul message dont la valeur est ONE_TIME_PRODUCT_PURCHASED ou ONE_TIME_PRODUCT_CANCELED. Ce type de notification n'est envoyé que pour les achats associés à des modes de paiement retardés, tels que le paiement en espèces.

Lorsque vous confirmez des achats en attente, assurez-vous de ne confirmer que lorsque l'état de l'achat est PURCHASED et non PENDING.

Modifications apportées à l'API

La version 2.0 de la bibliothèque Google Play Billing contient plusieurs modifications d'API pour assurer la compatibilité avec les nouvelles fonctionnalités et clarifier les fonctionnalités existantes.

consommerAsync

consumeAsync() utilise désormais un objet ConsumeParams au lieu d'un objet purchaseToken. ConsumeParams contient la valeur purchaseToken ainsi qu'une charge utile facultative pour le développeur.

La version précédente de consumeAsync() a été supprimée dans cette version.

queryPurchaseHistoryAsync

Pour réduire le risque de confusion, queryPurchaseHistoryAsync() renvoie désormais un objet PurchaseHistoryRecord au lieu d'un objet Purchase. L'objet PurchaseHistoryRecord est identique à un objet Purchase, sauf qu'il ne reflète que les valeurs renvoyées par queryPurchaseHistoryAsync() et ne contient pas les champs autoRenewing, orderId et packageName. Notez que rien n'a changé avec les données renvoyées : queryPurchaseHistoryAsync() renvoie les mêmes données qu'auparavant.

Valeurs affichées dans BillingResult

Les API qui renvoyaient précédemment une valeur entière BillingResponse renvoient désormais un objet BillingResult. BillingResult contient l'entier BillingResponse ainsi qu'une chaîne de débogage que vous pouvez utiliser pour diagnostiquer les erreurs. La chaîne de débogage utilise les paramètres régionaux "en-US" et n'est pas destinée à être présentée aux utilisateurs finaux.

Correction de bugs

Bibliothèque Google Play Billing version 1.2.2 (07/03/2019)

La version 1.2.2 de la bibliothèque Google Play Billing est maintenant disponible. Cette version contient les modifications suivantes.

Correction de bugs

  • Correction d'un problème de thread introduit dans la version 1.2.1. Les appels en arrière-plan ne bloquent plus le thread principal.

Autres modifications

  • Bien que l'utilisation du thread principal soit toujours recommandée, vous pouvez désormais instancier la bibliothèque Google Play Billing à partir d'un thread en arrière-plan.
  • L'instanciation a été entièrement migrée vers le thread d'arrière-plan pour réduire les risques d'erreurs ANR.

Bibliothèque Google Play Billing version 1.2.1 (04/03/2019)

La version 1.2.1 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient les modifications suivantes.

Changements significatifs

Autres modifications

  • Ajout de constructeurs publics pour PurchasesResult et SkuDetailsResult afin de faciliter les tests.
  • Les objets SkuDetails peuvent utiliser une nouvelle méthode, getOriginalJson().
  • Tous les appels de service AIDL sont désormais gérés par des threads en arrière-plan.

Correction de bugs

  • Les écouteurs de rappel Null ne sont plus transmis aux API publiques.

Bibliothèque Google Play Billing version 1.2 (18/10/2018)

La version 1.2 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient les modifications suivantes.

Résumé des modifications

  • La bibliothèque Google Play Billing est désormais concédée sous licence en vertu du Contrat de licence du kit de développement logiciel Android.
  • Ajout de l'API launchPriceChangeConfirmationFlow, qui invite les utilisateurs à examiner la modification en attente du prix d'un abonnement.
  • Ajout d'un nouveau mode de calcul au prorata, DEFERRED, en cas de mise à niveau ou de retour à une version antérieure de l'abonnement d'un utilisateur.
  • Dans la classe BillingFlowParams, setSku() a été remplacé par setSkuDetails().
  • Corrections de bugs mineurs et optimisation du code.

Confirmation du changement de prix

Vous pouvez maintenant modifier le prix d'un abonnement dans la Google Play Console et inviter les utilisateurs à consulter et à accepter le nouveau prix lorsqu'ils accèdent à votre application.

Pour utiliser cette API, créez un objet PriceChangeFlowParams à l'aide de la méthode skuDetails du produit sur abonnement, puis appelez launchPriceChangeConfirmationFlow(). Implémentez PriceChangeConfirmationListener pour gérer le résultat une fois le flux de confirmation du changement de prix terminé, comme illustré dans l'extrait de code suivant :

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

Le flux de confirmation du changement de prix affiche une boîte de dialogue contenant les nouvelles informations tarifaires et demandant aux utilisateurs d'accepter le nouveau prix. Ce flux renvoie un code de réponse de type BillingClient.BillingResponse.

Nouveau mode de calcul au prorata

Lorsque vous mettez à niveau ou revenez à une version antérieure de l'abonnement d'un utilisateur, vous pouvez utiliser un nouveau mode de calcul au prorata, DEFERRED. Ce mode met à jour l'abonnement de l'utilisateur lors du prochain renouvellement. Pour en savoir plus sur la configuration de ce mode de calcul au prorata, consultez la section Configuration du mode de calcul au prorata.

Nouvelle méthode pour définir les détails des codes SKU

Dans la classe BillingFlowParams, la méthode setSku() a été abandonnée. Cette modification permet d'optimiser le flux de facturation Google Play Billing.

Lorsque vous créez une instance de BillingFlowParams dans votre client de facturation des achats in-app, nous vous recommandons de travailler directement avec l'objet JSON à l'aide de setSkuDetails(), comme indiqué dans l'extrait de code suivant :

Dans la classe de compilation BillingFlowParams, la méthode setSku() est obsolète. Utilisez plutôt la méthode setSkuDetails(), comme indiqué dans l'extrait de code suivant. L'objet transmis dans l'objet setSkuDetails() provient de la méthode querySkuDetailsAsync().

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Bibliothèque Google Play Billing version 1.1 (07/05/2018)

La version 1.1 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient les modifications suivantes.

Résumé des modifications

  • Ajout de la possibilité de spécifier un mode de calcul au prorata dans BillingFlowParams lors de la mise à niveau/de la rétrogradation d'un abonnement existant.
  • L'indicateur booléen replaceSkusProration dans BillingFlowParams n'est plus accepté. Utilisez replaceSkusProrationMode à la place.
  • launchBillingFlow() déclenche maintenant un rappel en cas d'échec des réponses.

Nouveaux comportements

La version 1.1 de la bibliothèque Google Play Billing contient les modifications de comportement suivantes.

Les développeurs peuvent définir replaceSkusProrationMode dans la classe BillingFlowParams

ProrationMode fournit des informations supplémentaires sur le type de calcul au prorata lors de la mise à niveau ou de la rétrogradation de l'abonnement d'un utilisateur.

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Actuellement, Google Play accepte les modes de calcul au prorata suivants :

IMMEDIATE_WITH_TIME_PRORATION Le remplacement prend effet immédiatement, et le nouveau délai d'expiration est calculé au prorata et crédité ou facturé à l'utilisateur. Il s'agit du comportement par défaut actuel.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE Le remplacement prend effet immédiatement, et le cycle de facturation reste le même. Le prix pour la période restante sera facturé.

Remarque : Cette option n'est disponible que pour la mise à niveau des abonnements.

IMMEDIATE_WITHOUT_PRORATION Le remplacement prend effet immédiatement, et le nouveau prix sera facturé lors de la prochaine récurrence. Le cycle de facturation reste le même.

replaceSkusProration n'est plus compatible avec la classe BillingFlowParams

Auparavant, les développeurs pouvaient définir un indicateur booléen pour facturer un montant au prorata pour une demande de mise à niveau d'abonnement. Étant donné que nous prenons en charge ProrationMode, qui contient des instructions de calcul au prorata plus détaillées, cette option booléenne n'est plus acceptée.

launchBillingFlow() déclenche maintenant un rappel en cas d'échec de réponse

La bibliothèque de facturation déclenche toujours le rappel PurhcasesUpdatedListener et renvoie un BillingResponse de manière asynchrone. La valeur de retour synchrone de BillingResponse est également conservée.

Correction de bugs

  • Le service s'arrête correctement en mode asynchrone lorsque le service est déconnecté.
  • Les objets param Builder ne modifient plus les objets créés.
  • Problème 68087141 : launchBillingFlow() déclenche maintenant le rappel en cas d'échec des réponses.

Bibliothèque Google Play Billing version 1.0 (19/09/2017, Annonce)

La version 1.0 de la bibliothèque Google Play Billing est désormais disponible. Cette version contient les modifications suivantes.

Changements significatifs

  • Autorisation de facturation intégrée dans le fichier manifeste de la bibliothèque. Il n'est plus nécessaire d'ajouter l'autorisation com.android.vending.BILLING dans le fichier manifeste Android.
  • Un nouveau compilateur a été ajouté à la classe BillingClient.Builder.
  • Introduction du modèle de compilateur pour la classe SkuDetailsParams à utiliser sur les méthodes d'interrogation des codes SKU.
  • Plusieurs méthodes d'API ont été mises à jour pour des raisons de cohérence (les mêmes noms et ordres d'arguments de retour).

Nouveaux comportements

La version 1.0 de la bibliothèque Google Play Billing contient les modifications de comportement suivantes.

Classe BillingClient.Builder

BillingClient.Builder est maintenant initialisé via le modèle newBuilder :

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

La méthode "launchBillingFlow" est maintenant appelée à l'aide d'une classe BillingFlowParams

Pour initier le flux de facturation d'un achat ou d'un abonnement, la méthode launchBillingFlow() reçoit une instance BillingFlowParams initialisée avec des paramètres spécifiques à la requête :

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

Nouvelle façon d'interroger les produits disponibles

Les arguments des méthodes queryPurchaseHistoryAsync() et querySkuDetailsAsync() ont été encapsulés dans un modèle de compilateur :

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

Pour plus de commodité et de cohérence au sein de notre API, le résultat est désormais renvoyé via un code de résultat et une liste d'objets SkuDetails au lieu d'une classe du wrapper :

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

Ordre des paramètres modifié pour la méthode onConsumeResponse().

L'ordre des arguments de onConsumeResponse dans l'interface ConsumeResponseListener a été modifié afin d'être cohérent dans notre API :

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

Objet PurchaseResult désencapsulé

PurchaseResult a été désencapsulé afin d'être cohérent dans notre API :

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

Correction de bugs

Preview développeur version 1 (12/06/2017, annonce)

L'aperçu pour les développeurs a été lancé afin de simplifier le processus de développement en ce qui concerne la facturation. Les développeurs peuvent ainsi concentrer leurs efforts sur l'implémentation d'une logique spécifique à l'application Android, telle que l'architecture de l'application et la structure de navigation.

La bibliothèque comprend plusieurs classes et fonctionnalités pratiques que vous pouvez utiliser lorsque vous intégrez vos applications Android à l'API Google Play Billing. La bibliothèque fournit également une couche d'abstraction en plus du service AIDL (Android Interface Definition Language) pour les développeurs, ce qui leur permet de définir plus facilement l'interface entre l'application et l'API Google Play Billing.