Notas de la versión de la biblioteca de Google Play Billing

Aquí se incluyen las notas de la versión de la Biblioteca de Facturación Google Play (PBL).

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

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

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 ReplacementMode para reemplazar ProrationMode.

    Ten en cuenta que ProrationMode todaví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 queryPurchases y launchPriceConfirmationFlow.

    Los métodos queryPurchases y launchPriceConfirmationFlow que antes se habían marcado como obsoletos ahora se quitaron de la Biblioteca de Facturación Play 6.0.0. Los desarrolladores deben usar queryPurchasesAsync en lugar de queryPurchases. Para conocer las alternativas de launchPriceConfirmationFlow, 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 como SERVICE_UNAVAILABLE.

  • Se actualizaron SERVICE_UNAVAILABLE y SERVICE_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_UNAVAILABLE en lugar de SERVICE_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/06/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

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

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 reemplazar BillingClient.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.
  • launchPriceChangeFlow dejó 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

Versión 4.0 de la Biblioteca de Facturación Google Play (18/5/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

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.1.0 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 PurchasesUpdatedListener con 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 ChildDirected y UnderAgeOfConsent.
  • Se quitaron los métodos obsoletos de carga útil para desarrolladores.
  • Se quitaron los métodos obsoletos BillingFlowParams.setAccountId() y BillingFlowParams.setDeveloperId().
  • Se quitaron los métodos obsoletos BillingFlowParams.setOldSkus(String oldSku) y BillingFlowParams.addOldSku(String oldSku).
  • Se agregaron anotaciones de nulabilidad.

Correcciones de errores

  • SkuDetails.getIntroductoryPriceCycles() ahora muestra int en lugar de String.
  • 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 Koltin.

Versión de la Biblioteca de Facturación Google Play 2.2.0 y compatibilidad con Unity (23/03/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 compra directa desde la aplicación de Unity pueden actualizarla ahora para aprovechar todas las funciones de la Biblioteca de Facturación Google Play 2 y facilitar las actualizaciones posteriores 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

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, setOldSku(String oldSku) dejará de estar disponible y se reemplazará por setOldSku(String oldSku, String purchaseToken) para evitar la ambigüedad cuando varias cuentas del dispositivo tengan 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ódigo DEVELOPER_ERROR en 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 cual los mensajes de depuración se mostraban como null en 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 reconoces 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 (novedad de la versión 2.0), el plazo de tres días comienza cuando la compra pasa al estado PURCHASED y no se aplica mientras está en el estado PENDING.

Para las suscripciones, debes reconocer cualquier compra que tenga un token de compra nuevo. Eso quiere decir que todas las compras iniciales, los cambios de planes y registros nuevos de facturación deben reconocerse, pero no es necesario que reconozcas 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 reconocimiento 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.

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 la 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:

  1. Cuando inicies tu app, llama a BillingClient.queryPurchases() para recuperar la lista de productos no destinados a usuarios finales asociados al usuario.
  2. Llama a Purchase.getPurchaseState() siempre que se muestre un objeto Purchase.
  3. Implementa el método onPurchasesUpdated() para responder a los cambios en objetos Purchase.

Además, la API de Google Play Developer incluye un estado PENDING para Purchases.products. Las transacciones pendientes no son compatibles con 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

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

Otros cambios

  • Se agregaron constructores públicos para PurchasesResult y SkuDetailsResult a fin de facilitar las pruebas.
  • Los objetos SkuDetails pueden 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 cuenta con la licencia del Acuerdo 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() por setSkuDetails().
  • 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 pedirles a los usuarios que revisen y acepten el precio nuevo cuando entran a la 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 muestra 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, que actualiza la suscripción del usuario en la siguiente renovación. 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 BillingFlowParams cuando actualizas/cambias a una versión anterior de una suscripción actual.
  • Ya no se admite la marca booleana replaceSkusProration de BillingFlowParams. En su lugar, usa replaceSkusProrationMode.
  • launchBillingFlow() ahora activa una devolución de llamada para respuestas fallidas.

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 objeto ProrationMode proporciona más detalles sobre el tipo de prorrateo cuando se actualiza la suscripción de un usuario o se la cambia a una versión inferior.

Kotlin

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

Java

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

En la actualidad, 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 configurar una marca booleana para cobrar un importe prorrateado por una solicitud de actualización de suscripción. Como se admite ProrationMode, que contiene una instrucción de prorrateo más detallada, 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 mostrará un objeto BillingResponse de manera asíncrona. El valor asíncrono de BillingResponse que se muestra también se conserva.

Correcciones de errores

  • Cuando el servicio se desconecta, sale como corresponde de manera anticipada en métodos asíncronos.
  • Los objetos de parámetro Builder ya no modifican objetos compilados.
  • Error 68087141: launchBillingFlow() ahora activa la devolución de llamada para respuestas fallidas.

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

  • Se incorporó el permiso de facturación dentro del manifiesto de la biblioteca. Ya no es necesario agregar el permiso com.android.vending.BILLING dentro 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 API para una mayor coherencia (los mismos nombres y ordenamientos de argumentos de retorno).

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 BillingFlowParams que se inició con los 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

Se unieron los argumentos de los métodos queryPurchaseHistoryAsync() y querySkuDetailsAsync() 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 a fin de mantener la coherencia en nuestra API, ahora se muestra el resultado mediante un código y una lista de objetos SkuDetails, a diferencia 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()

A fin de mantener la coherencia en nuestra API, se cambió el orden de los argumentos para onConsumeResponse de la interfaz ConsumeResponseListener:

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

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 integres 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 definir la interfaz entre la app y la API de Facturación Google Play.