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

Claude Code

Añadir funciones nativas con Claude Code y el puente JavaScript de WebViewGold

WebViewGold expone las capacidades nativas a tu app web como esquemas de URL y unas pocas variables globales de JavaScript. Eso las convierte en un trabajo ideal para un agente: indícale a Claude Code dónde está la documentación, dile qué funciones activaste y las integrará en tus componentes existentes. Así se hace sin nombres de API inventados.

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

Cómo funciona el puente

Tu app web le pide algo al envoltorio navegando a un esquema, por ejemplo window.location.href = "bioauth://". El envoltorio intercepta la navegación, realiza la acción nativa y responde llamando a una función global que tú definiste (onBioAuthSuccess()), inyectando una variable global (onesignalplayerid, nativePushEnabled, barcodescanresult) o cargando una URL (el escáner QR abre la URL escaneada en la app). No hay ningún SDK que instalar ni nada que empaquetar.

Todo está documentado en un único archivo legible por máquinas: webviewgold.com/llms-full.txt. Dile a Claude Code que lea la sección correspondiente antes de escribir código y usará los nombres exactos de los esquemas en lugar de otros que solo suenan plausibles. Cada esquema de este artículo se ha comprobado con ese archivo.

El prompt de integración

Ajusta la lista de funciones a lo que activaste en Config.swift y Config.java.

Pégalo en Claude Code
Nuestra app web también se ejecuta dentro de apps nativas de iOS y Android creadas con WebViewGold. Las funciones nativas se activan navegando a esquemas de URL y los resultados vuelven como variables globales de JavaScript o como funciones de callback globales. Antes de escribir código, descarga https://www.webviewgold.com/llms-full.txt y lee las secciones de: Push Notifications API, Biometric Authentication API, QR Code Scanner API, App Sharing Dialog API, Haptic Feedback API, File Downloader API, HTML5 Geolocation API. Usa solo nombres de esquemas que aparezcan en ese archivo.

Después implementa, en src/lib/native.ts: isNativeApp() (el user agent contiene el token WebViewGoldApp), callNative(scheme) (asigna window.location.href solo cuando isNativeApp() es true; en caso contrario devuelve false) y un helper readInjected(name, timeoutMs) que consulte periódicamente una variable global inyectada por el envoltorio.

Integra estas funciones en la interfaz existente, cada una protegida con isNativeApp() y con una alternativa web:
1. Push: un botón Activar notificaciones que llame a registerpush://, una fila en los ajustes que llame a checkNativePushPermissions:// y lea nativePushEnabled, y tras el inicio de sesión una llamada a getonesignalplayerid:// que lea onesignalplayerid y lo guarde en el perfil del usuario a través de nuestra API.
2. Biometría: un bloqueo con Face ID / huella dactilar para la ruta /wallet usando bioauth:// y los tres callbacks onBioAuthSuccess, onBioAuthFailure(errorCode, errorMessage) y onBioAuthUnavailable; si no está disponible, recurre a volver a pedir la contraseña, como ya hacemos.
3. Check-in con QR: un botón Escanear que llame a qrcode://; nuestros códigos QR contienen URL de nuestro propio dominio, así que gestiona la ruta /checkin que abren.
4. Compartir: sustituye el botón de copiar enlace por shareapp://message?=TEXT&url=URL cuando sea nativo, con encodeURIComponent en ambos valores.
5. Hápticos: successhaptic:// tras completar un pedido, errorhaptic:// en los errores de validación de formularios, lighthaptic:// al cambiar de pestaña. En iOS, usa la técnica del iframe de la documentación para que los hápticos no interrumpan la navegación.
6. Descargas: las descargas de imágenes usan savethisimage://?url=IMAGE_URL; los enlaces a PDF siguen siendo enlaces normales.
7. Geolocalización: mantén navigator.geolocation, pero muestra la primera vez una pantalla que explique el permiso antes de pedirlo.
Indícame qué opciones de Config.swift / Config.java y qué entradas de Info.plist o AndroidManifest debo activar para cada función.

El helper sobre el que debe construir el agente

Pequeño, independiente del framework y el único lugar que sabe del user agent.

javascript
// src/lib/native.ts
export function isNativeApp() {
  return typeof navigator !== "undefined" && navigator.userAgent.indexOf("WebViewGoldApp") !== -1;
}

export function callNative(scheme) {
  if (!isNativeApp()) return false;
  window.location.href = scheme;
  return true;
}

// Wait for a variable the wrapper injects, e.g. onesignalplayerid or nativePushEnabled
export function readInjected(name, timeoutMs) {
  return new Promise(function (resolve, reject) {
    var started = Date.now();
    (function check() {
      if (typeof window[name] !== "undefined") return resolve(window[name]);
      if (Date.now() - started > (timeoutMs || 3000)) return reject(new Error(name + " not injected"));
      setTimeout(check, 100);
    })();
  });
}

¡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

Push: permiso, estado y el ID de usuario

Requiere un servicio push activado en el envoltorio (OneSignal mediante kPushEnabled y oneSignalID en Config.swift, PUSH_ENABLED más los ID en build.gradle en Android). Pon askforpushpermissionatfirstrun (iOS) y requirePush (Android) en false para que seas tú quien decida cuándo aparece el aviso.

javascript
import { callNative, readInjected } from "./native";

// 1. Ask at the right moment (after onboarding, not on first launch)
export function askForPush() {
  return callNative("registerpush://");
}

// 2. Is push currently allowed? Sets window.nativePushEnabled
export async function isPushEnabled() {
  if (!callNative("checkNativePushPermissions://")) return null;
  return readInjected("nativePushEnabled", 2000);
}

// 3. Store the OneSignal subscription ID on the user so the server can target this device
export async function syncPushId(saveToProfile) {
  if (!callNative("getonesignalplayerid://")) return;
  var id = await readInjected("onesignalplayerid", 3000);
  await saveToProfile(id);
}

// 4. A local reminder in two hours, no push service needed
export function scheduleLocalReminder(title, message, url) {
  var seconds = 2 * 60 * 60;
  callNative("sendlocalpushmsg://push.send?s=" + seconds + "=msg!" + message + "&!#" + title + "&!#" + url);
}

Biometría: bioauth:// y sus tres callbacks

En iOS, el proyecto necesita la descripción de uso de Face ID en Info.plist (NSFaceIDUsageDescription); Android usa el BiometricPrompt del sistema y no necesita nada más. El envoltorio llama a las funciones globales, así que defínelas en window.

javascript
import { callNative } from "./native";

export function requireBiometrics(onPass, onFallback) {
  window.onBioAuthSuccess = function () { onPass(); };
  window.onBioAuthFailure = function (errorCode, errorMessage) {
    console.warn("bioauth failed", errorCode, errorMessage);
    onFallback();
  };
  window.onBioAuthUnavailable = function () { onFallback(); };
  if (!callNative("bioauth://")) onFallback(); // browser: use the password re-entry instead
}

// Security note from the documentation: treat the success callback as a UI gate only.
// Keep sensitive actions behind a server-side session check as well.

El resto de funciones, una línea cada una

Escáner de códigos QR

qrcode:// abre el escáner nativo y carga la URL escaneada en la app, así que codifica URL de tu propio dominio. Para códigos de barras de productos usa barcodescanner:// y lee barcodescanresult.

Menú de compartir

shareapp://message?=TEXT&url=URL abre el diálogo de compartir del sistema en ambas plataformas. Codifica ambos valores. En Android, la API ShareIntent permite además que otras apps compartan contenido con la tuya.

Hápticos

lighthaptic://, heavyhaptic://, successhaptic://, warninghaptic://, errorhaptic://; mediumhaptic:// es solo para iOS. La documentación muestra un helper con iframe para que la llamada no cancele una navegación en curso.

Descargas

savethisimage://?url=… guarda una imagen en la fototeca. Los enlaces que terminan en .pdf, .docx, .xlsx, .mp3 y otras extensiones de la lista se descargan de forma nativa; amplía la lista con extentionARY (Config.swift) o downloadableExtension (Config.java), o activa autodownloader / AUTO_DOWNLOAD_FILES para las cabeceras Content-Disposition.

Geolocalización

El navigator.geolocation normal funciona; el envoltorio muestra el diálogo de permiso nativo. iOS necesita HTTPS y el texto de descripción de uso de la ubicación en Info.plist; Android necesita requireLocation en true en Config.java, con las entradas del manifiesto correspondientes.

Qué interruptor del envoltorio corresponde a cada función

FuncióniOS (Config.swift / proyecto)Android (Config.java / proyecto)
Push (OneSignal)kPushEnabled, oneSignalID; documentaciónPUSH_ENABLED, ID en build.gradle; documentación
BiometríaDescripción de uso de Face ID en Info.plist; documentaciónNo requiere ningún ajuste; documentación
QR / código de barrasDescripción de uso de la cámara; qrcodelinks decide dónde se abren las URL escaneadas; documentaciónrequireCamera, QR_CODE_URL_OPTIONS; documentación
Compartir, hápticosNo hay nada que activar; documentaciónNo hay nada que activar; documentación
DescargasextentionARY, autodownloader; documentacióndownloadableExtension, AUTO_DOWNLOAD_FILES, requireStorage; documentación
GeolocalizaciónDescripción de uso de la ubicación en Info.plist; documentaciónrequireLocation; documentación

Preguntas frecuentes

¿Claude Code necesita acceso a internet para leer llms-full.txt?

Necesita descargar el archivo una vez. Si tu entorno bloquea el acceso web, descarga el archivo en el repositorio (por ejemplo, docs/webviewgold-llms-full.txt) y haz referencia a esa ruta en CLAUDE.md.

¿Por qué guardar el ID de suscripción de OneSignal en el usuario?

Porque así el servidor puede enviar un push a una persona concreta (pedido enviado, nueva respuesta). Sin el ID solo puedes hacer envíos masivos a segmentos.

¿El agente también puede activar las funciones en los proyectos de WebViewGold?

Sí, para los valores de Config.swift y Config.java y los textos de permisos. Mantén la firma y el aprovisionamiento fuera de su alcance; la guía de configuración del proyecto explica los límites.

¿Qué pasa si llamo a un esquema de una función que está desactivada?

Nada visible. Por ejemplo, registerpush:// sin un servicio push activo no tiene ningún efecto. Activa primero la función en el envoltorio y después prueba la llamada.

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.