Ce document explique comment migrer de la bibliothèque Google Play Billing (PBL) 7 ou 8 vers la PBL 9 et comment intégrer les nouvelles fonctionnalités.
Pour obtenir la liste complète des modifications apportées à la version 9.0.0, consultez les notes de version.
Présentation
PBL 9 contient des améliorations apportées aux API existantes, ainsi que la suppression des API précédemment obsolètes. Cette version de la bibliothèque introduit également un contexte d'erreur plus riche grâce à de nouveaux codes de sous-réponse.
Rétrocompatibilité pour la mise à niveau de PBL
Pour migrer vers PBL 9, vous devez mettre à jour ou supprimer certaines de vos références d'API existantes dans votre application, comme décrit dans les notes de version et plus loin dans ce guide de migration.
Mettre à niveau PBL 7 ou 8 vers PBL 9
Pour passer de PBL 7 ou 8 à PBL 9, procédez comme suit :
Mettez à jour la version de la dépendance de la bibliothèque Play Billing dans le fichier
build.gradlede votre application.dependencies { def billing_version = "9.0.0" implementation "com.android.billingclient:billing:$billing_version" }Si vous utilisez Kotlin, le module KTX de la bibliothèque Google Play Billing contient des extensions et des coroutines Kotlin qui vous permettent d'écrire du code Kotlin idiomatique lors de l'utilisation de la bibliothèque Google Play Billing. Pour inclure ces extensions dans votre projet, ajoutez la dépendance suivante au fichier
build.gradlede votre application, comme indiqué ci-dessous :dependencies { val billing_version = "9.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(Applicable uniquement pour la mise à niveau de PBL 7 vers PBL 9). Mettez à jour l'implémentation de la méthode
queryProductDetailsAsync.La signature de la méthode
ProductDetailsResponseListener.onProductDetailsResponsea changé, ce qui nécessite des modifications dans votre application pour l'implémentation dequeryProductDetailsAsync. Pour en savoir plus, consultez Afficher les produits disponibles à l'achat.Gérez les API supprimées.
Le tableau suivant liste les API supprimées et les API alternatives correspondantes que vous devez utiliser dans votre application.
Mettre à niveau
PBL 9 n'est plus compatible avec les API listées dans le tableau ci-dessous. Si votre implémentation utilise l'une de ces API supprimées, consultez le tableau pour connaître les API alternatives correspondantes.
Suppression de l'API précédemment obsolète Autre API à utiliser API queryPurchaseHistoryAsync Consultez Interroger l'historique des achats. Si vous utilisiez queryPurchaseHistoryAsync pour déterminer l'éligibilité aux essais sans frais, vous devez maintenant utiliser ProductDetails.getSubscriptionOfferDetails() pour déterminer les offres auxquelles un utilisateur est éligible. BillingClient.SkuType BillingClient.ProductType. Les constantes de type de produit INAPP et SUBS restent fonctionnellement similaires aux constantes de type SKU obsolètes. SkuDetails ProductDetails. Il s'agit du nouveau modèle de données compatible avec les produits ponctuels. SkuDetailsParams Utilisez QueryProductDetailsParams avec queryProductDetailsAsync. SkuDetailsResponseListener Utilisez ProductDetailsResponseListener avec queryProductDetailsAsync. QueryPurchaseHistoryParams - Utilisez queryPurchasesAsync pour les achats actifs ou en attente.
- Suivez les achats consommés sur vos serveurs de backend.
- Utilisez l'API Voided Purchases côté serveur pour les achats annulés ou invalidés.
getSkuDetailsList et setSkuDetailsList Utilisez BillingFlowParams.Builder.setProductDetailsParamsList. querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases() (API sans paramètres) enablePendingPurchases(PendingPurchasesParams params)
Notez que la méthode enablePendingPurchases() obsolète est fonctionnellement équivalente àenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync Mettre à niveau
Le tableau suivant liste les API supprimées dans PBL 9 et les API alternatives correspondantes que vous devez utiliser dans votre application.
Suppression de l'API précédemment obsolète Autre API à utiliser BillingClient.SkuType BillingClient.ProductType. Les constantes de type de produit INAPP et SUBS restent fonctionnellement similaires aux constantes de type SKU obsolètes. SkuDetails ProductDetails. Il s'agit du nouveau modèle de données compatible avec les produits ponctuels. SkuDetailsParams Utilisez QueryProductDetailsParams avec queryProductDetailsAsync. SkuDetailsResponseListener Utilisez ProductDetailsResponseListener avec queryProductDetailsAsync. QueryPurchaseHistoryParams - Utilisez queryProductDetailsAsync pour les achats actifs ou en attente.
- Suivez les achats consommés sur vos serveurs de backend.
- Utilisez l'API Voided Purchases côté serveur pour les achats annulés ou invalidés.
getSkuDetailsList et setSkuDetailsList Utilisez BillingFlowParams.Builder.setProductDetailsParamsList. (Recommandé) Activez la reconnexion automatique du service.
La bibliothèque Play Billing peut tenter de rétablir automatiquement la connexion au service si un appel d'API est effectué alors que le service est déconnecté. Pour en savoir plus, consultez Activer la reconnexion automatique du service.
Gérez les nouveaux codes de sous-réponse.
Le BillingResult renvoyé par
launchBillingFlow()inclut désormais un champ de code de sous-réponse. Ce champ ne sera renseigné que dans certains cas pour fournir une raison plus spécifique de l'échec. Le champ de sous-réponse peut avoir les valeurs suivantes :PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS: renvoyé lorsque les fonds de l'utilisateur sont inférieurs au prix de l'article qu'il tente d'acheter.USER_INELIGIBLE: renvoyé lorsque l'utilisateur ne répond pas aux critères d'éligibilité configurés pour une offre d'abonnement.NO_APPLICABLE_SUB_RESPONSE_CODE: valeur par défaut renvoyée lorsqu'aucun autre code de sous-réponse n'est applicable.
Étape de migration : Mettez à jour votre gestion des résultats
PurchasesUpdatedListenerou équivalente pour reconnaître ces codes de sous-réponse spécifiques et y répondre afin d'améliorer l'expérience utilisateur. Par exemple, en vous invitant à corriger vos modes de paiement ou en affichant un message d'erreur spécifique.Sensibilisation à la reclassification des codes d'erreur.
Dans les cas où l'application Play Store est bloquée par le système (par exemple, dans le mode enfant personnalisé par l'OEM), le code de réponse de PBL est passé de
ERRORàBILLING_UNAVAILABLE.Étape de migration : assurez-vous que votre logique de gestion des exceptions tient compte de ce changement et ne repose pas sur la réception d'une erreur générique dans ces scénarios spécifiques.
Gérez la possibilité de valeur nulle de
DeveloperProvidedBillingDetails.getLinkUri().Si vous utilisez
DeveloperProvidedBillingDetailsdans le cadre d'une intégration de paiements externes,getLinkUri()devient@Nullable.Étape de migration : Pour gérer ce changement de manière sécurisée, assurez-vous que votre code d'intégration gère à la fois les valeurs
nullet les valeurs de chaîne vide ("") de la méthodeDeveloperProvidedBillingDetails.getLinkUri()avant d'analyser ou de lancer les intents du navigateur. Exemple :Kotlin
val linkUri = details.getLinkUri() if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)) context.startActivity(intent) }Java
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }Modifications facultatives.
Prise en charge des achats en attente pour les forfaits prépayés. Pour en savoir plus, consultez Gérer les abonnements et les transactions en attente.
Abonnements avec versements virtuels Pour en savoir plus, consultez Intégration des abonnements avec paiements échelonnés.