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.
Replit + share extension
Una herramienta de marcadores, un recetario o un moodboard solo resultan útiles si guardar cuesta un toque. Con WebViewGold, tu app de Replit 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.
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.
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.
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 Backends Express/Flask/FastAPI con Replit Postgres o bases de datos externas, así que el usuario mantiene el control.
Pega esto en Replit para implementar la parte de la web app. Revisa el resultado, publica y luego prueba dentro de la app WebViewGold.
Añade una función "compartir en la app" para el envoltorio nativo de WebViewGold. En el front end de React, crea un hook useSharedContent() que solo se ejecute cuando navigator.userAgent contenga mi token de WebViewGold: comprueba la variable global sharedData al cargar y otra vez tras un segundo, clasifícala como enlace (empieza por http), imagen (cadena Base64 larga) o texto, e ignora los valores ya procesados en esta sesión (sessionStorage). Cuando llegue contenido, abre una hoja de guardado con una vista previa y un botón Guardar. Al guardar, envía { kind, value } por POST a un nuevo endpoint /api/shares que requiera la sesión de Replit Auth. En el backend, aumenta el límite del cuerpo JSON a 15 MB solo para esta ruta, decodifica las imágenes y guárdalas en Replit Object Storage bajo shares/USER_ID/, obtén en el servidor los títulos de los enlaces con un timeout e inserta una fila en una tabla shares de Postgres. Devuelve el elemento guardado y muéstralo al principio de la lista. Reintenta una vez si la petición agota el tiempo de espera mientras el despliegue se activa. En un navegador normal, nunca muestres la hoja de guardado automáticamente.
¡Gran trabajo! Nunca tuve que usar código para nada, pero logré trabajar con esto y tener mi App lista. ¡Fácil y rápido! ¡También con gran ayuda de los creadores!
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:
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.
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.
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.
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.
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.
Alrededor de una hora, casi toda en la pantalla de guardado de tu app web.
Decide qué hace un contenido compartido en tu app de Replit: guardar un enlace, adjuntar una foto, empezar una nota. Una acción clara convierte mejor que un menú de opciones.
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.
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.
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.
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.
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 Backends Express/Flask/FastAPI con Replit Postgres o bases de datos externas; después muestra un estado de éxito claro (una llamada a successhaptic:// encaja muy bien aquí).
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).
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);
});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.
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.
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.
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.
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.
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.
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.
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.
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.
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 Replit es más que un sitio web.
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.
$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$349 por licencia, complemento de pago único
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.
Cómo funciona el Cloud Builder Prueba la demo gratuita$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 dePrecios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.
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.