Ciclo de vida de compras únicas

Los productos de compras únicas tienen un ciclo de vida más simple que los productos de suscripción, pero aún existen varios estados y eventos de transición que tu backend necesita para poder controlarlas de forma correcta.

Figura 1: Estados del ciclo de vida y eventos de transición para compras únicas.

Nuevas compras de productos únicos

Después de que el usuario complete el flujo de facturación, tu app puede ver información sobre la compra nueva de una de las siguientes maneras:

Después de recibir la compra nueva, usa el método getPurchaseState o purchases.products.get in Play Developer API para determinar el estado de pago de esa compra.

Notificaciones para desarrolladores en tiempo real

Cuando un usuario compra o cancela la compra de un producto único, Google Play envía un mensaje OneTimeProductNotification. Para actualizar el estado de compra del backend, usa el token de compra proporcionado en el objeto OneTimeProductNotification para llamar al método purchases.products.get. Este método proporciona el estado de compra y consumo más reciente, según un token de compra.

Debes controlar las RTDN relacionadas con las transacciones en tu backend seguro.

Controla las transacciones completadas

Cuando un usuario completa la compra de un producto único, Google Play envía un mensaje OneTimeProductNotification con el tipo ONE_TIME_PRODUCT_PURCHASED. Cuando recibas esta RTDN, procesa la compra como se describe en Procesa las compras de productos únicos en tu backend.

Controla las transacciones canceladas

Cuando se cancela la compra de un producto único, Google Play envía un mensaje OneTimeProductNotification con el tipo ONE_TIME_PRODUCT_CANCELED si configuraste la recepción de notificaciones para desarrolladores en tiempo real. Por ejemplo, esto puede ocurrir si el usuario no completa el pago dentro del plazo requerido o si el desarrollador o la solicitud del cliente revoca la compra. Cuando tu servidor de backend reciba esta notificación, llama al método purchases.products.get para obtener el estado de compra más reciente y, luego, actualiza el backend según corresponda, incluidos los derechos del usuario.

Si se reembolsa un producto único que se compró en el estado Purchased, también se te informará mediante la API de Voided Purchases.

Procesa las compras de productos únicos en tu backend

Si detectaste una compra nueva a través de una RTDN de ONE_TIME_PRODUCT_PURCHASED, o recibiste una notificación en la app a través de PurchasesUpdatedListener o de la recuperación manual de compras en el método onResume() de tu app, debes procesar la compra nueva. Te recomendamos que controles el procesamiento de compras en tu backend para mejorar la seguridad.

Sigue estos pasos para procesar una nueva compra única:

  1. Consulta el extremo purchases.products.get para obtener el estado de compra de un producto único más reciente. Para llamar a este método para una compra, necesitas el purchaseToken correspondiente desde tu app o desde la RTDN de ONE_TIME_PRODUCT_PURCHASED.
  2. Llama a getPurchaseState() y asegúrate de que el estado de compra sea PURCHASED.
  3. Verifica la compra.
  4. Otórgale al usuario acceso al contenido. La cuenta de usuario asociada con la compra se puede identificar con el campo obfuscatedExternalAccountId de purchases.products.get, si se configuró con setObfuscatedAccountId() cuando se realizó la compra.
    1. Para las compras de productos no consumibles, confirma la entrega del contenido mediante una llamada al método purchases.products.acknowledge. Para verificar que no se haya confirmado la compra con anterioridad, consulta el campo acknowledgementState.
    2. Si el producto es consumible, llama al método purchases.products.consume para marcar el artículo como consumido, de modo que el usuario pueda volver a comprarlo después de consumirlo. Este método también confirma la compra.

También existen métodos de confirmación de compras y consumo disponibles en la biblioteca de Play Billing que te permiten procesar compras de tu app, pero te recomendamos que controles el procesamiento en tu backend, si tienes uno, para realizar una implementación más segura.