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

Bolt + almacenamiento en el dispositivo

Almacenamiento nativo y un ID de dispositivo para tu app de Bolt

Los usuarios esperan que una app los recuerde. Las cookies y localStorage suelen mantener la sesión de tu app de Bolt, pero son almacenamiento web y desaparecen con la caché. WebViewGold añade dos pequeñas ayudas nativas: un almacén de valores persistente (writevalue:// y readvalue://) para ajustes y para restaurar la sesión, y un UUID de dispositivo (get-uuid://) para licencias vinculadas al dispositivo, dispositivos de confianza y ajustes por dispositivo en tu servidor.

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

Dos ayudas nativas

Read/Write Value API

writevalue:// guarda todo lo que va después del esquema como una sola cadena en el almacenamiento privado de la app; readvalue:// la vuelve a inyectar en la página, como window.storedValues en iOS y window.appSettings en Android. Los valores sobreviven a los reinicios y al borrado de la caché, y desaparecen al desinstalar la app (en Android, también al borrar sus datos).

UUID API

get-uuid:// define la variable de JavaScript uuid, un ID de dispositivo único y no personal. También puedes añadirlo una vez a la primera petición como ?uuid=XYZ (enhanceUrlUUID / UUID_ENHANCE_WEBVIEW_URL) o inyectarlo en cada página (autoInjectVariable / AUTO_INJECT_VARIABLES).

Lo que no es

No se sincroniza entre dispositivos, no es una base de datos ni un gestor de contraseñas. Guarda solo valores pequeños (ajustes, flags, un token revocable), deja los datos del usuario en Supabase, Firebase o tu propia API y nunca trates el UUID como prueba de identidad.

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 persistencia a nivel de dispositivo y un límite de dispositivos para el envoltorio de app WebViewGold. Crea src/lib/device.ts con isNativeApp() (navigator.userAgent contiene mi token de WebViewGold), saveLocal(values), que navegue a una cadena writevalue:// como writevalue://theme=dark;lang=es;onboarded=1, loadLocal(), que navegue a readvalue:// y analice window.storedValues o window.appSettings tras 250 ms, y getDeviceId(), que devuelva la variable global uuid (navegando primero a get-uuid:// si hace falta). Fuera de la app, recurre a localStorage y devuelve null como ID de dispositivo. Al arrancar, aplica el tema y el idioma guardados antes de mostrar el dashboard. Después del login, envía { uuid, platform } por POST a una Netlify Function register-device que use la service role key de Supabase para hacer un upsert en una tabla devices y devuelva 403 con un mensaje claro si un usuario Pro ya tiene otros dos dispositivos activos. Añade una pantalla "Gestionar dispositivos" para liberar una plaza. No encadenes nunca dos esquemas nativos en el mismo tick.

¡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

Dónde marca la diferencia

Mantener la sesión iniciada

Guarda un refresh token revocable después del login. Si la sesión web desaparece tras borrar la caché, léelo al arrancar y restaura la sesión sin que se note, en lugar de mostrar la pantalla de login.

Ajustes que cargan al instante

Tema, idioma, unidades, "onboarding completado", el último espacio de trabajo abierto: se leen en local al arrancar, antes de que responda tu backend, e incluso sin conexión.

Licencias vinculadas al dispositivo

"Pro funciona en dos dispositivos": registra el UUID al activar la licencia, cuenta los dispositivos activos en el servidor y ofrece una pantalla Gestionar dispositivos para liberar una plaza.

Dispositivos de confianza

Omite el segundo factor o el código por email en un dispositivo que el usuario ya confirmó, y muestra "Sesión iniciada en: iPhone, Pixel" con un cierre de sesión por dispositivo.

Kioscos y tablets compartidas

Un iPad en recepción o un teléfono escáner en el almacén que siempre debe abrir la misma ubicación o el mismo puesto: guarda el ID del puesto en cada dispositivo.

Intégralo en una app de Bolt

Alrededor de una hora, más una tabla de dispositivos en tu backend.

  1. Detecta la app

    Define un user agent personalizado en Config.swift (useragent_iphone, useragent_ipad) y Config.java (USER_AGENT) y llama a los esquemas solo cuando coincida. En el navegador, recurre a localStorage.

  2. Elige un formato seguro

    Todo lo que va después de writevalue:// se guarda tal cual como una sola cadena, así que usa un formato sencillo key=value;key=value con valores seguros para URL (letras, dígitos, punto, guion, guion bajo). Cada escritura reemplaza la cadena completa, así que escribe siempre todas las claves.

  3. Lee los valores al arrancar

    Navega a readvalue://, espera un momento (la documentación usa 200 ms) y analiza window.storedValues (iOS) o window.appSettings (Android). Aplica primero el tema y el idioma, y luego restaura la sesión si hace falta.

  4. Registra el dispositivo

    Después del login, lee uuid (tras get-uuid://, o automáticamente con la opción de autoinyección) y guárdalo con el usuario en Supabase, Firebase o tu propia API: ID de usuario, UUID, plataforma, última actividad. Aplica los límites de dispositivos en el servidor, nunca en el cliente.

  5. Limpia al salir

    Al cerrar sesión, reescribe el valor sin el token y revócalo en el servidor. Al eliminar la cuenta, borra también las filas de dispositivos (consulta la guía de eliminación de cuentas).

  6. Respeta la regla de una llamada en iOS

    iOS procesa solo una navegación de esquema por ejecución de script, así que encadena las llamadas con pequeños retrasos (o usa multiapicall://, que admite get-uuid) en lugar de lanzarlas en el mismo tick.

Un pequeño wrapper para ambas plataformas

La misma API en la app y en el navegador. Sustituye YourAppToken por tu user agent personalizado.

javascript
var inApp = navigator.userAgent.indexOf("YourAppToken") !== -1;

function nativeWrite(values) {                 // { rt: "abc123", theme: "dark", lang: "es" }
  var str = Object.keys(values).map(function (k) { return k + "=" + (values[k] || ""); }).join(";");
  if (!inApp) { try { localStorage.setItem("appValues", str); } catch (e) {} return; }
  window.location.href = "writevalue://" + str;
}

function parseValues(str) {
  var out = {};
  String(str || "").split(";").forEach(function (pair) {
    var i = pair.indexOf("=");
    if (i > 0) out[pair.slice(0, i)] = pair.slice(i + 1);
  });
  return out;
}

function nativeRead(callback) {
  if (!inApp) { callback(parseValues(localStorage.getItem("appValues"))); return; }
  window.location.href = "readvalue://";
  setTimeout(function () {
    callback(parseValues(window.storedValues || window.appSettings));  // iOS || Android
  }, 250);
}

function nativeDeviceId(callback) {
  if (!inApp) { callback(null); return; }
  if (typeof uuid !== "undefined") { callback(uuid); return; }        // inyectado automáticamente
  window.location.href = "get-uuid://";
  setTimeout(function () { callback(typeof uuid !== "undefined" ? uuid : null); }, 250);
}

Privacidad y revisión

  • Si guardas el UUID en tu servidor, declara "ID del dispositivo" (Device ID) en App Privacy (vinculado al usuario si lo guardas con la cuenta) y "ID de dispositivo u otros" (Device or other IDs) en el formulario Data safety de Google Play.
  • Úsalo solo para tus propias funciones. Compartirlo con redes publicitarias o brókeres de datos, o vincularlo con datos de otras empresas, es seguimiento según la directriz 5.1.2 y requiere la solicitud de App Tracking Transparency.
  • No combines el UUID con otras señales del dispositivo para crear una huella digital de los usuarios; Apple no permite el fingerprinting, con o sin la solicitud.
  • Dilo en tu política de privacidad y en tus términos: "Esta licencia puede usarse en un máximo de dos dispositivos; para aplicarlo, guardamos un identificador del dispositivo."
  • Trata el almacén de valores como un archivo de preferencias de la app: está bien para ajustes y tokens revocables, no para contraseñas ni datos de pago.

Preguntas frecuentes

¿Por qué no usar simplemente cookies y localStorage?

Úsalos primero; dentro de la app persisten igual que en un navegador. El almacén de valores nativo es el respaldo para lo que debe sobrevivir a un borrado de la caché, como un token de dispositivo revocable, el estado del onboarding o el idioma elegido, y está disponible al arrancar, incluso sin conexión.

¿El UUID de WebViewGold es lo mismo que el identificador de publicidad?

No. Es un identificador de dispositivo no personal para la lógica de tu propia app, no el IDFA ni el ID de publicidad de Android, y leerlo no muestra la solicitud de App Tracking Transparency. Si lo usaras para rastrear a los usuarios en apps de otras empresas o lo compartieras con redes publicitarias, pasaría a ser seguimiento y se aplicarían las reglas de ATT.

¿Los valores guardados se sincronizan con los demás dispositivos del usuario?

No. Los valores son por instalación y por dispositivo. Todo lo que deba acompañar al usuario (perfil, preferencias, compras) va en tu backend; el almacén del dispositivo solo acelera el arranque y mantiene la sesión iniciada en ese dispositivo.

¿Qué pasa tras reinstalar la app o en un teléfono nuevo?

Los valores guardados desaparecen al desinstalar, y tampoco deberías dar por hecho que el UUID se mantiene. Deja que los usuarios vuelvan a iniciar sesión, registra el dispositivo de nuevo y libera los dispositivos antiguos en Supabase, Firebase o tu propia API tras un periodo de inactividad o desde una pantalla Gestionar dispositivos.

¿Puedo probarlo en un navegador o en una vista previa?

Solo el respaldo. Los esquemas funcionan dentro de la app de WebViewGold, no en un navegador de escritorio ni en una vista previa de Bolt. Detecta el user agent personalizado, usa el respaldo de localStorage en el navegador y prueba el flujo real en un teléfono con una compilación de la app.

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 de Bolt?

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.