Botones de añadir al calendario para tu app de Bolt
Una reserva que no está en el calendario del usuario es una ausencia anunciada. En iOS, WebViewGold permite añadir un evento a la app Calendario desde un enlace normal a un archivo .ics, así que tu app de Bolt no necesita más que una URL que devuelva el evento. Android no tiene una API de calendario dedicada en WebViewGold; aquí tienes lo que funciona allí en su lugar.
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
9:41
BBolt
Eventos de calendarioYa en tu bolsillo
App Store · Google Play Aprobada
Lo que funciona en cada plataforma
iOS: enlace a un archivo .ics
WebViewGold está preparado para Calendario (antes iCal): un enlace normal a un archivo .ics permite al usuario añadir la entrada al calendario del iPhone o iPad. Sin esquema de URL ni puente JavaScript, y la web app nunca lee el calendario del usuario; solo ofrece un evento.
Android: descarga o Google Calendar
La documentación de Android no incluye una API de calendario. Funcionan dos rutas: añade .ics a downloadableExtension en Config.java para que el archivo se descargue y pueda abrirse con una app de calendario que importe archivos .ics, y ofrece un enlace "Añadir a Google Calendar" que se abra fuera de la app.
Un archivo de evento por reserva
Tu servidor devuelve un pequeño archivo de texto (un VCALENDAR con un VEVENT) por cada reserva, clase o cita. La misma URL sirve para el sitio web, la app de iOS y la descarga en Android.
Prompt para Bolt
Pega esto en Bolt para implementar la parte de la web app. Revisa el resultado, publica y luego prueba dentro de la app WebViewGold.
Prompt para pegar en Bolt
Añade exportación de calendario para las reservas que funcione dentro de nuestra app de WebViewGold. Crea una Netlify Function booking-ics y una regla de reescritura en netlify.toml de /calendar/* a /.netlify/functions/booking-ics/:splat con status 200, para que los enlaces tengan la forma /calendar/TOKEN.ics. La función quita .ics de la ruta, carga la reserva por su ics_token aleatorio desde Supabase usando SUPABASE_SERVICE_ROLE_KEY del entorno de Netlify y devuelve un VCALENDAR con un VEVENT (UID estable, DTSTAMP, DTSTART y DTEND en UTC con Z, SUMMARY, LOCATION, DESCRIPTION con el enlace a la reserva) como text/calendar; charset=utf-8. Añade una columna ics_token a bookings. En la página de confirmación, muestra Añadir al calendario en la misma pestaña, nunca con target blank. Cuando navigator.userAgent contenga WebViewGold-Android, muestra también Añadir a Google Calendar con un enlace calendar.google.com/calendar/render?action=TEMPLATE. No pongas nunca la service role key en una variable VITE_.
¡Una forma estupenda de convertir tu web app en una app nativa! Entrega rápida y una manera genial de llevar tus apps a las tiendas sin tener que desarrollar una app nativa completa.
Kevin Joling · FlightConnections & TrainConnections · Trustpilot
Añade un botón "Añadir al calendario"
Alrededor de una hora, la mayor parte para el endpoint .ics.
Crea el endpoint .ics
Añade una ruta como /calendar/BOOKING_TOKEN.ics que devuelva el evento con Content-Type: text/calendar; charset=utf-8. Mantén la ruta terminada en .ics, como en el ejemplo de WebViewGold, y usa un token imposible de adivinar en lugar de depender de la sesión iniciada.
Rellena los campos importantes
Un UID estable por reserva, DTSTAMP, DTSTART y DTEND en UTC (terminados en Z), SUMMARY, LOCATION y una DESCRIPTION con un enlace de vuelta a la reserva. Escapa las comas y los puntos y coma del texto.
Enlázalo en la misma pestaña
Un simple <a href="https://yourdomain.com/calendar/TOKEN.ics">. No lo abras en una ventana nueva ni con target="_blank"; un WebView no tiene dónde mostrarla.
Resuelve Android
Añade .ics a downloadableExtension en Config.java para la ruta de descarga, y muestra un enlace "Añadir a Google Calendar" con calendar.google.com en BROWSER_BLACKLIST, para que se abra en el navegador del sistema, donde la mayoría de los usuarios tienen la sesión de Google iniciada, y no dentro del WebView.
Prueba en dispositivos reales
Añade un evento en un iPhone y luego revisa la zona horaria, la duración y el enlace de la descripción. En Android, prueba teléfonos de dos fabricantes; las apps de calendario difieren en cómo abren los archivos .ics descargados.
Un archivo .ics mínimo
Esto es todo lo que necesita un calendario. Según la especificación iCalendar, las líneas terminan en CRLF; las bibliotecas se encargan de ello. Parte de servidor de tu stack: Supabase, Firebase o tu propia API.
text
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//YourApp//Bookings//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20261101T120000Z
DTSTART:20261205T170000Z
DTEND:20261205T180000Z
SUMMARY:Clase de yoga
LOCATION:Estudio 2\, Calle Mayor 14
DESCRIPTION:Gestiona tu reserva: https://yourdomain.com/bookings/123
BEGIN:VALARM
TRIGGER:-PT1H
ACTION:DISPLAY
DESCRIPTION:Clase de yoga dentro de una hora
END:VALARM
END:VEVENT
END:VCALENDAR
La lógica del botón
El enlace .ics en todas partes y el enlace de Google Calendar como extra en Android y en escritorio:
javascript
// User agents personalizados: "... WebViewGold-iOS" (Config.swift), "... WebViewGold-Android" (Config.java)
var ua = navigator.userAgent;
var IS_ANDROID_APP = ua.indexOf("WebViewGold-Android") !== -1;
var IS_IOS_APP = ua.indexOf("WebViewGold-iOS") !== -1;
function icsUrl(b) { return "https://yourdomain.com/calendar/" + b.token + ".ics"; }
function googleCalendarUrl(b) {
var f = function (d) { return d.toISOString().replace(/[-:]|\.\d{3}/g, ""); };
return "https://calendar.google.com/calendar/render?action=TEMPLATE" +
"&text=" + encodeURIComponent(b.title) +
"&dates=" + f(b.start) + "/" + f(b.end) +
"&details=" + encodeURIComponent(b.url) +
"&location=" + encodeURIComponent(b.location);
}
// Renderizado: siempre el enlace .ics; el de Google salvo si IS_IOS_APP
Errores frecuentes
Zonas horarias: escribe las horas en UTC con una Z final, o incluye un bloque VTIMEZONE correcto. Las horas locales flotantes se desplazan para quien viaja y para usuarios de otras zonas.
Un UID nuevo en cada descarga puede crear duplicados. Mantén un UID por reserva; cómo trata un calendario una reimportación depende de la app.
URLs .ics protegidas con login: puede que la petición que descarga el archivo no lleve la sesión web del usuario. Un token aleatorio por reserva es la opción fiable.
Las suscripciones de calendario (feeds webcal://) son otra función; la documentación de WebViewGold cubre archivos .ics individuales.
¿Tiene WebViewGold una API de calendario para Android?
No una dedicada; la integración de calendario de la documentación es solo para iOS. En Android, ofrece el archivo .ics como descarga (añade .ics a downloadableExtension en Config.java) y un enlace Añadir a Google Calendar que se abra fuera de la app.
¿Puede la app leer el calendario del usuario para comprobar la disponibilidad?
No. El flujo .ics solo ofrece un evento que el usuario añade. La disponibilidad se gestiona en tu servidor, a partir de tus propios datos de reservas.
¿Puedo añadir eventos recurrentes o recordatorios?
Sí, dentro del archivo .ics: una línea RRULE para clases que se repiten y un bloque VALARM para un recordatorio. Cómo aparece el recordatorio depende de la app de calendario del usuario; para recordatorios que controles tú, usa notificaciones push.
¿Cómo genero el archivo .ics para mi app de Bolt?
Una pequeña ruta en el servidor construye el texto. Para un solo evento no hace falta ninguna biblioteca, aunque ical-generator (Node) o icalendar (Python) ayudan con los eventos recurrentes y el escapado. Pide a Bolt un endpoint que devuelva text/calendar para un token de reserva.
¿Los enlaces de calendario también funcionan en el navegador?
Sí. La misma URL .ics descarga o abre el evento en navegadores de escritorio y móviles, así que un solo botón sirve para el sitio web y para ambas apps.
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.
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.
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.
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.