Todos los artículos
Guía práctica8 min de lectura

Apple y Google reembolsan una tienda a la vez, así que tu suscripción multiplataforma tiene que cortar el acceso en todas las demás

Cuando Apple o Google reembolsan una suscripción multiplataforma, tu app de Android, tu app de iPhone y tu web no se enteran por sí solas. Así puedes vincular cada compra a una sola cuenta, revocar el derecho de acceso correcto y dejar de pagar por servir a usuarios reembolsados.

Un iPhone, un teléfono Android y un portátil uno al lado del otro sobre un escritorio, cada uno con sesión iniciada en la misma cuenta de una suscripción multiplataforma

Puntos clave

  • La App Review Guideline 3.1.3(b) de Apple permite que las apps que funcionan en varias plataformas den acceso a contenido y suscripciones adquiridos en otras plataformas o en la web del desarrollador, siempre que esos artículos también estén disponibles como compras dentro de la app.
  • Apple y Google solo reembolsan compras hechas en su propia tienda, así que un reembolso de Apple en una suscripción multiplataforma no llega a la facturación de Google Play ni a la web del cliente. El servidor del desarrollador tiene que retirar el acceso que concedió en cada plataforma.
  • Apple envía una notificación REFUND a través de App Store Server Notifications V2 cuando reembolsa un consumible, un no consumible, una suscripción no renovable o una suscripción de renovación automática, y deja claro que el desarrollador es responsable de guardar, vigilar y actuar sobre cada transacción reembolsada.
  • El appAccountToken de Apple es un UUID que el desarrollador adjunta a una compra dentro de la app, y el endpoint Set App Account Token de la App Store Server API puede añadirlo más tarde a compras hechas fuera de la app, como un código de oferta canjeado.
  • El setObfuscatedAccountId de Google Play vincula una compra a una cuenta de la app del desarrollador, tiene un límite de 64 caracteres y provoca el bloqueo de compras si contiene datos personales en texto claro, como un correo electrónico.
  • La Voided Purchases API de Google Play informa de las compras reembolsadas y con contracargo con un orderId y un voidedSource de 0 para el usuario, 1 para el desarrollador o 2 para Google.
  • En los pedidos de Google Play realizados después del 3 de agosto de 2026, cuando prospera un contracargo, el desarrollador paga el precio de compra, menos la comisión de servicio de Play, más las comisiones de contracargo del banco.

Tu suscriptor pagó a Apple, abrió tu app de Android esa misma tarde y ahora usa tu web en el trabajo. Entonces Apple le hace un reembolso. Google Play no lo sabe. Tu facturación web no lo sabe. Salvo que tu propio servidor corte el acceso, una suscripción multiplataforma reembolsada sigue funcionando en cada pantalla que lee tu base de datos de cuentas. Las tiendas reembolsan escaparate por escaparate, y tu sistema de cuentas es el único lugar donde existe la suscripción completa. Eso lo convierte en el único lugar que puede terminarla.

Por qué el reembolso de una tienda no termina una suscripción multiplataforma

Apple permite este esquema de forma explícita. La App Review Guideline 3.1.3(b), Multiplatform Services, dice que las apps que funcionan en varias plataformas pueden permitir a los usuarios acceder a contenido, suscripciones o funciones que adquirieron en tu app en otras plataformas o en tu web, siempre que esos artículos también estén disponibles como compras dentro de la app.

La guía de Apple para ofrecer una misma suscripción en varias apps describe cómo funciona en la práctica. Tu servidor concede el acceso usando una base de datos de cuentas unificada, y todas las apps leen de ella. La misma guía advierte que, si una compra no se propaga a las demás apps, el usuario puede acabar pagando más de una vez por el mismo servicio.

Ese diseño tiene una consecuencia que se suele pasar por alto. El derecho de acceso vive en tu base de datos, pero cada tienda solo conoce sus propios recibos. Apple puede reembolsar la compra del iPhone y avisar a tu servidor. No puede decirle nada a tu app de Android ni a tu web. Si el gestor de reembolsos solo actualiza el cliente de iOS, el cliente recupera su dinero y conserva la suscripción en todo lo demás.

Dónde pagóQuién decide el reembolsoCómo se entera tu servidorQuién puede detener las renovaciones
App StoreAppleNotificación REFUND en App Store Server Notifications V2El cliente, en los ajustes de suscripción del App Store o en una pantalla de gestión que abra tu app
Google PlayGoogle durante las primeras 48 horas, después tú o GoogleVoided Purchases API y notificaciones para desarrolladores en tiempo realEl cliente, o tú mediante purchases.subscriptionsv2.cancel
Tu webTúLos webhooks de tu procesador de pagosTú

Cómo revocar el acceso en todas las plataformas tras un reembolso

Vincula cada compra a una sola cuenta

Asociar un reembolso a una persona es la parte difícil, porque cada tienda identifica al comprador a su manera. Ambas te dan un campo para tu propio ID de cuenta. Úsalo en todas las compras.

  • En Apple, define un appAccountToken, un UUID que generas tú, cuando empieza la compra. El App Store devuelve ese mismo UUID en la información de la transacción y de la renovación. Apple indica que puedes reutilizar un mismo valor para todas las transacciones del mismo cliente.
  • Si el cliente compró fuera de tu app, por ejemplo canjeando un código de oferta en el App Store, la transacción no tiene token. El endpoint Set App Account Token lo añade. En una suscripción de renovación automática se aplica a la renovación actual y a las siguientes, no a las transacciones pasadas, y no funciona con compras compartidas mediante En Familia.
  • En Google Play, pasa un ID de cuenta ofuscado con setObfuscatedAccountId al iniciar el flujo de facturación. Tiene un límite de 64 caracteres. Google advierte que los datos personales en texto claro, como un correo electrónico, provocan el bloqueo de compras, y recomienda cifrado o un hash unidireccional.

Escucha a ambas tiendas y escribe un único derecho de acceso

Apple envía REFUND cuando reembolsa cualquier tipo de producto, incluidas las suscripciones de renovación automática. Envía REFUND_REVERSED cuando revierte un reembolso que ya había concedido, por una disputa abierta por el cliente. En Google Play, la Voided Purchases API lista las compras reembolsadas y con contracargo, cada una con un orderId que identifica la compra o renovación exacta. Tu procesador web envía su propio evento de reembolso. Los tres deberían llegar al mismo gestor y modificar el mismo registro.

Revoca el derecho de acceso, no la cuenta

Un reembolso anula una compra, no a una persona. Retira el acceso que provenía de la compra reembolsada y vuelve a calcular lo que la cuenta sigue teniendo. Si el cliente tiene además una suscripción activa de otra tienda, conserva el acceso gracias a ella. Si no, todos los clientes pierden las funciones premium la próxima vez que consulten tu servidor.

Cuando la misma persona se suscribe en dos tiendas

Las suscripciones dobles son la otra mitad del problema. Alguien se suscribe en Android, se compra un iPhone nuevo, no inicia sesión y vuelve a suscribirse. Ahora paga dos veces por un mismo servicio, y uno de esos cargos suele acabar en una solicitud de reembolso. El equipo de comercio de Apple, respondiendo a un desarrollador en los Apple Developer Forums, lo dijo sin rodeos: un sistema de cuentas debería incluir lógica para evitar la compra duplicada en otra plataforma.

Consulta todas las tiendas antes de mostrar el muro de pago

Haz que el usuario inicie sesión antes del muro de pago, busca todas sus compras activas en tu servidor y omite la oferta si alguna cubre esta plataforma. Esa sola comprobación evita la mayoría de los cargos duplicados antes de que ocurran.

¿Qué compra debo reembolsar si el duplicado ya ocurrió?

Reembolsa la que controlas. En Google Play puedes emitir el reembolso tú mismo en Play Console, y purchases.subscriptionsv2.cancel con DEVELOPER_REQUESTED_STOP_PAYMENTS detiene el siguiente pago. La suscripción web es tuya y puedes reembolsarla directamente. Los reembolsos del App Store los decide Apple, así que si el duplicado está en el iPhone, el cliente lo solicita a Apple, y tu app puede abrir esa solicitud con la API de solicitud de reembolso de StoreKit.

Lo que te cuesta un reembolso que no llega a una plataforma

El precio reembolsado es solo la primera pérdida. Un cliente cuyo reembolso de Apple nunca llegó a tu app de Android ni a tu web sigue usando lo que tú pagas por mantener. Cada sesión sigue consumiendo cómputo. Cada función de IA sigue haciendo llamadas a APIs de terceros que te facturan. Sus archivos siguen ocupando almacenamiento, y si tu app paga a creadores por visualización o por uso, esos pagos siguen saliendo. En un plan anual, eso puede suponer un año entero de costes de servicio para una cuenta que ya no paga nada.

La vía bancaria lo empeora. En los pedidos de Google Play realizados después del 3 de agosto de 2026, Google indica que, cuando prospera un contracargo, el desarrollador responde del precio de compra, menos la comisión de servicio de Play, más las comisiones de contracargo que cobre la entidad financiera. Un contracargo es definitivo en el banco. Un cliente que ha hecho un contracargo y sigue teniendo acceso te ha costado el precio, las comisiones y el coste de servicio a la vez.

Lo que sigue funcionando tras una revocación fallidaQuién lo paga
Cómputo de servidor por cada sesión en Android o en la webTú
Llamadas a APIs de terceros que hacen tus funcionesTú
Almacenamiento de los archivos y el historial del usuarioTú
Pagos por uso o por visualización a creadoresTú
Comisiones de contracargo en un pedido de Google Play posterior al 3 de agosto de 2026Tú, además del precio de compra menos la comisión de servicio de Play
Una mano sostiene un smartphone junto a un portátil abierto, con un segundo teléfono boca abajo, el entorno cotidiano de un usuario con una suscripción multiplataforma

El uso multiplataforma sigue siendo una prueba

Una sola cuenta para todas las plataformas también ayuda cuando una tienda pide tu versión. La información de consumo de Apple pregunta qué parte de un consumible, un no consumible o una suscripción no renovable consumió el cliente. En las suscripciones de renovación automática no envías un porcentaje, porque Apple lo calcula a partir del tiempo transcurrido. La revisión de contracargos de Google Play acepta hasta 1000 eventos de uso de consumo, y cada uno puede llevar el ID de cuenta ofuscado. El uso registrado con un mismo ID de cuenta, sea cual sea el dispositivo que lo generó, es uso que puedes demostrar.

Qué reembolsos nunca piden tu versión

La mayoría de los reembolsos se deciden sin ti. Google Play puede reembolsar una compra en un plazo de 48 horas mediante su propio flujo de reembolso. Los reembolsos del soporte de la tienda, las compras anuladas y el reembolso automático de Google de las compras que nunca confirmas, a las 72 horas aproximadamente, ocurren primero y se notifican después. En esos casos, la lógica de revocación anterior es todo el trabajo.

Solo dos flujos piden pruebas. El CONSUMPTION_REQUEST de Apple te da 12 horas para enviar la información de consumo. La revisión de contracargos de Google Play te da 24 horas desde la PendingRefundReviewNotification para responder mediante orders.reviewrefund, y Google solo registra tu primera llamada. RefundHalt responde a ambos dentro del plazo, con los datos de uso que ya recopilas, vinculados a la misma cuenta en todas tus apps.

Lista de comprobación breve para reembolsos multiplataforma

  • Define appAccountToken en las compras de Apple y un ID de cuenta ofuscado en las compras de Google Play.
  • Completa los tokens de Apple que falten con Set App Account Token en los canjes de códigos de oferta.
  • Dirige REFUND y REFUND_REVERSED de Apple, las compras anuladas de Google Play y los reembolsos web a un único gestor.
  • Guarda cada compra con su origen y calcula el acceso a partir de todas las compras activas.
  • Consulta las compras de todas las tiendas antes de mostrar un muro de pago en cualquier plataforma.

Preguntas frecuentes

¿Puedo dar acceso a usuarios de iPhone a una suscripción que compraron en Android o en mi web?
Sí. La App Review Guideline 3.1.3(b) de Apple permite que las apps que funcionan en varias plataformas den acceso a contenido, suscripciones o funciones adquiridos en otras plataformas o en tu web, siempre que esos artículos también estén disponibles como compras dentro de la app de iPhone.
Si Apple reembolsa a un suscriptor, ¿se enteran Google Play o mi facturación web?
No. Apple avisa a tu servidor mediante una notificación REFUND en App Store Server Notifications V2, y a nadie más. Tu servidor tiene que retirar el acceso que concedió esa compra en Android, en la web y en cualquier otro lugar donde la cuenta inicie sesión.
¿Cómo asocio un reembolso del App Store a una cuenta de usuario?
Usa appAccountToken, un UUID que tu app adjunta a la compra y que el App Store devuelve en la información de la transacción. Para compras hechas fuera de tu app, como el canje de un código de oferta, el endpoint Set App Account Token de Apple añade o sustituye el token. No admite transacciones de En Familia.
Un cliente está suscrito tanto en el App Store como en Google Play. ¿Cuál debo reembolsar?
Reembolsa la que controlas. Puedes reembolsar un pedido de Google Play en Play Console y detener su siguiente pago con purchases.subscriptionsv2.cancel. Apple decide los reembolsos del App Store, así que un duplicado en iPhone pasa por la solicitud de reembolso de Apple, que tu app puede abrir con StoreKit.
¿El uso en mi web o en mi app de Android cuenta como prueba en una revisión de reembolso?
El uso registrado bajo una misma cuenta puede respaldar tu respuesta. La información de consumo de Apple pregunta qué parte de un consumible, un no consumible o una suscripción no renovable se consumió, y la revisión de contracargos de Google Play acepta hasta 1000 eventos de uso que pueden llevar el ID de cuenta ofuscado.

Fuentes y lecturas adicionales

RefundHalt

El piloto automático de reembolsos para App Store y Google Play

Seguir leyendo

La próxima solicitud de reembolso ya está en camino.

Configura RefundHalt en el tiempo que tardas en leer otro correo de soporte sobre un reembolso que no llegaste a impugnar.