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

Pagos

Configuración de RevenueCat para apps web empaquetadas, de principio a fin

RevenueCat convierte dos sistemas de facturación de las tiendas en un solo catálogo de productos, un solo webhook y una sola respuesta a "¿este usuario está suscrito?". WebViewGold trae la integración de RevenueCat incorporada: pegas dos claves, lanzas las compras desde un enlace en tu app web y dejas que el webhook actualice tu backend. Esta guía va desde los productos de la tienda hasta un paywall que funciona.

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

1. Crea los productos en ambas tiendas

Usa IDs de producto idénticos en ambas plataformas; así RevenueCat y tu backend se mantienen sencillos.

  1. App Store Connect

    Tu app → Monetization → Subscriptions → crea un grupo de suscripciones y después los productos (nombre de referencia, ID de producto como premium_monthly, duración, precio, nombre visible localizado, captura para la revisión). Los artículos de pago único van en In-App Purchases como consumibles o no consumibles.

  2. Google Play Console

    Monetizar → Productos → Suscripciones → ID de producto premium_monthly → un plan base (mensual, con renovación automática) y ofertas opcionales, como una prueba gratuita. Los artículos de pago único van en los productos de compra en la aplicación (In-app products). Actívalos.

  3. Comprobación del estado

    Los productos de Apple deben llegar a "Ready to Submit"; la primera compra dentro de la app se revisa junto con una compilación, así que adjúntala a la versión en App Store Connect. Los productos de Play deben estar activos y la app debe estar publicada al menos en un canal de pruebas.

2. Configura el proyecto de RevenueCat

Quince minutos en el panel de RevenueCat.

  1. Añade la app de App Store

    Project → Apps → App Store: introduce el bundle ID (debe coincidir exactamente con el proyecto de Xcode y con App Store Connect), el App-Specific Shared Secret o una In-App Purchase Key de App Store Connect y, opcionalmente, una clave de API de App Store Connect para poder importar los productos.

  2. Añade la app de Play Store

    El nombre del paquete más un JSON de cuenta de servicio de Google Cloud con acceso a la Play Developer API, como describe la documentación de RevenueCat.

  3. Productos, entitlement y offering

    Importa o añade los IDs de producto de ambas apps. Crea un entitlement llamado premium y asígnale todos los productos. Crea un offering (default) con paquetes como mensual y anual; si quieres el paywall alojado de RevenueCat, diséñalo en Paywalls para ese offering.

  4. Copia las claves

    Project settings → API keys: la clave pública del SDK por plataforma (appl_… para iOS, goog_… para Android) y el ID del proyecto desde los ajustes del proyecto. Son los dos valores que necesita WebViewGold.

¡Estoy muy feliz de haber comprado esta aplicación! Documentación extremadamente fácil y excelente. Estaba en contacto con el servicio al cliente, respondieron muy rápido y de forma muy amigable. Resolvieron mi pregunta en un día. 10/10 lo recomendaría".

Nelis Geiger · CodeCanyon

3. Claves de Config en WebViewGold

Dos líneas por plataforma y vuelves a compilar. La documentación de compras dentro de la app para iOS y la documentación para Android muestran las opciones de alrededor.

text
// Config.swift (iOS)
static let revenueCatAPIKey = "appl_xxxxxxxxxxxxxxxxxxxx"
static let revenueCatProjectID = "projxxxxxxxx"

// Config.java (Android)
public static final String REVENUECAT_API_KEY = "goog_xxxxxxxxxxxxxxxxxxxx";
public static final String REVENUECAT_PROJECT_ID = "projxxxxxxxx";

4. Lanza las compras desde la app web

external_id se convierte en el app user ID de RevenueCat, así que pasa tu propio ID de usuario estable (no un correo que pueda cambiar). Llama a estos enlaces solo dentro de la app; en la web, muestra Stripe.

javascript
const userId = currentUser.id;   // tu id de usuario de Supabase / Firebase
const inApp = /WebViewGoldApp/.test(navigator.userAgent);

// Compra un producto concreto (ID tal como aparece en el panel de RevenueCat); funciona en iOS y Android
function buy(productId) {
  if (!inApp) return showStripeCheckout(productId);
  window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=" + productId;
}

// O abre un paywall de RevenueCat creado a partir de un offering
function openPaywall() {
  window.location.href = "revenuecat://launchPaywall?external_id=" + encodeURIComponent(userId) + "&offering=default";
}

// Restaurar tras reinstalar o en un dispositivo nuevo (Apple lo exige para suscripciones y no consumibles)
function restore() { window.location.href = "restoreinapppurchases://"; }

// Gestionar o cancelar: abre la pantalla de suscripciones de la tienda
function manage() { window.location.href = "cancelinapppurchase://"; }

5. Webhooks hacia tu backend

La hoja de compra es nativa; tu base de datos se entera a través del webhook de RevenueCat. En RevenueCat ve a Integrations → Webhooks, introduce la URL de una edge function de Supabase, una Cloud Function o una ruta de API, y define un valor de cabecera Authorization que tu endpoint compruebe. Gestiona como mínimo INITIAL_PURCHASE, RENEWAL, PRODUCT_CHANGE, CANCELLATION, BILLING_ISSUE, EXPIRATION y TRANSFER. Cada evento incluye app_user_id (tu ID de usuario de external_id), el producto, la tienda y la fecha de caducidad; escríbelos en una tabla subscriptions y deja que la app web lea de ahí el "activo hasta". Nunca confíes en un flag guardado en el dispositivo.

Cuando se cierra la hoja nativa, el webhook suele llegar en cuestión de segundos. Haz que la app web consulte tu backend durante un máximo de diez segundos y que luego desbloquee, con un mensaje alternativo de "todavía procesando, desliza para actualizar". Para los casos de soporte, la API REST de RevenueCat devuelve el estado del suscriptor bajo demanda, y la vista de cliente del panel muestra todas las transacciones. Si también vendes en la web con Stripe, sus webhooks escriben en la misma tabla, así que una sola comprobación de entitlement sirve para ambos canales.

6. Restauración, pruebas en sandbox y revisión

  • Un botón visible de Restaurar compras (en los ajustes o en el paywall) que llame a restoreinapppurchases://. Apple lo comprueba.
  • Muestra en el paywall el precio, la duración, las condiciones de renovación y los enlaces a los términos de uso y a la política de privacidad; los rechazos por la Directriz 3.1.2 se deben sobre todo a que falta texto en el paywall. Consulta la guía de la 3.1.2.
  • Sandbox de iOS: App Store Connect → Users and Access → Sandbox testers; en el iPhone de prueba, inicia sesión en Ajustes → App Store → Cuenta de sandbox. Las compilaciones de TestFlight usan el sandbox automáticamente; allí las suscripciones se renuevan cada pocos minutos para que puedas probar la caducidad.
  • Android: Play Console → Configuración → Pruebas de licencias, añade las cuentas de Gmail de los testers e instala desde el canal de pruebas internas; las compras de prueba no se cobran.
  • RevenueCat muestra las transacciones de sandbox con un interruptor de sandbox en el panel; tu webhook las recibe con un indicador de entorno, así que tu tabla puede ignorarlas o marcarlas.
  • Para la revisión, dale a Apple una cuenta demo sin suscripción activa y describe el paywall en las notas (plantilla en la guía de notas para la revisión). Los revisores compran en sandbox.
  • Precios localizados: llama a getstorelocation:// (o activa la inyección automática) para leer storeLocation y mostrar en tu paywall web el precio de la tienda del país del usuario.

Preguntas frecuentes

¿RevenueCat sustituye a Stripe?

No. Stripe se queda en el sitio web para las compras web. RevenueCat gestiona las compras de las tiendas, y ambos escriben en la misma tabla de entitlements de tu backend.

¿Qué debería ser external_id?

Un identificador de usuario estable de tu sistema de autenticación. Si un usuario puede comprar antes de iniciar sesión, usa un identificador de dispositivo de la UUID API de WebViewGold (get-uuid://) y vincúlalo a la cuenta más adelante.

¿El webhook es obligatorio?

Muy recomendable. Sin él, tu backend tendría que consultar a RevenueCat en cada comprobación. Con él, tu base de datos es la fuente de verdad.

¿El mismo producto puede tener precios distintos en las dos tiendas?

Sí. Los precios se fijan en cada tienda; RevenueCat asigna ambos al mismo entitlement.

¿Qué pasa si alguien abre el enlace de compra en el sitio web?

Nada; revenuecat:// solo lo entiende la app. Protege el botón con la comprobación del user agent y muestra Stripe en la web.

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.