La suscripción con complementos te permite agrupar varios productos de suscripción que se pueden comprar, facturar y administrar juntos. Tus suscripciones existentes al catálogo de productos se pueden ofrecer sin problemas como complementos sin ninguna especificación por adelantado ni configuración adicional. Puedes iniciar un flujo de compra con varios productos de suscripción existentes y venderlos como complementos.
Consideraciones
Ten en cuenta los siguientes puntos cuando uses la función de suscripción con complementos:
La suscripción con complementos solo es compatible con los planes básicos con renovación automática.
Todos los artículos de la compra deben tener el mismo período de facturación recurrente. Por ejemplo, no puedes tener una suscripción con facturación anual con complementos con facturación mensual.
Puedes tener un máximo de 50 elementos en una suscripción con la compra de complementos.
Esta función no está disponible en las regiones de India (IN) y Corea del Sur (KR).
Cómo realizar la integración con la Biblioteca de Facturación Play
En esta sección, se describe cómo integrar la función de suscripción con complementos con la Biblioteca de Facturación Play (PBL). Se da por sentado que estás familiarizado con los pasos iniciales de integración de PBL, como agregar la dependencia de PBL a tu app, inicializar BillingClient y conectarte a Google Play. En esta sección, se enfocan los aspectos de integración de PBL que son específicos de la suscripción con complementos.
Cómo iniciar un flujo de compra
Para iniciar un flujo de compra de una suscripción con complementos, sigue estos pasos:
Recupera todos los elementos de tu suscripción con el método
BillingClient.queryProductDetailsAsync
.Establece el objeto
ProductDetailsParams
para cada elemento.El elemento representado por el objeto
ProductDetailsParams
especifica elProductDetails
que indica el elemento de suscripción y unofferToken
que selecciona una suscripción específicabase plan
ooffer
.Especifica los detalles del artículo en el método
BillingFlowParams.Builder.setProductDetailsParamsList
. La claseBillingFlowParams
especifica los detalles de un flujo de compra.En el siguiente ejemplo, se muestra cómo iniciar el flujo de facturación para una compra de suscripción con varios artículos:
Java
BillingClient billingClient = …; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ArrayList
productDetailsList = new ArrayList<>(); productDetailsList.add(productDetails1); productDetailsList.add(productDetails2); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Reglas aplicables a los artículos de la compra
- Para garantizar que las fechas de renovación de los complementos se alineen con el elemento base, Google Play puede insertar un cargo prorrateado después de cualquier fase de prueba o precio de introducción.
- La elegibilidad de las ofertas se evaluará por separado para cada artículo.
Cómo procesar las compras
El procesamiento de la suscripción con complementos es el mismo que el procesamiento de las compras de un solo artículo, como se describe en Cómo integrar la biblioteca de Facturación Google Play en tu app. La única diferencia es que el usuario puede recibir varios derechos con una sola compra. Una compra de suscripción con complementos muestra varios elementos que se pueden recuperar con Purchase.getProducts()
en la Biblioteca de Facturación Google Play y, luego, la lista lineItems
en purchases.subscriptionsv2.get
de la API de Google Play Developer.
Modifica las suscripciones con complementos
Cualquier cambio en tu suscripción con complementos se realizará a una versión superior o inferior. Para obtener más información, consulta Cómo actualizar o cambiar a una versión inferior de las suscripciones.
Para cambiar o restablecer una compra existente de suscripción con complementos en tu app, debes llamar a la API de launchBillingFlow
con parámetros adicionales y asegurarte de lo siguiente:
- Siempre llama a
setOldPurchaseToken
con el token de compra de la compra de suscripción actual. - Para actualizar, cambiar a una versión inferior o cambiar de categoría el elemento base, llama a
setSubscriptionReplacementMode
para especificar cómo se debe controlar el cambio de plan entre los elementos base de la suscripción anterior y la nueva compra de suscripción con complementos. De lo contrario, no es necesario configurar este parámetro. - Cuando no se cambia el elemento base, puedes llamar a
setSubscriptionReplacementMode
para aplicar un comportamiento de prorrateo específico. Para conocer las reglas aplicables en este caso, consulta Permite que el usuario vuelva a suscribirse o cambie de plan dentro de la misma suscripción. - Los complementos nuevos se aplicarán de inmediato con un cargo prorrateado para alinear la próxima fecha de renovación con el elemento básico de la suscripción.
- Los complementos quitados vencerán al final de sus períodos de facturación actuales.
- Cuando inicies el flujo de facturación, deberás especificar todos los elementos activos de la suscripción con complementos, excepto los que se quitarán, junto con los complementos nuevos.
En la siguiente muestra, se muestra cómo llamar a la API de launchBillingFlow
cuando se cambia una compra existente de suscripción con complementos:
Java
BillingClient billingClient = …; int replacementMode =…; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ProductDetailsParams productDetails3 = ...; ArrayListnewProductDetailsList = new ArrayList<>(); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) // No need to set if change does not affect the base item. .setSubscriptionReplacementMode(replacementMode) .build()) .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Situaciones de modificación de suscripciones
En la siguiente tabla, se enumeran las diversas situaciones de modificación de la suscripción con complementos y el comportamiento correspondiente.
Elementos existentes | Elementos modificados | ¿Necesitas configurar el modo de reemplazo? | Comportamiento |
---|---|---|---|
A (elemento base), B | A (elemento base) | No | El elemento B está programado para su eliminación diferida. |
A | A (elemento base), B | No | El artículo B se agrega de inmediato con un cargo prorrateado. |
A (elemento base), B | A (elemento base), C | No |
|
A (elemento base), B | B (artículo base) | No | A está programado para una eliminación diferida. |
A (elemento base), B | C (elemento base) | Sí |
|
A (elemento base), B | C (elemento base), B | Sí | El reemplazo de A -> C depende de setSubscriptionReplacementMode . |
A (elemento base), B | C (elemento base), D | Sí |
|
Notificaciones para desarrolladores en tiempo real
El campo subscriptionId
no se proporciona en RTDN para las compras de suscripciones con complementos, que contienen derechos de varios artículos.
En su lugar, puedes usar las APIs de Play Developer para obtener la compra y ver los derechos de los elementos asociados.
Cambios de precios para los suscriptores existentes
Cambiar los precios de las suscripciones para los suscriptores existentes de una suscripción con compra de complementos es similar a cambiar los precios de las suscripciones de un solo artículo, como se describe en Cómo cambiar los precios de las suscripciones. Sin embargo, existen algunas limitaciones y diferencias funcionales, como se describe en esta sección.
Finaliza una cohorte de precios heredados
El cierre de una cohorte heredada también afecta a las suscripciones con compras de complementos. Se aplican las siguientes reglas:
Todos los aumentos de precio con solicitud de aceptación pendientes deben tener el mismo tiempo de renovación con el precio nuevo. Si un elemento de una suscripción con compra de complementos tiene un aumento de precio con solicitud de aceptación que el usuario aún no confirma, se ignorará cualquier aumento de precio con solicitud de aceptación nuevo para otros elementos de la compra, a menos que tenga el mismo tiempo de renovación de la aplicación de precio nuevo que el aumento de precio existente en estado OUTSTANDING. Una vez que el usuario confirme el aumento de precio, se registrarán los cambios de precio más recientes. Además, los usuarios solo pueden aceptar todos los aumentos de precios con solicitud de aceptación no confirmados a la vez.
Ejemplo:
- Considera una suscripción con complementos (artículos A y B) que se renueva el 7 de cada mes.
- El artículo A tiene una migración de precios en curso de USD 7 a USD 10, y se espera que el aumento de precio se aplique el 7 de julio.
- El 2 de junio, comienza una nueva migración de precios de USD 5 a USD 6 para el artículo B. Dado que el aumento de precio con solicitud de aceptación comienza 37 días después de la migración, el aumento de precio más temprano para el artículo B será el 7 de agosto.
En esta situación, hasta que el usuario acepte el cambio de precio del artículo A (hasta que esté en el estado CONFIRMED), el cambio de precio del artículo B no se registrará para esta compra de suscripción, y SubscriptionPurchaseV2 no mostrará los detalles del cambio de precio del artículo B. Después de que el usuario confirme el cambio de precio del artículo A, comienza el cambio de precio del artículo B. El usuario recibe el aumento de precio con solicitud de aceptación del artículo B solo después de aceptar el aumento con solicitud de aceptación del artículo A.
El correo electrónico de Google Play contiene una lista de todos los artículos con aumentos o disminuciones de precios que se aplicarán el mismo día.
Cancela una suscripción con complementos
Los usuarios pueden cancelar la compra completa de una suscripción con complementos en el Centro de suscripciones de Play, y solo puedes cancelar la compra completa de una suscripción con complementos mediante la API de Google Play Developer.
Cuando se cancela una compra de suscripción sin revocarla, ninguno de los elementos de la compra se renovará automáticamente, pero el usuario seguirá teniendo acceso a los elementos con derechos hasta que finalicen los períodos de facturación correspondientes.
Cómo revocar y reembolsar suscripciones con complementos
A continuación, se incluyen algunos de los lineamientos para revocar y reembolsar suscripciones:
Usa Play Console para emitir un reembolso basado en el importe de un pedido específico sin revocar el acceso a la suscripción.
Llama a
orders.refund
para reembolsar por completo los pagos de suscripción específicos que realizó el usuario sin revocar el acceso a la suscripción.Llama a
purchases.subscriptionsv2.revoke
para revocar de inmediato el acceso a todos los elementos de la suscripción. Con esta API, puedes hacer lo siguiente:Revoca el acceso a todos los artículos y proporciona un reembolso prorrateado.
Cuando se revoque una suscripción con complementos mediante reembolsos prorrateados, se emitirá un reembolso por el pedido más reciente de cada elemento con un importe prorrateado en función del tiempo restante hasta la próxima renovación.
Revoca el acceso a todos los elementos y proporciona un reembolso total.
Revoca el acceso de un artículo con un reembolso total del artículo.
Cómo revocar un elemento individual de una suscripción con complementos
Para revocar elementos individuales de una suscripción con complementos sin revocar la compra completa, llama a purchases.subscriptionsv2.revoke
con el campo ItemBasedRefund
establecido en RevocationContext
. El productId
del artículo que se debe revocar y reembolsar se puede establecer en el campo ItemBasedRefund
.
El campo ItemBasedRefund
se puede configurar para compras con uno o más elementos de suscripción con renovación automática.
- Si aún quedan artículos activos en la compra de la suscripción después de revocar el artículo especificado en
ItemBasedRefund
, solo se revocará el artículo y se reembolsará por completo sin interrumpir el estado de la suscripción. - Si no quedan elementos activos en la compra de la suscripción después de revocar el elemento especificado en
ItemBasedRefund
, se revocará el elemento, se reembolsará por completo y se cancelará la suscripción.
Consideraciones
- Cuando se usa
ItemBasedRefund
, solo se puede revocar un elemento a la vez. Se puede llamar a la solicitud varias veces si se deben revocar diferentes elementos. - Cuando la compra de la suscripción se encuentra en cualquiera de los estados de rechazo de pago o el artículo especificado en
ItemBasedRefund
no es de tu propiedad o está vencido, se bloquea el rechazo del artículo. - No se admite la baja de artículos en la suscripción prepagada.
Vencimiento del artículo durante el rechazo del pago
En el caso de una compra de suscripción con complementos, es posible que algunas renovaciones solo deban extender un subconjunto de derechos de elementos, sin afectar a los elementos con una fecha de vencimiento futura.
Independientemente de los artículos que participen en una renovación, si se rechaza el pago de la renovación, la compra general de la suscripción entrará en el período de gracia y la retención de la cuenta, como se describe en la siguiente documentación.
Selección del período de recuperación
Como el período de gracia en sí aún otorga el derecho del usuario, cuando se compra una suscripción con complementos, se rechaza el pago de la renovación, se selecciona el elemento con el período de gracia mínimo de todos los elementos activos y se aplican su período de gracia y el período de suspensión de la cuenta como el período de recuperación para esta renovación.
Los elementos activos incluyen los elementos que estaban activos en la compra de una suscripción con complementos justo antes del intento de renovación, excluyen los elementos agregados recientemente (que no tendrán derechos hasta después de la recuperación) y excluyen los elementos que ya no están activos debido a la eliminación o el rechazo.
Se aplica la configuración de retención de la cuenta del elemento con el período de gracia mínimo seleccionado. Si hay más de un artículo con el período de gracia mínimo, pero con diferentes períodos de retención de la cuenta, se aplica el período de retención más largo.
Período de gracia
Cuando se rechace el pago de la renovación de una suscripción, la compra de la suscripción entrará en el estado de período de gracia. Durante el período de gracia, el usuario seguirá teniendo acceso a todos los elementos activos del período de renovación anterior. Después del período de gracia, si no se corrigió la forma de pago, se suspenderá toda la compra de la suscripción. Si otros elementos alcanzan su fecha de renovación durante el período de gracia, se iniciará un nuevo intento de cargo para esos elementos una vez que la suscripción se recupere del rechazo del pago.
Suspensión de la cuenta
Mientras la compra de la suscripción esté retenida en la cuenta, se suspenderá el acceso a todos los elementos de la suscripción hasta que se recupere el pago.
Si se recupera la suscripción suspendida, la compra de la suscripción seguirá existiendo tal como está. Si no se recupera, vencerán los elementos con rechazo de pago y se reanudará el acceso a los demás elementos durante el resto de sus períodos de facturación.
Ejemplo:
Un usuario tiene una suscripción Mi plan básico que se renueva el 1 de cada mes y, el 15 de agosto, agrega un plan complementario de USD 10 por mes con una prueba gratuita de siete días. Ninguno de los artículos tiene configurado un período de gracia, y ambos tienen un período de suspensión de la cuenta de 30 días.
El 22 de agosto, se le cobra al usuario USD 2.90 (10 × 9/31) para prorratear hasta el 31 de agosto, pero la forma de pago del usuario vence antes y la suscripción se rechaza el 22 de agosto.
Cuando la suscripción entra en suspensión de la cuenta debido al rechazo del pago, el usuario no tiene acceso a ninguno de los elementos de la suscripción con complementos. El tiempo restante de los elementos que no se renovarán se les devolverá a los usuarios cuando la suscripción salga de la suspensión de la cuenta, ya sea porque se recuperó o canceló el pago.
En el ejemplo anterior, una suscripción entra en suspensión de la cuenta el 22 de agosto.
Si la cuenta se recupera el 25 de agosto, antes de la fecha de renovación general el 1 de septiembre, el usuario recupera el acceso a Mi Base Plan y al Plan de complementos el mismo día. La próxima fecha de facturación se cambió al 4 de septiembre.
Si la cuenta no se recupera después de 30 días, la suscripción se cancelará el 21 de septiembre, y el usuario perderá el acceso al Plan complementario y reanudará el acceso al Plan básico hasta el 30 de septiembre.
En este ejemplo, debes obtener el expiryTime
actualizado para TODOS los elementos de la suscripción con complementos, ya que algunos elementos pueden reanudar su derecho después del período de gracia y la suspensión de la cuenta.
Informes y conciliación financieros
Usa el informe de ingresos para conciliar tus suscripciones activas con las transacciones en Play. Cada línea de pedido de la transacción tiene un ID de pedido. Si las compras representan varios artículos, los informes Ingresos y Ventas estimadas incluirán filas separadas para cada transacción, como cargos, tarifas, impuestos y reembolsos, para cada artículo involucrado.
Para los paneles de Play Console, haz lo siguiente:
Las estadísticas de ingresos que se presentan en la sección Informes financieros de la consola se desglosan por elementos.
La administración de pedidos refleja la compra de una suscripción con complementos y muestra listas detalladas de lo que se compró. En la administración de pedidos, puedes revocar, cancelar o reembolsar por completo la compra de un usuario.