Un solo catálogo
Los productos de App Store Connect y de la Play Console se asignan a un único entitlement, así que tu backend nunca se ramifica por plataforma.
Pagos
Tu app de Lovable o Bolt ya tiene un checkout de Stripe. Dentro del App Store y Google Play, algunas de esas compras deben pasar a compras dentro de la app y otras pueden quedarse exactamente como están. La regla es más sencilla de lo que parece en cuanto te haces la pregunta correcta: ¿qué está comprando realmente el usuario?
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
La Directriz 3.1.1 de Apple y la política de pagos de Google dicen lo mismo con otras palabras: si el usuario compra algo que se usa dentro de la app (funciones, suscripciones, créditos, contenido premium), la compra debe pasar por el sistema de facturación de la tienda. Si el usuario compra algo que se usa fuera de la app (un producto físico, un corte de pelo, una limpieza, una comida a domicilio), el sistema de facturación de la tienda no debe usarse, y Stripe es la herramienta adecuada.
Apple añade algunas excepciones concretas en la 3.1.3: los servicios multiplataforma pueden permitir que los usuarios accedan a contenido que compraron en tu sitio web, siempre que esos mismos artículos se vendan también en la app mediante IAP; los servicios en tiempo real entre personas (clases particulares, consultas) pueden usar otros métodos de pago; las apps de tipo lector tienen sus propias reglas. Google exime los bienes y servicios físicos y algunos casos especiales, como las donaciones y los pagos entre particulares. Todo lo digital que se consume en la app queda bajo Play Billing.
| Vendes… | En la app de iOS | En la app de Android | En tu sitio web |
|---|---|---|---|
| Una suscripción a funciones de la app (plan SaaS, nivel premium) | IAP obligatorio (3.1.1, 3.1.2) | Play Billing obligatorio | Stripe, como hasta ahora |
| Créditos de IA, tokens, generaciones | IAP (consumible) | Play Billing (consumible) | Stripe |
| Cursos, plantillas o descargas que se usan en la app | IAP | Play Billing | Stripe |
| Productos físicos (tienda) | Stripe obligatorio; IAP no permitido | Stripe; Play Billing no permitido | Stripe |
| Servicios presenciales (reservas, limpieza, reparaciones) | Stripe | Stripe | Stripe |
| Servicios individuales en directo (clase por videollamada, consulta) | Stripe permitido según la 3.1.3(d); IAP opcional | Por lo general fuera de Play Billing; revisa la política para tu nicho | Stripe |
| Donaciones a una organización sin ánimo de lucro registrada | Otros métodos permitidos para organizaciones sin ánimo de lucro aprobadas | Exentas en muchos casos; revisa la política | Stripe |
La misma app web sirve a ambos canales; solo cambia el botón de pago.
En Config.swift define useragent_iphone y useragent_ipad, y en Config.java USER_AGENT, con una cadena que contenga un token único, por ejemplo el user agent predeterminado seguido de WebViewGoldApp/1.0. Deja el helper de inicio de sesión de Google tal como está; mantiene su propio user agent aceptado para el paso de OAuth.
const inApp = navigator.userAgent.includes("WebViewGoldApp"). Muestra el botón de IAP en la app y el botón de Stripe en la web. No ocultes el precio; muestra el precio de la tienda.
En la app, el botón navega a revenuecat://purchase?external_id=USER_ID&product=PRODUCT_ID (o a revenuecat://launchPaywall?external_id=USER_ID&offering=OFFERING para un paywall de RevenueCat). WebViewGold abre la hoja de compra nativa.
Los webhooks de Stripe y los de RevenueCat escriben en la misma tabla subscriptions. La app web solo pregunta "¿este usuario está activo?" y nunca le importa qué tienda cobró.
Fuera de las excepciones regionales, la app no debe decir a los usuarios que compren en el sitio web, mostrar precios web ni enlazar al checkout de Stripe. Los suscriptores web existentes simplemente inician sesión y quedan activos, algo que la 3.1.3(b) permite siempre que también se ofrezca IAP.

Con una buena versión optimizada de su aplicación web, puedes tener una impresionante aplicación móvil en un par de minutos. ¡Además del servicio al cliente es muy agradable y muy útil! ¡Puedo recomendar WebViewgold :-)
Una versión mínima. En producción, lee los IDs de producto desde tu backend para que estén sincronizados con ambas tiendas.
const inApp = /WebViewGoldApp/.test(navigator.userAgent);
function subscribe(userId) {
if (inApp) {
// Hoja de compra nativa mediante WebViewGold + RevenueCat (iOS y Android)
window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=premium_monthly";
} else {
// Web: tu sesión de Stripe Checkout existente
window.location.href = "/api/stripe/checkout?plan=premium_monthly";
}
}
// Cuando se cierra la hoja nativa, consulta tu backend hasta que llegue el webhook
async function waitForEntitlement(userId, tries = 10) {
for (let i = 0; i < tries; i++) {
const r = await fetch("/api/me/subscription").then(x => x.json());
if (r.active) return true;
await new Promise(res => setTimeout(res, 1000));
}
return false;
}cancelinapppurchase:// para las suscripciones de la tienda (abre la pantalla de suscripciones del sistema).Los productos de App Store Connect y de la Play Console se asignan a un único entitlement, así que tu backend nunca se ramifica por plataforma.
Dos claves en Config.swift y Config.java, y después enlaces revenuecat:// desde la app web. Sin código nativo. Las compras dentro de la app requieren la Extended License de WebViewGold.
Los eventos de compra inicial, renovación, cancelación, problema de facturación y caducidad llegan a tu edge function de Supabase o a tu Cloud Function. La guía de configuración de RevenueCat lo explica paso a paso.
Decírselo es precisamente el problema: fuera de las excepciones regionales, eso cuenta como redirección a pagos externos (steering) según la 3.1.1. A veces se acepta una app solo de inicio de sesión sin ninguna vía de compra, pero los revisores suelen preguntar cómo se convierte un usuario nuevo en un usuario de pago. Ofrecer IAP es la respuesta fiable.
Sí, para bienes físicos y servicios que se consumen fuera de la app. Apple no permite IAP para ellos en absoluto.
No. La comisión solo se aplica a las compras realizadas mediante la facturación de Apple o Google.
Las propinas digitales y el contenido de coaching dentro de la app son IAP. Las sesiones individuales en tiempo real entre dos personas pueden usar otros métodos de pago en iOS según la 3.1.3(d). Indica en las notas para la revisión en qué caso estás.
Sí, la Extended License. Todo lo demás de esta guía funciona con la licencia estándar.
El mismo resultado, con distinta cantidad de trabajo por tu parte. Las tres incluyen la garantía de aprobación y soporte humano 24/7.
$109 por plataforma, pago único
La licencia de WebViewGold: un proyecto de Xcode o Android Studio listo para usar. Pega tu URL, define nombre e icono, activa funciones, compila y envía. Actualizaciones gratuitas para siempre.
Ver planes en la página principal$349 por licencia, complemento de pago único
Sin Mac, sin Xcode, sin Android Studio: configura en el navegador, compilamos ambas apps en la nube y las entregamos a App Store Connect y a Play Console.
Cómo funciona el Cloud Builder Prueba la demo gratuita$698 por plataforma $798
Envíanos tu URL y tu icono. Nuestro equipo configura, compila y entrega tu app en 72 horas, en marca blanca y con los proyectos fuente. Ambas plataformas por $1,158.
Detalles del Full Service Con tecnología dePrecios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.
Garantía de aprobación en App Store & Google Play – o te devolvemos el dinero en 14 días
¿Prefieres delegarlo? Full Service: configuramos, compilamos y entregamos en 72 horas, desde $698 por plataforma. ¿Preguntas? Chatea con nosotros 24/7.
Los reembolsos se conceden bajo las condiciones indicadas en nuestras FAQ: un rechazo por motivos ajenos al contenido por parte de Apple y/o Google, reclamado dentro de los 14 días posteriores a la compra.