Saltar al contenido
WebViewGold Del vibe coding a la App Store
Español
Consigue WebViewGold

Pagos

¿Stripe o compras dentro de la app? La guía de decisión para apps web en las tiendas

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.

  • Garantía de aprobación – o te devolvemos el dinero en 14 días
  • Sin programar
  • Pago único, actualizaciones gratuitas
  • Soporte humano 24/7
  • Hecho en Alemania desde 2014 · ISO 27001

La única pregunta: ¿qué se está comprando?

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.

Tabla de decisión

Vendes…En la app de iOSEn la app de AndroidEn 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 obligatorioStripe, como hasta ahora
Créditos de IA, tokens, generacionesIAP (consumible)Play Billing (consumible)Stripe
Cursos, plantillas o descargas que se usan en la appIAPPlay BillingStripe
Productos físicos (tienda)Stripe obligatorio; IAP no permitidoStripe; Play Billing no permitidoStripe
Servicios presenciales (reservas, limpieza, reparaciones)StripeStripeStripe
Servicios individuales en directo (clase por videollamada, consulta)Stripe permitido según la 3.1.3(d); IAP opcionalPor lo general fuera de Play Billing; revisa la política para tu nichoStripe
Donaciones a una organización sin ánimo de lucro registradaOtros métodos permitidos para organizaciones sin ánimo de lucro aprobadasExentas en muchos casos; revisa la políticaStripe

Detecta la app y cambia el checkout

La misma app web sirve a ambos canales; solo cambia el botón de pago.

  1. Dale a la app un user agent reconocible

    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.

  2. Ramifica en la app web

    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.

  3. Lanza la compra a través de RevenueCat

    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.

  4. Unifica los entitlements en el servidor

    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ó.

  5. No dirijas a los usuarios a pagos externos

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

Julian Koch · Cofundador de Dueldonkey · CodeCanyon

El cambio en JavaScript

Una versión mínima. En producción, lee los IDs de producto desde tu backend para que estén sincronizados con ambas tiendas.

javascript
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;
}

Trampas de los precios duales

  • Los precios pueden diferir entre la web y la tienda, pero la app no debe anunciar el precio web más barato. Mantén los correos de marketing y el sitio web honestos y separados de la interfaz de la app.
  • Apple vende en puntos de precio fijos y ambas tiendas recaudan el impuesto sobre las ventas o el IVA en muchos países. Compara los ingresos netos, no los precios de lista, antes de decidir un precio en la tienda.
  • Las pruebas gratuitas y las ofertas introductorias pertenecen al producto de la tienda (ofertas de suscripción), no a cupones de Stripe. Un campo de código promocional en la app que desbloquee funciones de pago elude las IAP y provoca un rechazo.
  • Gestión y cancelación por canal: el portal de cliente de Stripe para las suscripciones web, cancelinapppurchase:// para las suscripciones de la tienda (abre la pantalla de suscripciones del sistema).
  • Los reembolsos de IAP los gestionan Apple y Google, no tú. Plantea tus respuestas de soporte en torno a eso.
  • No mantengas ambos sistemas a la vez para el mismo usuario; si un suscriptor web vuelve a comprar en la app, tu manejador de webhooks debería detectar el doble entitlement y avisar al soporte.
  • La comisión no se aplica a las ventas con Stripe en la web, pero sí a cada IAP. Lee la guía del programa del 15 % antes de fijar precios.

RevenueCat une las dos tiendas

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.

Integrado en WebViewGold

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.

Webhooks

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.

Preguntas frecuentes

¿Puedo quitar el checkout de la app y decir a los usuarios que se suscriban en el sitio web?

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.

¿Alguna vez es obligatorio Stripe dentro de la app?

Sí, para bienes físicos y servicios que se consumen fuera de la app. Apple no permite IAP para ellos en absoluto.

¿Pago la comisión de la tienda por las ventas web?

No. La comisión solo se aplica a las compras realizadas mediante la facturación de Apple o Google.

¿Y las propinas a creadores o el coaching que se vende a través de mi app?

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.

¿WebViewGold necesita una licencia especial para IAP?

Sí, la Extended License. Todo lo demás de esta guía funciona con la licencia estándar.

Tres formas de llevar tu app a las tiendas

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.

Hazlo tú mismo

$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

Full Service

$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 de WeSetupYourWebViewApp

Precios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.

¿Listo para lanzar tu app?

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.