Este documento contiene las notas de la versión de la Biblioteca de Facturación de Google Play.
Habilidades de Android
Ver en GitHubActualiza la Biblioteca de Facturación Play
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.Versión 9.1.0 de la Biblioteca de Facturación Google Play (18/6/2026)
Ya están disponibles la versión 9.1.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
- Nuevas APIs para la selección de facturación:
- Se agregó
BillingClient.getBillingChoiceInfoAsync()para recuperar información sobre las opciones de facturación disponibles para el usuario. - Se agregó la clase
BillingChoiceInfo, que contiene los detalles de la respuesta, incluidas las URLs de las imágenes y la información de lealtad. - Se agregó
GetBillingChoiceInfoParamspara configurar la solicitud. - Se agregó
BillingChoiceInfoResponseListenerpara recibir la devolución de llamada. - Se agregó la función de suspensión
BillingClient.getBillingChoiceInfo()de la extensión de Kotlin. - Se agregó
BillingClient.showBillingProgramInformationDialog()para mostrar un diálogo de información de un programa de facturación. - Se agregó
BillingProgramInformationDialogParamspara configurar el diálogo. - Se agregó
BillingProgramInformationDialogListenerpara recibir la devolución de llamada. - Se agregó
BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetailspara proporcionar detalles sobre la disponibilidad de la opción de facturación. - Se agregó
ChoiceScreenTypepara especificar el tipo de pantalla de selección.
- Se agregó
Versión 9.0.0 de la Biblioteca de Facturación Google Play (19/5/2026)
Ya están disponibles la versión 9.0.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin. Consulta la guía de migración de PBL 9 si quieres migrar desde las versiones anteriores de PBL.
Resumen de cambios
Se actualizaron los códigos de error de la actividad bloqueada de Play Store: Se actualizaron los códigos de error de las apps de Play Store bloqueadas. En los casos en que el sistema bloquea la app de Play Store (por ejemplo, en el modo infantil personalizado por el OEM), el código de respuesta cambió de
ERRORaBILLING_UNAVAILABLE. Además, en esos casos,BillingResultahora proporciona un mensaje de depuración que indica que Play Store está bloqueada.Actualización de nulabilidad para la facturación proporcionada por el desarrollador: Se actualizó el método
DeveloperProvidedBillingDetails.getLinkUri()para que sea@Nullable. Este cambio admite situaciones en las que el URI de vínculo directo para pagos externos no está disponible durante la etapa de selección de pago.Para controlar este cambio de forma segura, asegúrate de que tu código de integración controle los valores
nully de cadena vacía ("") del métodoDeveloperProvidedBillingDetails.getLinkUri()antes de analizar o iniciar intents del navegador.Se actualizó la
targetSdkVersiona 35.Ahora puedes usar los mensajes en la app para notificar a los usuarios sobre un próximo aumento de precio con solicitud de aceptación. Esto permite que los usuarios confirmen el aumento de precio sin salir de la app. El mensaje de un aumento de precio con solicitud de aceptación pendiente se muestra a partir del primer día en que el usuario puede aceptar el aumento de precio, y se muestra una vez cada 7 días como máximo.
Versión 8.3.0 de la Biblioteca de Facturación Google Play (23/12/2025)
Ya están disponibles la versión 8.3.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Nuevas APIs para pagos externos:
- Se agregaron clases para admitir el flujo de pagos externos:
- Se agregó
enableBillingProgram(EnableBillingProgramParams)para habilitar los pagos externos. - Se agregó
BillingFlowParams.Builder.enableDeveloperBillingOptionpara iniciar el flujo de pagos externos.
Mejoramos la categorización de errores para los abandonos del flujo de pagos externos:
- Si un usuario sale del flujo de compra para completar el pago en una app externa (como una billetera electrónica) y abandona la transacción sin regresar, el código de respuesta que se devuelve al cliente ahora es
BillingResponseCode.USER_CANCELED(1) con el mensaje de depuraciónBILLING_ACTIVITY_PAUSED(antes, el valor predeterminado eraBillingResponseCode.ERROR(6)).
- Si un usuario sale del flujo de compra para completar el pago en una app externa (como una billetera electrónica) y abandona la transacción sin regresar, el código de respuesta que se devuelve al cliente ahora es
Versión 8.2.1 de la Biblioteca de Facturación Google Play (15/12/2025)
Ya están disponibles la versión 8.2.1 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Correcciones de errores
- Se corrigió un error en
isBillingProgramAvailableAsyncycreateBillingProgramReportingDetailsAsync. Actualiza a la versión 8.2.1 para usar estas APIs que se introdujeron en la versión 8.2.0.
Versión 8.2.0 de la Biblioteca de Facturación Google Play (9/12/2025)
Ya están disponibles la versión 8.2.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Nuevas APIs para vínculos a contenido externo y ofertas externas:
- Se agregó
enableBillingProgrampara configurarBillingClientpara estos programas. - Se agregó
isBillingProgramAvailableAsyncpara determinar si el usuario cumple con los requisitos. - Se agregó
createBillingProgramReportingDetailsAsyncpara crear el token de transacción externa que se debe usar para los informes. - Se agregó
launchExternalLinkpara iniciar el vínculo externo a una oferta de contenido digital o una descarga de app.
- Se agregó
Cambios en el programa de ofertas externas:
- Se realizaron cambios en la política del programa de ofertas externas. Consulta los cambios en el programa para obtener más detalles. Para comprender cómo iniciar flujos de ofertas externas con las nuevas APIs, consulta la guía de integración.
- Se marcó como obsoleta la API de
BillingClient.Builder.enableExternalOffer. - Se marcó como obsoleta la API de
isExternalOfferAvailableAsync. - Se marcó como obsoleta la API de
createExternalOfferReportingDetailsAsync. - Se marcó como obsoleta la API de
showExternalOfferInformationDialog.
Versión 8.1.0 de la Biblioteca de Facturación Google Play (6/11/2025)
Ya están disponibles la versión 8.1.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Suscripciones suspendidas
Se agregó un parámetro nuevo al método
BillingClient.queryPurchasesAsync()para incluir las suscripciones suspendidas cuando se consultan las suscripciones. Las suscripciones suspendidas se siguen atribuyendo al usuario, pero no están activas, ya sea porque el usuario las pausó o porque se rechazó su forma de pago de renovación.El objeto
Purchaseque se muestra en el objeto de escucha devolveráisSuspended() = truepara cualquier suscripción suspendida. En este caso, no debes otorgar acceso a la suscripción comprada y, en su lugar, debes guiar al usuario al centro de suscripciones, donde puede administrar sus formas de pago o el estado de pausa para reactivar su suscripción.Actualizaciones de las suscripciones:
El objeto
BillingFlowParams.ProductDetailsParamsahora tiene el métodosetSubscriptionProductReplacementParams(), en el que puedes especificar información de reemplazo a nivel de productos específicos.El objeto
SubscriptionProductReplacementParamstiene dos métodos set:setOldProductId: Es el producto anterior que se debe reemplazar por el producto en elProductDetailsactual.setReplacementMode: Es el modo de reemplazo a nivel del elemento. Los modos son, en esencia, los mismos que SubscriptionUpdateParams, pero se actualizó la asignación de valores. Se introduce un nuevo modo de reemplazoKEEP_EXISTINGque te permite mantener sin cambios el programa de pagos existente para un elemento.
SubscriptionUpdateParams setSubscriptionReplacementMode dejará de estar disponible. En su lugar, deberías usar
SubscriptionProductReplacementParams.setReplacementMode.
Se actualizó
minSdkVersiona 23.Se habilitaron las APIs de pedidos anticipados para productos únicos.
La API de
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()que obtiene los detalles de los pedidos anticipados ya está disponible para su uso.La Biblioteca de Facturación Google Play ahora admite la versión 2.2.0 de Kotlin.
Versión 8.0.0 de la Biblioteca de Facturación Google Play (30/6/2025)
Ya están disponibles la versión 8.0.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Los elementos integrados en la app ahora se denominarán productos únicos.
Varias opciones de compra y ofertas para productos únicos
Ahora puedes tener varias opciones de compra y ofertas para tus productos únicos. Esto te brinda flexibilidad en la forma de vender tus productos y reduce la complejidad para administrarlos.
Se mejoró el método
queryProductDetailsAsync().Antes de la versión 8.0.0 de la PBL, el método
queryProductDetailsAsync()no devolvía los productos que no se podían recuperar. Esto puede deberse a motivos como que no se encuentra el producto o que no hay ofertas disponibles para el usuario. Con PBL 8.0.0, los productos no recuperados se devuelven con un nuevo código de estado a nivel del producto que proporciona información sobre los productos no recuperados. Ten en cuenta que hay un cambio en la firma deProductDetailsResponseListener.onProductDetailsResponse()que requiere cambios en tu app. Para obtener más información, consulta Cómo procesar el resultado.Reconexión automática del servicio
El nuevo parámetro del compilador
BillingClient.Builder.enableAutoServiceReconnection()permite que los desarrolladores habiliten la reconexión automática del servicio, lo que simplifica la administración de conexiones, ya que controla las reconexiones al servicio de Facturación de Play de forma automática y elimina la necesidad de llamar manualmente astartConnection()en caso de que se desconecte el servicio. Para obtener más información, consulta Cómo restablecer una conexión automáticamente.Códigos de respuesta secundaria para el método
launchBillingFlow().El BillingResult que se devuelve de
launchBillingFlow()ahora incluirá un campo de código de respuesta secundaria. Este campo solo se completará en algunos casos para proporcionar un motivo más específico de la falla. El campo de subrespuesta puede tener los siguientes valores:PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS: Se devuelve cuando los fondos del usuario son inferiores al precio del elemento que intenta comprar.USER_INELIGIBLE: Se devuelve cuando el usuario no cumple con los requisitos de elegibilidad configurados para una oferta de suscripción.NO_APPLICABLE_SUB_RESPONSE_CODE: Es el valor predeterminado que se devuelve cuando no se aplica ningún otro código de respuesta secundaria.
Se quitó el método
queryPurchaseHistory().Se quitó el método
queryPurchaseHistory()que antes se había marcado como obsoleto. Consulta Cómo consultar el historial de compras para obtener detalles sobre qué APIs alternativas usar en su lugar.Se quitó el método
querySkuDetailsAsync().Se quitó el método
querySkuDetailsAsync()que antes se había marcado como obsoleto. En su lugar, debes usar queryProductDetailsAsync.Se quitó el método
BillingClient.Builder.enablePendingPurchases().Se quitó el método
enablePendingPurchases()sin parámetros que antes se había marcado como obsoleto. En su lugar, debes usarenablePendingPurchases(PendingPurchaseParams params). Ten en cuenta que el objeto binarioenablePendingPurchases()obsoleto es funcionalmente equivalente aenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).Se quitó el método
queryPurchasesAsync()sobrecargado que toma un skuType.Se quitó el método
queryPurchasesAsync(String skuType, PurchasesResponseListener listener)que antes se había marcado como obsoleto. Como alternativa, usaqueryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener).
Versión 7.1.1 de la Biblioteca de Facturación Google Play (3/10/2024)
Ya están disponibles la versión 7.1.1 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Correcciones de errores
- Se corrigió un error en la Biblioteca de Facturación Play 7.1.0 relacionado con las pruebas de los códigos de respuesta de
BillingResult.
Versión 7.1.0 de la Biblioteca de Facturación Google Play (19/9/2024)
Ya están disponibles la versión 7.1.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
- Se mejoró la seguridad de subprocesos relacionada con el estado y la administración de la conexión.
- Se introdujeron cambios parciales para probar los códigos de respuesta
BillingResult, que se lanzaron por completo en la Biblioteca de Facturación Play 7.1.1. Para probar tu integración con esta función, deberás actualizar a la biblioteca de Facturación de Play 7.1.1. Existe un error que solo afectará a las aplicaciones que tengan habilitadas las pruebas de anulación de facturación y no afectará el uso normal. Para obtener más información, consulta Prueba los códigos de respuesta deBillingResult.
Versión 7.0.0 de la Biblioteca de Facturación Google Play (14/5/2024)
Ya están disponibles la versión 7.0.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Se agregaron APIs para admitir suscripciones en cuotas.
- Se agregó
ProductDetails.InstallmentPlanDetailspara los planes básicos de cuotas que los usuarios pueden comprar. Esta API ayuda a tu app a identificar el plan de cuotas y su configuración de compromiso para proporcionar información relacionada al usuario. Para obtener más información, consulta nuestra guía de cuotas de suscripción.
- Se agregó
Se agregaron
PendingPurchasesParamsyBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)para reemplazarBillingClient.Builder.enablePendingPurchases(), que dejó de estar disponible en esta versión.- El
enablePendingPurchases()obsoleto es funcionalmente equivalente aenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).
- El
Se agregaron APIs para admitir transacciones pendientes de planes prepagados de suscripción:
- Usa
PendingPurchasesParams.Builder.enablePrepaidPlans()junto conBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)para habilitar las transacciones pendientes de los planes prepagados de suscripción. Cuando agregues compatibilidad, asegúrate de que tu app también administre correctamente los ciclos de vida de las suscripciones. Para obtener más información, consulta nuestra guía sobre compras pendientes. - Se agregaron
Purchase.PendingPurchaseUpdateyPurchase.getPendingPurchaseUpdate()para recuperar la recarga, la actualización o el cambio a una versión inferior pendientes de una suscripción existente.
- Usa
Se quitaron
BillingClient.Builder.enableAlternativeBilling(),AlternativeBillingListeneryAlternativeChoiceDetails.- En su lugar, los desarrolladores deben usar
BillingClient.Builder.enableUserChoiceBilling()conUserChoiceBillingListeneryUserChoiceDetailsen la devolución de llamada del objeto de escucha.
- En su lugar, los desarrolladores deben usar
Se quitaron
BillingFlowParams.ProrationMode,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()yBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode().- En su lugar, los desarrolladores deben usar
BillingFlowParams.SubscriptionUpdateParams.ReplacementModeconBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int).
- En su lugar, los desarrolladores deben usar
Se quitó
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken().- En su lugar, los desarrolladores deben usar
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String).
- En su lugar, los desarrolladores deben usar
BillingClient.queryPurchaseHistoryAsync()dejó de estar disponible y se quitará en una versión futura. Los desarrolladores deben usar las siguientes alternativas:- Compras confirmadas y pendientes: Usa
BillingClient.queryPurchasesAsync()para recuperar las compras activas. - Compras consumidas: Los desarrolladores deben hacer un seguimiento de las compras consumidas en sus propios servidores.
- Compras canceladas: Usa la API para desarrolladores de voided-purchases.
- Para obtener más detalles, consulta Cómo consultar el historial de compras.
- Compras confirmadas y pendientes: Usa
BillingFlowParams.ProductDetailsParams.setOfferToken()ahora arroja una excepción cuando los desarrolladores especifican unofferTokenvacío.Se actualizó
minSdkVersiona 21 ytargetSdkVersiona 34.
Versión 6.2.1 de la Biblioteca de Facturación Google Play (16/4/2024)
Ya están disponibles la versión 6.2.1 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
- Se corrigió un error en
BillingClient.showAlternativeBillingOnlyInformationDialog()por el que es posible que no se llame aAlternativeBillingOnlyInformationDialogListeneren ciertos casos cuando se completa el diálogo.
Versión 6.2.0 de la Biblioteca de Facturación Google Play (6/3/2024)
Ya están disponibles la versión 6.2.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
- Se agregaron APIs para admitir ofertas externas.
- Se agregó
BillingClient.Builder.enableExternalOffer()para habilitar la capacidad de proporcionar ofertas externas. - Se agregó
BillingClient.isExternalOfferAvailableAsync()para verificar la disponibilidad de la función de proporcionar ofertas externas. - Se agregó
BillingClient.showExternalOfferInformationDialog()para mostrar un diálogo de información a los usuarios antes de dirigirlos fuera de la app. - Se agregó
BillingClient.createExternalOfferReportingDetailsAsync()para crear una carga útil obligatoria para informar las transacciones realizadas a través de ofertas externas.
- Se agregó
Versión 6.1.0 de la Biblioteca de Facturación Google Play (14/11/2023)
Ya están disponibles la versión 6.1.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
- Se agregaron APIs para admitir solo facturación alternativa (es decir, sin elección del usuario).
- Se agregó
BillingClient.Builder.enableAlternativeBillingOnly()para habilitar funcionalmente la capacidad de ofrecer solo facturación alternativa. - Se agregó
BillingClient.isAlternativeBillingOnlyAvailableAsync()para verificar la disponibilidad de ofrecer solo facturación alternativa. - Se agregó
BillingClient.showAlternativeBillingOnlyInformationDialog()para mostrar un diálogo de información y notificar a los usuarios cuándo se usa solo la facturación alternativa. - Se agregó
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()para crear una carga útil obligatoria para informar las transacciones realizadas solo a través de la facturación alternativa.
- Se agregó
- Se actualizaron las APIs de facturación a elección del usuario.
- Se agregó
UserChoiceBillingListenerpara reemplazar AlternativeBillingListener, que se marcó como obsoleto. - Se agregó
UserChoiceDetailspara reemplazarAlternativeChoiceDetails, que se marcó como obsoleto. - Se agregó
BillingClient.Builder.enableUserChoiceBilling()para reemplazarBillingClient.Builder.enableAlternativeBilling(), que se marcó como obsoleto.
- Se agregó
- Se agregó
BillingClient.getBillingConfigAsync()para recuperar el país de Google Play.
Versión 6.0.1 de la Biblioteca de Facturación Google Play (22/6/2023)
Ya están disponibles la versión 6.0.1 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Actualiza la Biblioteca de Facturación Play para que sea compatible con Android 14.
Versión 6.0 de la Biblioteca de Facturación Google Play (10/05/2023)
Ya están disponibles la versión 6.0.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Se agregó un nuevo enum
ReplacementModepara reemplazarProrationMode.Ten en cuenta que
ProrationModetodavía está disponible por motivos de retrocompatibilidad.Se quitó el ID de pedido para las compras
PENDING.Anteriormente, el ID de pedido siempre se creaba incluso si la compra estaba pendiente. A partir de la versión 6.0.0, no se creará un ID de pedido para las compras pendientes; el ID de pedido se completará después de que la compra cambie al estado
PURCHASED.Se quitaron los métodos
queryPurchasesylaunchPriceConfirmationFlow.Los métodos
queryPurchasesylaunchPriceConfirmationFlowque antes se habían marcado como obsoletos ahora se quitaron de la Biblioteca de Facturación Play 6.0.0. Los desarrolladores deben usarqueryPurchasesAsyncen lugar dequeryPurchases. Para conocer las alternativas delaunchPriceConfirmationFlow, consulta Cambios de precio.Se agregó un nuevo código de respuesta de un error de red.
Se agregó un nuevo código de respuesta de un error de red,
NETWORK_ERROR, a partir de la versión 6.0.0 de PBL. Este código se muestra cuando se produce un error debido a un problema de conexión de red. Estos errores de conexión de red se informaron con anterioridad comoSERVICE_UNAVAILABLE.Se actualizaron
SERVICE_UNAVAILABLEySERVICE_TIMEOUT.A partir de la versión 6.0.0 de la PBL, los errores debidos al tiempo de espera del procesamiento se mostrarán como
SERVICE_UNAVAILABLEen lugar deSERVICE_TIMEOUT, como sucedía en versiones anteriores de la PBL.El comportamiento de estas últimas permanecerá igual.
Se quitó
SERVICE_TIMEOUT.A partir de la versión 6.0.0 de la PBL, no se mostrará
SERVICE_TIMEOUT. Las versiones anteriores de la PBL seguirán mostrando este código.Se agregó un registro adicional.
La versión 6 de la Biblioteca de Facturación Play incluye registros adicionales, lo que brinda información sobre el uso de la API (como instancias de buen funcionamiento y errores) y sobre problemas de conexión del servicio. Esta información se usará para mejorar el rendimiento de la Biblioteca de Facturación Play y la asistencia en caso de errores.
Versión 5.2.1 de la Biblioteca de Facturación Google Play (22/6/2023)
Ya están disponibles la versión 5.2.1 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Actualiza la Biblioteca de Facturación Play para que sea compatible con Android 14.
Versión 5.2 de la Biblioteca de Facturación Google Play (06/04/2023)
Ya están disponibles la versión 5.2.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
- Se agregaron clases para admitir flujos de facturación alternativos en dispositivos móviles o tablets para los usuarios de Corea del Sur:
- Se agregó el método
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()para especificar el ID de transacción externo de la suscripción de origen. - Se agregó el método
BillingClient.Builder.enableAlternativeBilling()para permitir que los usuarios de Corea del Sur seleccionen una opción de facturación alternativa.
Versión 5.1 de la Biblioteca de Facturación Google Play (31/10/2022)
Ya está disponible la versión 5.1.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Esta versión incluye los siguientes cambios.
Resumen de cambios
- Se agregó el método
ProductDetails.SubscriptionOfferDetails.getOfferId()para recuperar el ID de la oferta. - Se agregó el método
ProductDetails.SubscriptionOfferDetails.getBasePlanId()para recuperar el ID del plan básico. - Se actualizó la
targetSdkVersiona 31.
Versión 5.0 de la Biblioteca de Facturación Google Play (11/5/2022)
Ya están disponibles la versión 5.0.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Esta versión incluye los siguientes cambios.
Resumen de cambios
- Se introdujo un nuevo modelo para suscripciones, incluidas nuevas entidades que te permiten crear múltiples ofertas para un solo producto de suscripción. Para obtener más información, consulta la guía de migración.
- Se agregó
BillingClient.queryProductDetailsAsync()para reemplazarBillingClient.querySkuDetailsAsync(). - Se agregó el método
setIsOfferPersonalized()para los requisitos de divulgación de precios personalizados de la UE. Si quieres obtener más información para usar este método, consulta Cómo indicar un precio personalizado. - Se quitó
queryPurchases(), que dejó de estar disponible, y se reemplazó por queryPurchasesAsync en la Biblioteca de Facturación Google Play 4.0.0. launchPriceChangeFlowdejó de estar disponible y se quitará en una versión futura. Para obtener más información sobre las alternativas, consulta Inicia un flujo de confirmación de cambio de precio.- Se quitó
setVrPurchaseFlow(), que se usaba anteriormente cuando se creaba una instancia de un flujo de compra. En versiones anteriores, este método redireccionaba al usuario para que completara la compra en su dispositivo Android. Una vez que quites este método, los usuarios completarán la compra mediante el flujo de compra estándar.
Versión 4.1 de la Biblioteca de Facturación Google Play (23/02/2022)
Ya están disponibles la versión 4.1.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Esta versión incluye los siguientes cambios.
Resumen de cambios
- Se agregó
BillingClient.showInAppMessages()para ayudar a controlar los rechazos de pagos de suscripciones. Si quieres obtener más información sobre el uso de mensajes desde la app para manejar los rechazos de pagos de suscripciones, consulta Cómo controlar los rechazos de pagos.
Versión 4.0 de la biblioteca de Facturación Google Play (18/05/2021)
Ya están disponibles la versión 4.0.0 de la Biblioteca de Facturación Google Play y las extensiones de Kotlin.
Resumen de cambios
Se agregó
BillingClient.queryPurchasesAsync()para reemplazarBillingClient.queryPurchases(), que se quitará en una versión futura.Se agregó un nuevo modo de reemplazo de suscripciones
IMMEDIATE_AND_CHARGE_FULL_PRICE.Se agregó el método
BillingClient.getConnectionState()para recuperar el estado de conexión de la Biblioteca de Facturación Play.Se actualizaron Javadoc y la implementación para indicar en qué subproceso se puede llamar a un método y qué resultados del subproceso se publican.
Se agregó
BillingFlowParams.Builder.setSubscriptionUpdateParams()como una nueva forma de iniciar las actualizaciones de suscripciones. Esto reemplaza aBillingFlowParams#getReplaceSkusProrationMode,BillingFlowParams#getOldSkuPurchaseToken,BillingFlowParams#getOldSku,BillingFlowParams.Builder#setReplaceSkusProrationModeyBillingFlowParams.Builder#setOldSku, que se quitaron.Se agregaron
Purchase.getQuantity()yPurchaseHistoryRecord.getQuantity().Se agregaron
Purchase#getSkus()yPurchaseHistoryRecord#getSkus(). Reemplazan aPurchase#getSkuyPurchaseHistoryRecord#getSkuque se quitaron.Se quitaron
BillingFlowParams#getSku,BillingFlowParams#getSkuDetailsyBillingFlowParams#getSkuType.
Versión 3.0.3 de la Biblioteca de Facturación Google Play (12/03/2021)
La versión 3.0.3 de la Biblioteca de Facturación Google Play, la extensión de Kotlin y el complemento de Unity ahora están disponibles.
Corrección de errores de Java y Kotlin
- Se corrigió la fuga de memoria cuando se llama a
endConnection(). - Soluciona el problema cuando las apps que usan la Biblioteca de Facturación Google Play utilizan el modo de lanzamiento de una sola tarea. Se activa una devolución de llamada
onPurchasesUpdated()cuando se reanuda una app desde el launcher de Android y el diálogo de facturación estaba visible antes de la suspensión.
Corrección de errores de Unity
- Actualiza a la versión 3.0.3 de Java para corregir la fuga de memoria y resolver el problema que evita que se realicen compras cuando se reanuda una app desde el launcher de Android y el diálogo de facturación estaba visible antes de la suspensión.
Versión 3.0.2 de la Biblioteca de Facturación Google Play (24/11/2020)
Ya están disponibles la versión 3.0.2 de la Biblioteca de Facturación Google Play y la nueva extensión de Kotlin.
Correcciones de errores
- Se corrigió un error en la extensión de Kotlin por el cual la corrutina fallaba y mostraba el error "Ya se reanudó".
- Se corrigieron las referencias sin resolver cuando se usa la extensión de Kotlin con la versión 1.4 o una posterior de la biblioteca kotlinx.coroutines.
Versión 3.0.1 de la Biblioteca de Facturación Google Play (30/09/2020)
Ya están disponibles la versión 3.0.1 de la Biblioteca de Facturación Google Play y la nueva extensión de Kotlin.
Correcciones de errores
- Se corrigió un error por el que, si una app se cerraba o se restablecía durante el flujo de facturación, no era posible llamar a
PurchasesUpdatedListenercon el resultado de la compra.
Versión 3.0 de la biblioteca de Facturación Google Play (08/06/2020)
La versión 3.0.0 de la Biblioteca de Facturación Google Play, la extensión de Kotlin y el complemento de Unity ahora están disponibles.
Resumen de cambios
- Se quitó la compatibilidad con SKU recompensados.
- Se quitaron los parámetros
ChildDirectedyUnderAgeOfConsent. - Se quitaron los métodos obsoletos de carga útil para desarrolladores.
- Se quitaron los métodos obsoletos
BillingFlowParams.setAccountId()yBillingFlowParams.setDeveloperId(). - Se quitaron los métodos obsoletos
BillingFlowParams.setOldSkus(String oldSku)yBillingFlowParams.addOldSku(String oldSku). - Se agregaron anotaciones de nulabilidad.
Correcciones de errores
SkuDetails.getIntroductoryPriceCycles()ahora muestrainten lugar deString.- Se corrigió un error en el que se consideraba que el flujo de facturación tenía parámetros adicionales, incluso si no se configuraban parámetros adicionales.
Versión 2.2.1 de la Biblioteca de Facturación Google Play (20/05/2020)
Ya está disponible la versión 2.2.1 de la Biblioteca de Facturación Google Play.
Correcciones de errores
- Se actualizó la versión predeterminada de la Biblioteca de Facturación Play para Java de la que depende la extensión de Kotlin.
Versión de la Biblioteca de Facturación Google Play 2.2.0 y compatibilidad con Unity (23/3/2020)
La versión 2.2.0 de Facturación Google Play ofrece funciones que ayudan a los desarrolladores a garantizar que las compras se atribuyan al usuario correcto. Estos cambios reemplazan la necesidad de crear soluciones personalizadas en función de la carga útil del desarrollador. Como parte de esta actualización, la función de la carga útil para desarrolladores dejó de estar disponible y se quitará en una versión futura. Para obtener más información, incluidas las alternativas recomendadas, consulta Carga útil para desarrolladores.
Biblioteca de Facturación Google Play 2 para Unity
Además de las versiones actuales para Java y Kotlin de la Biblioteca de Facturación Google Play 2, lanzamos una versión de la biblioteca para usar con Unity. Los desarrolladores de juegos que usan la API de compras directas desde la app de Unity pueden actualizarla ahora para aprovechar todas las funciones de la Biblioteca de Facturación Google Play 2 y facilitar las actualizaciones posteriores a las versiones futuras de la Biblioteca de Facturación Google Play.
Para obtener más información, consulta Cómo usar la Facturación Google Play con Unity.
Resumen de cambios
- Biblioteca de Facturación Google Play para Java
- En el objeto
AcknowledgePurchaseParams, dejaron de estar disponibles los métodossetDeveloperPayload()ygetDeveloperPayload(). - En el objeto
ConsumeParams, dejaron de estar disponibles los métodossetDeveloperPayload()ygetDeveloperPayload(). - En el objeto
BillingFlowParams, se cambió el nombre desetAccountId()porsetObfuscatedAccountId()y se documentó la restricción de 64 caracteres y la restricción que no permitía el uso de información de identificación personal (PII) en este campo.setAccountId()se marcó como obsoleto y se quitará en una versión futura de la biblioteca. - En
BillingFlowParams, se agregósetObfuscatedProfileId(), que funciona de manera similar asetObfuscatedAccountId(). Para obtener más información, consulta Actualizaciones y alternativas de la carga útil para desarrolladores. - En
Purchase, se agregó el métodogetAccountIdentifiers()para mostrar los identificadores de cuentas ofuscados establecidos enBillingFlowParams. - En
BillingClient, el métodoloadRewardedSku()se marcó como obsoleto como parte de la baja de los SKU recompensados.
- En el objeto
Versión de la Biblioteca de Facturación Google Play 2.1.0 y extensión de Kotlin 2.1.0 (10/12/2019)
Ya están disponibles la versión 2.1.0 de la Biblioteca de Facturación Google Play y la nueva extensión de Kotlin. La extensión ofrece alternativas de API idiomáticas para el consumo de Kotlin, con mejores corrutinas y garantías contra valores nulos. Para ver ejemplos de código, consulta Cómo usar la Biblioteca de Facturación Google Play.
Esta versión incluye los siguientes cambios.
Resumen de cambios
- En
BillingFlowParams, se dio de bajasetOldSku(String oldSku)y se reemplazó porsetOldSku(String oldSku, String purchaseToken)para eliminar la ambigüedad cuando varias cuentas del dispositivo tienen el mismo SKU.
Versión 2.0.3 de la Biblioteca de Facturación Google Play (05/08/2019)
Ya está disponible la versión 2.0.3 de la Biblioteca de Facturación Google Play.
Correcciones de errores
- Se corrigió un error por el cual
querySkuDetailsAsync()fallaba ocasionalmente y mostraba el códigoDEVELOPER_ERRORen lugar de un resultado correcto.
Versión 2.0.2 de la Biblioteca de Facturación Google Play (08/07/2019)
Ya está disponible la versión 2.0.2 de la Biblioteca de Facturación Google Play. En ella, se incluyen actualizaciones de la documentación de referencia y no se modifica la funcionalidad de la biblioteca.
Versión 2.0.1 de la Biblioteca de Facturación Google Play (06/06/2019)
Ya está disponible la versión 2.0.1 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Correcciones de errores
- Se corrigió un error por el que los mensajes de depuración se mostraban como
nullen algunos casos. - Se corrigió un posible problema de fuga de memoria.
Versión 2.0 de la Biblioteca de Facturación Google Play (07/05/2019)
Ya está disponible la versión 2.0 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Las compras deben reconocerse en un plazo de tres días
Google Play admite la compra de productos desde adentro de la app (integrados en la aplicación) y fuera de ella. Para que Google Play garantice una experiencia de compra coherente, sin importar dónde compre tu producto el usuario, debes reconocer todas las compras recibidas mediante la Biblioteca de Facturación Google Play tan pronto como sea posible después de otorgar autorización al usuario. Si no confirmas una compra en un plazo de tres días, el usuario recibirá automáticamente un reembolso, y Google Play revocará la compra. En el caso de las transacciones pendientes (nuevo en la versión 2.0), el período de tres días comienza cuando la compra pasa al estado PURCHASED y no se aplica mientras la compra está en estado PENDING.
Para las suscripciones, debes reconocer cualquier compra que tenga un token de compra nuevo. Esto significa que se deben confirmar todas las compras iniciales, los cambios de plan y los registros nuevos, pero no es necesario confirmar las renovaciones posteriores. Para determinar si es necesario procesar una compra, puedes buscar el campo de procesamiento en la compra.
El objeto Purchase ahora incluye un método isAcknowledged(), que indica si se procesó una compra. Además, la API de Google Play Developer incluye valores booleanos de confirmación para Purchases.products y Purchases.subscriptions.
Antes de confirmar una compra, asegúrate de usar estos métodos para determinar si ya se confirmó.
Para reconocer una compra, usa uno de los siguientes métodos:
- En el caso de los productos para usuarios finales, usa
consumeAsync(), disponible en la API del cliente. - En el caso de los productos que no son para usuarios finales, usa
acknowledgePurchase(), disponible en la API del cliente. - También hay un método nuevo
acknowledge(), disponible en la API del servidor.
Se quitó la compatibilidad con BillingFlowParams.setSku()
En esta versión, se quitó el método BillingFlowParams#setSku(), que previamente dejó de estar disponible. Antes de procesar los productos de un flujo de compras, ahora debes llamar a BillingClient.querySkuDetailsAsync(), que pasará el objeto SkuDetails resultante a BillingFlowParams.Builder.setSkuDetails().
Para ver ejemplos de código, consulta Cómo usar la Biblioteca de Facturación Google Play.
Se admite la carga útil de desarrollador
En la versión 2.0 de la Biblioteca de Facturación Google Play, se agregó compatibilidad con la carga útil de desarrolladores; strings arbitrarias que pueden adjuntarse a compras. Puedes adjuntar un parámetro de carga útil de desarrollador a una compra, pero solo cuando se reconoce o consume la compra. La carga útil de desarrollador en AIDL es distinta, ya que allí se puede especificar cuando se inicia el flujo de compra. Como ahora las compras pueden iniciarse desde afuera de tu app, este cambio garantiza que siempre tengas la oportunidad de agregar una carga útil a las compras.
Para acceder a la carga útil en la biblioteca nueva, los objetos Purchase ahora incluyen un método getDeveloperPayload().
Ofertas coherentes
Cuando ofrezcas un SKU con descuento, Google Play también mostrará el precio original del SKU para que puedas indicarles a los usuarios que están recibiendo un descuento.
SkuDetails incluye dos métodos nuevos para recuperar el precio del SKU original.
getOriginalPriceAmountMicros()- Devuelve el precio original sin formato del SKU antes del descuento.
getOriginalPrice()- Devuelve el precio original con un formato de moneda adicional.
Transacciones pendientes
Con la versión 2.0 de la Biblioteca de Facturación Google Play, debes admitir compras en las que se requieren acciones adicionales antes de otorgar autorización. Por ejemplo, un usuario puede elegir comprar tu producto integrado en la aplicación en una tienda física con dinero en efectivo. Esto significa que la transacción se completa fuera de tu app. En este caso, deberías otorgar derechos solo después de que el usuario haya completado la transacción.
Para habilitar compras pendientes, llama a enablePendingPurchases() como parte de la inicialización de tu app.
Usa Purchase.getPurchaseState() para determinar si el estado de compra es PURCHASED o PENDING. Ten en cuenta que debes otorgar autorización solo cuando el estado es PURCHASED. Debes verificar las actualizaciones de estado de Purchase haciendo lo siguiente:
- Cuando inicies tu app, llama a
BillingClient.queryPurchases()para recuperar la lista de productos no consumidos asociados con el usuario. - Llama a
Purchase.getPurchaseState()siempre que se muestre un objetoPurchase. - Implementa el método
onPurchasesUpdated()para responder a los cambios en objetosPurchase.
Además, la API de Google Play Developer incluye un estado PENDING para
Purchases.products.
No se admiten las transacciones pendientes para las suscripciones.
Esta versión también incorpora un tipo nuevo de notificación para desarrolladores en tiempo real: OneTimeProductNotification, que incluye un mensaje simple cuyo valor es ONE_TIME_PRODUCT_PURCHASED o ONE_TIME_PRODUCT_CANCELED. Este tipo de notificación se envía solamente para compras asociadas a formas de pago retrasadas, como dinero en efectivo.
Cuando reconozcas compras pendientes, asegúrate de hacerlo solo cuando el estado de la compra sea PURCHASED y no PENDING.
Cambios en la API
La versión 2.0 de la Biblioteca de Facturación Google Play incluye varios cambios en la API para admitir funciones nuevas y explicar funciones existentes.
consumeAsync
consumeAsync() ahora toma un objeto ConsumeParams en lugar de un objeto purchaseToken. ConsumeParams incluye el objeto purchaseToken, además de una carga útil opcional para desarrolladores.
En esta versión, se quitó la versión anterior de consumeAsync().
queryPurchaseHistoryAsync
Para evitar confusiones, queryPurchaseHistoryAsync() ahora muestra un objeto PurchaseHistoryRecord en lugar de un objeto Purchase. El objeto PurchaseHistoryRecord es igual al objeto Purchase, con la diferencia de que refleja solamente los valores que muestra queryPurchaseHistoryAsync() y no incluye los campos autoRenewing, orderId ni packageName. Ten en cuenta que no se hicieron cambios en los datos obtenidos: queryPurchaseHistoryAsync() muestra los mismos datos que antes.
Valores resultantes de BillingResult
Las API que antes mostraban un valor entero BillingResponse ahora muestran un objeto BillingResult. BillingResult incluye el valor entero BillingResponse y también una string de depuración que puedes usar para el diagnóstico de errores. La string de depuración usa una configuración regional "en-US" y no está pensada para mostrarse a usuarios finales.
Correcciones de errores
SkuDetails.getIntroductoryPriceAmountMicros()ahora muestra un objetolongen lugar de un objetoString.
Versión 1.2.2 de la Biblioteca de Facturación Google Play (07/03/2019)
Ya está disponible la versión 1.2.2 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Correcciones de errores
- Se corrigió un problema relacionado con los subprocesos que se introdujo en la versión 1.2.1. Las llamadas en segundo plano ya no bloquean el subproceso principal.
Otros cambios
- Aunque todavía se recomienda usar el subproceso principal, ahora puedes crear una instancia de la Biblioteca de Facturación Google Play desde un subproceso en segundo plano.
- La creación de instancias se migró por completo al subproceso en segundo plano para reducir las probabilidades de provocar un ANR.
Versión 1.2.1 de la Biblioteca de Facturación Google Play (04/03/2019)
Ya está disponible la versión 1.2.1 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Cambios relevantes
- Se agregó compatibilidad con los productos recompensados. Para obtener más información sobre las opciones de monetización, consulta Cómo agregar funciones específicas de productos entregados como recompensa.
Otros cambios
- Se agregaron constructores públicos para
PurchasesResultySkuDetailsResultcon el objetivo de facilitar las pruebas. - Los objetos
SkuDetailspueden usar un método nuevo:getOriginalJson(). - Ahora, los subprocesos en segundo plano manejan todas las llamadas de servicio de AIDL.
Correcciones de errores
- Los objetos de escucha de devolución de llamadas nulos ya no se pasan a API públicas.
Versión 1.2 de la Biblioteca de Facturación Google Play (18/10/2018)
Ya está disponible la versión 1.2 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Resumen de cambios
- La Biblioteca de Facturación Google Play ahora tiene licencia según el Contrato de licencia del kit de desarrollo de software de Android.
- Se agregó la API de
launchPriceChangeConfirmationFlow, que solicita a los usuarios que revisen un cambio pendiente de un precio de suscripción. - Se agregó compatibilidad con un nuevo modo de prorrateo,
DEFERRED, cuando se actualiza la suscripción de un usuario o se pasa a la versión anterior de esta. - En la clase
BillingFlowParams, se reemplazósetSku()porsetSkuDetails(). - Se corrigieron errores menores y se optimizó el código.
Confirmación de cambio de precio
Ahora puedes cambiar el precio de una suscripción en Google Play Console y solicitarles a los usuarios que revisen y acepten el precio nuevo cuando ingresen a tu app.
Para esta API, crea un objeto PriceChangeFlowParams con el objeto skuDetails del producto de suscripción y, luego, llama a launchPriceChangeConfirmationFlow(). Implementa el objeto PriceChangeConfirmationListener para controlar el resultado una vez finalizado el flujo de confirmación del cambio de precio, tal como se muestra en el siguiente fragmento de código:
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. } });
El flujo de confirmación de cambio de precio muestra un cuadro de diálogo con la información del precio nuevo, además de solicitar a los usuarios que lo acepten. Este flujo devuelve un código de respuesta del tipo BillingClient.BillingResponse.
Nuevo modo de prorrateo
Cuando actualizas o cambias a una versión anterior de una suscripción del usuario, puedes usar un modo de prorrateo nuevo: DEFERRED, Este modo actualiza la suscripción del usuario cuando se renueva.
Para obtener más información y así configurar este modo de prorrateo, consulta Cómo configurar el modo de prorrateo.
Nuevo método para configurar la información de SKU
En la clase BillingFlowParams, dejó de estar disponible el método setSku().
El objetivo de ese cambio es optimizar el flujo de la Facturación Google Play.
Cuando construyas una instancia nueva de BillingFlowParams en tu cliente de facturación integrada, te recomendamos trabajar con el objeto JSON directamente usando setSkuDetails(), tal como se muestra en el siguiente fragmento de código:
En la clase BillingFlowParams del compilador, dejó de estar disponible el método setSku(). En su lugar, usa el método setSkuDetails(), tal como se muestra en el siguiente fragmento de código. El objeto que se pasó al objeto setSkuDetails() proviene del método 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(); }
Versión 1.1 de la Biblioteca de Facturación Google Play (07/05/2018)
Ya está disponible la versión 1.1 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Resumen de cambios
- Se agregó compatibilidad para especificar un modo de prorrateo en
BillingFlowParamscuando actualizas/cambias a una versión anterior de una suscripción actual. - Ya no se admite la marca booleana
replaceSkusProrationdeBillingFlowParams. En su lugar, usareplaceSkusProrationMode. launchBillingFlow()ahora activa una devolución de llamada para respuestas con errores.
Cambios en el comportamiento
En la versión 1.1 de la Biblioteca de Facturación Google Play, se incluyen los siguientes cambios de comportamiento.
Los desarrolladores pueden configurar replaceSkusProrationMode en la clase BillingFlowParams
Un ProrationMode proporciona más detalles sobre el tipo de prorrateo cuando se actualiza o cambia a una versión inferior la suscripción de un usuario.
Kotlin
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Java
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Google Play admite los siguientes modos de prorrateo:
IMMEDIATE_WITH_TIME_PRORATION |
El reemplazo se realiza de inmediato, y la nueva hora de vencimiento se prorratea y se acredita, o bien se le cobra al usuario. Actualmente, este es el comportamiento predeterminado. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
El reemplazo se realiza inmediatamente, y el ciclo de facturación no cambia. Se cobrará el precio del período restante.
Nota: Esta opción solo está disponible para la actualización de suscripciones. |
IMMEDIATE_WITHOUT_PRORATION |
El reemplazo se realiza inmediatamente, y el nuevo precio se cobra cuando vuelve a aparecer la suscripción. El ciclo de facturación no cambia. |
Ya no se admite replaceSkusProration en la clase BillingFlowParams
Antes, los desarrolladores podían establecer una marca booleana para cobrar un importe prorrateado por una solicitud de actualización de suscripción. Dado que admitimos ProrationMode,
que contiene instrucciones de prorrateo más detalladas, ya no se admite
esta marca booleana.
launchBillingFlow() ahora activa una devolución de llamada para respuestas fallidas
La Biblioteca de Facturación siempre activará la devolución de llamada PurhcasesUpdatedListener y devolverá un BillingResponse de forma asíncrona. También se conserva el valor de retorno síncrono de BillingResponse.
Correcciones de errores
- Cuando el servicio se desconecta, sale como corresponde de manera anticipada en métodos asíncronos.
- Los objetos de parámetro
Builderya no modifican objetos compilados. - Error 68087141:
launchBillingFlow()ahora activa la devolución de llamada para las respuestas con errores.
Versión 1.0 de la Biblioteca de Facturación Google Play (19/09/2017, anuncio)
Ya está disponible la versión 1.0 de la Biblioteca de Facturación Google Play. Esta versión incluye los siguientes cambios.
Cambios importantes
- Permiso de facturación incorporado en el manifiesto de la biblioteca Ya no es necesario agregar el permiso
com.android.vending.BILLINGdentro del manifiesto de Android. - Se agregó un compilador nuevo a la clase
BillingClient.Builder. - Se introdujo el patrón del compilador para la clase
SkuDetailsParams, que se usará en los métodos a fin de consultar SKU. - Se actualizaron varios métodos de la API para mantener la coherencia (los mismos nombres y orden de los argumentos de devolución).
Cambios en el comportamiento
La versión 1.0 de la Biblioteca de Facturación Google Play incluye los siguientes cambios de comportamiento.
Clase BillingClient.Builder
BillingClient.Builder ahora se inicializa a través del patrón newBuilder:
Kotlin
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Java
billingClient = BillingClient.newBuilder(context).setListener(this).build();
Ahora el método launchBillingFlow se llama con una clase BillingFlowParams
Para iniciar el flujo de facturación de una compra o suscripción, el método launchBillingFlow() recibe una instancia de BillingFlowParams inicializada con parámetros específicos de la solicitud:
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());
Hay una nueva forma de buscar productos disponibles
Los argumentos para los métodos queryPurchaseHistoryAsync() y querySkuDetailsAsync() se unieron en un patrón de compilador:
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() {...})
Para tu comodidad y para que sea coherente en toda nuestra API, ahora el resultado se devuelve a través del código de resultado y una lista de objetos SkuDetails en lugar de la clase de wrapper anterior:
Kotlin
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Java
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Se cambió el orden de los parámetros en el método onConsumeResponse()
Se cambió el orden de los argumentos de onConsumeResponse de la interfaz ConsumeResponseListener para que sea coherente en toda nuestra API:
Kotlin
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Java
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Se desencapsuló el objeto PurchaseResult
Para mantener la coherencia en nuestra API, se desencapsuló PurchaseResult:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Correcciones de errores
- Se quitó el código de respuesta en el paquete PURCHASES_UPDATED
- Cómo solucionar problemas de ProxyBillingActivity y PurchasesUpdatedListener durante la rotación del dispositivo
Lanzamiento de Developer Preview 1 (12/06/2017, anuncio)
Se lanzó la Versión preliminar para desarrolladores con el objetivo de simplificar el proceso de desarrollo en lo relacionado con la facturación, lo que les permitirá a los desarrolladores enfocarse en implementar lógica específica de la app para Android, como la estructura de navegación y la arquitectura de la aplicación.
La biblioteca incluye varias clases y funciones convenientes que puedes usar cuando integras tus apps para Android con la API de Facturación Google Play. La biblioteca también proporciona una capa de abstracción sobre el servicio de lenguaje de definición de la interfaz de Android (AIDL), lo que facilita a los desarrolladores la definición de la interfaz entre la app y la API de Facturación Google Play.