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

Lovable + share extension

Comparte en tu app de Lovable: enlaces, texto y fotos desde cualquier otra app

Una herramienta de marcadores, un recetario o un moodboard solo resultan útiles si guardar cuesta un toque. Con WebViewGold, tu app de Lovable aparece en la hoja de compartir de iOS y Android, y lo que el usuario comparta (un enlace, un texto, una foto) llega a tu app web en la variable de JavaScript sharedData. Tu código decide qué pasa después: rellenar un formulario, guardarlo en tu backend o abrir un editor.

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 recibir contenido compartido

Share extension de iOS

Los usuarios tocan Compartir en Safari, Fotos u otra app y eligen la tuya. WebViewGold pasa el contenido a tu app web en la variable de JavaScript sharedData: textos y enlaces como texto plano, imágenes como cadenas Base64.

Share intent de Android

Quita el comentario de los filtros de intent ya preparados en AndroidManifest.xml (ACTION_SEND para text/plain y image/*, ACTION_SEND_MULTIPLE para varias imágenes) y el icono de la app aparecerá en el diálogo de compartir de Android. Misma variable, mismo manejo: sharedData.

Tu app web decide

Comprueba sharedData al cargar la página, distingue enlaces, textos e imágenes y lleva al usuario a una pantalla de guardado ya rellenada. No se guarda nada hasta que tu propio código lo envía a Supabase o Lovable Cloud (Postgres, almacenamiento, edge functions), así que el usuario mantiene el control.

Prompt para Lovable

Pega esto en Lovable para implementar la parte de la web app. Revisa el resultado, publica y luego prueba dentro de la app WebViewGold.

Prompt para pegar en Lovable
Añade un flujo de destino para compartir para el envoltorio de app nativa WebViewGold. 1) Crea un componente ShareInbox montado una sola vez en App.tsx que solo se ejecute cuando navigator.userAgent contenga mi token personalizado de WebViewGold. 2) Al montarse y otra vez tras 1 segundo, comprueba typeof sharedData !== "undefined"; si contiene un valor que aún no se ha procesado en esta sesión (compáralo con sessionStorage.lastShare), clasifícalo: si empieza por http = enlace, una cadena Base64 larga (opcionalmente con prefijo data:image) = imagen, si no, texto (extrae la primera URL si la hay). 3) Guarda el elemento en sessionStorage.pendingShare y navega a /save. 4) La página /save muestra una vista previa (título e imagen del enlace desde una edge function de Supabase llamada link-preview, la imagen decodificada o el texto) con los botones Guardar y Cancelar. 5) Al guardar, sube las imágenes como Blob al bucket shared-images de Supabase Storage, dentro de la carpeta con el id del usuario, e inserta una fila en una tabla saves (user_id, kind, url, text, image_path, created_at) con RLS para que cada usuario solo vea sus propias filas. 6) Si el usuario no ha iniciado sesión, conserva pendingShare, envíalo al login y vuelve a /save después. 7) En un navegador normal, oculta el inbox; /save debe seguir aceptando un enlace pegado.

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

Lo que la gente comparte en apps como la tuya

Un destino para compartir se gana su sitio cuando un toque guarda algo que, de otro modo, el usuario tendría que copiar, cambiar de app y pegar. Usos típicos:

Leer más tarde y marcadores

Compartes un artículo desde Safari o Chrome, la app obtiene el título y la imagen de vista previa en el servidor, el usuario añade una etiqueta y toca Guardar.

Recetas, lugares, productos

Un enlace a una receta, un restaurante desde una app de mapas, una página de producto: guardados en una colección, un plan de viaje o una lista de deseos en lugar de en un archivo de notas caótico.

Fotos dentro de un flujo de trabajo

La foto de un recibo en un control de gastos, una captura en un reporte de errores, la foto de una habitación en un moodboard o un inventario. La imagen llega en Base64, lista para subirla.

Ofertas de empleo y leads

Comparte una oferta de empleo o el enlace a un perfil en un tracker o un CRM y llega directamente a un formulario "Nueva entrada" ya rellenado, con la URL ya analizada.

Citas y fragmentos

El texto resaltado en cualquier app se convierte en una nota, una tarjeta de estudio o un prompt para tu función de IA, con el enlace de origen adjunto cuando el texto compartido contiene uno.

Añade un destino para compartir a una app de Lovable

Alrededor de una hora, casi toda en la pantalla de guardado de tu app web.

  1. Elige una sola tarea para lo compartido

    Decide qué hace un contenido compartido en tu app de Lovable: guardar un enlace, adjuntar una foto, empezar una nota. Una acción clara convierte mejor que un menú de opciones.

  2. iOS: activa la share extension

    Sigue la Documentación para iOS para activar la share extension en el proyecto de Xcode de WebViewGold y luego instala la compilación en un iPhone real. La hoja de compartir solo muestra extensiones de apps instaladas, así que el simulador no sirve bien para probarlo.

  3. Android: quita el comentario de los filtros de intent

    En AndroidManifest.xml deja solo los filtros que de verdad gestionas: text/plain para enlaces y texto, image/* para una foto, SEND_MULTIPLE para varias (Documentación para Android). Un destino para compartir que acepta imágenes y luego las ignora da una mala primera impresión.

  4. Lee sharedData en Lovable

    Comprueba typeof sharedData !== "undefined" al cargar y otra vez tras un breve retraso. Los valores que empiezan por http son enlaces; las cadenas Base64 largas son imágenes (los datos JPEG empiezan por /9j/, los PNG por iVBORw0KGgo); todo lo demás es texto, quizá con una URL dentro.

  5. Conserva el borrador durante el inicio de sesión

    Si el usuario no ha iniciado sesión, guarda el elemento compartido en sessionStorage, llévalo por tu flujo de inicio de sesión y restaura después la pantalla de guardado. Nunca pierdas un contenido compartido sin avisar.

  6. Guarda y confirma

    Convierte las imágenes en un Blob, redimensiónalas y súbelas, obtén los títulos de los enlaces en el servidor y guarda el registro en Supabase o Lovable Cloud (Postgres, almacenamiento, edge functions); después muestra un estado de éxito claro (una llamada a successhaptic:// encaja muy bien aquí).

Un manejador de sharedData para tu app web

Independiente del framework; llama a checkSharedContent() cuando tu app se haya montado. Sustituye YourAppToken por el user agent personalizado que definiste en Config.swift (useragent_iphone, useragent_ipad) y Config.java (USER_AGENT).

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

function classifyShared(raw) {
  var value = String(raw).trim();
  var b64 = value.replace(/^data:image\/[a-z+]+;base64,/i, "");
  if (/^https?:\/\//i.test(value)) return { kind: "link", url: value };
  if (b64.length > 1000 && /^[A-Za-z0-9+\/=\s]+$/.test(b64.slice(0, 4000))) {
    return { kind: "image", base64: b64, mime: b64.indexOf("iVBORw0KGgo") === 0 ? "image/png" : "image/jpeg" };
  }
  var link = value.match(/https?:\/\/\S+/);
  return { kind: "text", text: value, url: link ? link[0] : null };
}

function base64ToBlob(b64, mime) {
  var bin = atob(b64.replace(/\s/g, ""));
  var bytes = new Uint8Array(bin.length);
  for (var i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);
  return new Blob([bytes], { type: mime });
}

function checkSharedContent() {
  if (!inApp || typeof sharedData === "undefined" || !sharedData) return false;
  var fingerprint = String(sharedData).length + ":" + String(sharedData).slice(0, 64);
  if (sessionStorage.getItem("lastShare") === fingerprint) return false;   // ya procesado
  sessionStorage.setItem("lastShare", fingerprint);
  sessionStorage.setItem("pendingShare", JSON.stringify(classifyShared(sharedData)));
  window.location.href = "/save";                                         // tu pantalla de guardado ya rellenada
  return true;
}

window.addEventListener("load", function () {
  if (!checkSharedContent()) setTimeout(checkSharedContent, 1000);
});

Lo que miran los revisores

Un destino para compartir es una de las integraciones nativas que una pestaña de Safari no puede ofrecer en iOS, y eso lo convierte en un argumento sólido para la directriz 4.2. Viene con algunas reglas.

  • 4.2

    Funcionalidad mínima

    Muestra el flujo de compartir en una captura de pantalla y menciónalo en inglés en las notas para la revisión ("Share a link from Safari to save it"). Los revisores solo valoran las funciones que encuentran.

  • 4.4

    Extensiones

    Las extensiones deben incluir funcionalidad real, describirse con precisión en tu texto de marketing y no contener marketing, publicidad ni compras dentro de la app. Mantén el flujo de compartir como una acción de guardado limpia.

  • 2.5.16

    Relación con tu app

    Las extensiones deben estar relacionadas con el contenido y la funcionalidad de la app. Una app de recetas que acepta enlaces a recetas encaja; un destino para compartir que solo abre la página de inicio, no.

  • 5.1.1

    Datos que recibes

    Las fotos y los enlaces compartidos pueden contener datos personales. Sube solo lo que el usuario confirmó, descríbelo en tu política de privacidad y decláralo en App Privacy (fotos, contenido del usuario) y en el formulario Data safety de Google Play.

Preguntas frecuentes

¿Puede la app recibir contenido compartido en iOS y en Android?

Sí. iOS usa una share extension y Android usa share intents; en ambos casos WebViewGold pasa el contenido a tu app web en la misma variable de JavaScript, sharedData, así que un solo manejador cubre las dos plataformas.

¿Qué tipos de contenido pueden compartir los usuarios con la app?

Texto y enlaces, e imágenes, que llegan como cadenas Base64. Android tiene además un filtro de intent preparado para varias imágenes a la vez. Otros tipos de archivo, como los PDF, no forman parte de la API documentada.

¿Puede hacerlo una app web o una PWA sin el envoltorio nativo?

En Android, una PWA instalada puede registrarse como destino para compartir mediante la Web Share Target API en navegadores basados en Chromium. En iOS, Safari no ofrece nada equivalente para apps web, así que una share extension nativa es la forma de aparecer en la hoja de compartir del iPhone.

¿Y si el usuario no ha iniciado sesión al compartir?

Guarda el elemento compartido en sessionStorage, lleva al usuario por el inicio de sesión y devuélvelo a la pantalla de guardado con el contenido todavía ahí. Perder un contenido compartido después del login es el error más común en este flujo.

¿Una share extension garantiza la aprobación según la directriz 4.2?

Ninguna función por sí sola lo hace. Es una capacidad nativa potente y visible; junto con notificaciones push, manejo sin conexión y un diseño propio de app, demuestra que tu app de Lovable es más que un sitio 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 de Lovable?

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.