Encontrar amigos que ya usan la app
Compara números de teléfono normalizados con las cuentas de tu backend y muestra "3 de tus contactos ya están aquí" en lugar de una lista de amigos vacía.
ChatGPT & Codex + contactos
Las pantallas para encontrar amigos, las invitaciones a grupos y las apps para dividir gastos suelen querer acceder a la agenda. En una app WebViewGold, tu app de ChatGPT & Codex pide permiso con requestcontactpermission:// y, tras readcontacts://, recibe los nombres y números de teléfono como JSON en la variable contacts. El código lleva minutos; lo que decide si la app supera la revisión es cómo usas los datos.
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
Compara números de teléfono normalizados con las cuentas de tu backend y muestra "3 de tus contactos ya están aquí" en lugar de una lista de amigos vacía.
El usuario elige un contacto, la app prepara una invitación personal y abre la hoja de compartir. Sin invitaciones masivas ni sorpresas para quien la recibe.
Las apps de CRM, de reservas y de equipos pueden rellenar un registro nuevo a partir de un contacto elegido, en lugar de obligar a los usuarios a volver a escribir nombres y números.
Un simple enlace de invitación a través de la hoja de compartir nativa (shareapp://) no necesita ningún permiso y es el camino más fácil para pasar la revisión. Pide acceso a los contactos solo cuando la búsqueda de coincidencias o la selección aporten valor real.
Pega esto en ChatGPT & Codex para implementar la parte de la web app. Revisa el resultado, publica y luego prueba dentro de la app WebViewGold.
Prompt para Codex: Implementa un acceso a contactos que respete la privacidad para el envoltorio de app WebViewGold y abre un pull request. 1) Añade un helper de contactos: requestPermission() navega a requestcontactpermission:// y readContacts() asigna window.contacts = undefined, navega a readcontacts:// y se resuelve con el objeto de nombres a números o con null tras consultarlo cada 100 ms durante un máximo de 5 segundos; ambos solo cuando navigator.userAgent incluya mi token personalizado de WebViewGold. 2) Añade una pantalla explicativa antes del permiso y un botón a settingsapp:// cuando se deniegue el acceso. 3) Construye un selector con búsqueda, sin preselección y sin Seleccionar todo. 4) Añade un endpoint de servidor que compare hasta 2000 números normalizados con los usuarios, devuelva solo las coincidencias, no guarde ni registre nada y tenga un límite de frecuencia por usuario. 5) Envía las invitaciones mediante shareapp://message?=TEXT&url=INVITE_URL, un contacto cada vez. 6) Añade tests y anota estas reglas en AGENTS.md.

WebViewGold nos ha permitido el tiempo de mercado más corto y eficiente que jamás sea posible de todas las otras plataformas de aplicaciones que hemos probado durante los últimos 5 años. No sé por qué no lo había descubierto antes, ¡pero estoy muy, muy contento de haberlo hecho. Actualmente cerca de 6000 descargas de aplicaciones tanto en iOS App Store & Google Play Store sin ningún problema!
Una hora para el código, algo más para los textos de privacidad.
Android: añade android.permission.READ_CONTACTS a AndroidManifest.xml, como exige la documentación de WebViewGold. iOS: la descripción de uso de contactos en Info.plist debe explicar el motivo, por ejemplo "para mostrarte cuáles de tus contactos ya usan la app".
Muestra una pantalla propia que explique el beneficio, con un botón Continuar, y después navega a requestcontactpermission://. No lo pidas nunca en el primer inicio ni antes de que el usuario llegue a la función.
Con el permiso concedido, navega a readcontacts://. WebViewGold rellena la variable global contacts con un objeto de nombres y arrays de números de teléfono; sin permiso, su valor es null.
Muestra una lista con búsqueda, sin nada preseleccionado y sin botón Seleccionar todo, y enseña el texto exacto de la invitación antes de enviar nada.
Para encontrar amigos, normaliza los números y envíalos a tu backend para una comparación puntual; no guardes los números sin coincidencia. Para las invitaciones, no envíes nada: abre la hoja de compartir.
Dos toques separados: uno para el permiso y otro para cargar la lista. La variable contacts llega de forma asíncrona. La búsqueda de amigos, si la necesitas, se ejecuta en el servidor y solo para usuarios con sesión iniciada; en tu proyecto de ChatGPT & Codex, eso significa: Tu propia API o funciones serverless.
var IN_APP = navigator.userAgent.indexOf("WebViewGold") !== -1; // tu token de user agent personalizado
function waitFor(name, timeoutMs, done) {
var start = Date.now();
(function check() {
if (typeof window[name] !== "undefined") { done(window[name]); }
else if (Date.now() - start < timeoutMs) { setTimeout(check, 100); }
else { done(undefined); }
})();
}
// Toque 1: después de tu propia pantalla explicativa
function askForContacts() {
if (!IN_APP) { showInviteLink(); return; }
window.location.href = "requestcontactpermission://";
}
// Toque 2: "Mostrar mis contactos"
function loadContacts() {
window.contacts = undefined;
window.location.href = "readcontacts://";
waitFor("contacts", 5000, function (list) {
if (!list) { showPermissionHint(); return; } // null = sin permiso
// formato: { "John Appleseed": ["888-555-5512", "888-555-1212"], ... }
var people = Object.keys(list).map(function (n) { return { name: n, phones: list[n] }; });
renderPicker(people); // nada preseleccionado, sin "Seleccionar todo"
});
}
// ¿Lo rechazó antes? Deja que el usuario lo cambie en Ajustes
function openAppSettings() { window.location.href = "settingsapp://"; }Un objeto JSON con el nombre de cada contacto como clave y un array de números de teléfono para cada uno, guardado en la variable global contacts. Sin permiso, la variable es null. Los correos electrónicos, las direcciones postales y las fotos no forman parte del formato documentado.
No por leerlos, pero a menudo por cómo lo hace. Pide acceso en contexto con una descripción de uso clara, deja que los usuarios elijan personas concretas, no invites nunca a todos a la vez y no guardes la agenda en tu servidor salvo que la función lo necesite y tu política de privacidad lo indique.
A menudo no. Una hoja de compartir con un enlace de invitación personal llega a WhatsApp, Mensajes y el correo sin ningún permiso y es mucho más fácil de explicar en la revisión. Usa el acceso a contactos cuando busques amigos o crees grupos a partir de contactos existentes.
En ese caso, readcontacts:// deja la variable contacts en null. Ofrece el enlace de invitación en su lugar y, si el usuario cambia de opinión más adelante, abre los ajustes de la app con settingsapp:// para que pueda conceder el acceso.
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.