Hemos estado indagado en todo internet y así tenerte la solución para tu dilema, si continúas con alguna difcultad puedes dejar la duda y te respondemos sin falta, porque estamos para ayudarte.
Solución:
[UPDATED – Sep 2013 – iOS7 now supports direct download of VCARDs from we page and import into native contact application so you only need the solution below whilst iOS6 and below still do not support it – that may change in future now that Apple have accepted the feature ]
[UPDATED JAN 2013 – now have added the user agent sniffing and combined into a single download.php file which detects iOS, Mobile Safari, UiWebView scenarios to prevent “Farme Load Interrupted” errors and serves the .vcf file to all bnut Apple devices which get the .vcf embedded in the .ics.]
Ver la solución completa actualizada
Lo que sigue es una descripción completa de un método alternativo para descargar contactos desde una página web a un iPhone a través de Mobile Safari. La idea básica es adjuntar la información de contacto requerida como un archivo en un evento de calendario que ES manejado por safari móvil. El archivo de contacto en sí está codificado en base64 en el archivo de calendario sobre la marcha utilizando un simple script PHP. Así que sigue leyendo …
¿Solo quieres el código fuente? Descarguelo aqui [iphone-contact-download-demo] para obtener una aplicación web HTML5 completamente funcional que puede copiar y reproducir o visite http://iphone.mobicontact.info para ver una demostración funcional. La demostración utiliza el manifiesto de caché HTML5 que descarga el contenido en su iPhone o navegador compatible con HTML5 para usarlo sin conexión. Por favor, busque en Google más detalles sobre las “aplicaciones web sin conexión” si desea obtener más información.
VCARD incrustado en VCALENDAR para descarga de iPhone Es posible que haya leído que no es posible descargar archivos de contacto (datos en formato VCARD como archivo .vcf) directamente a su iPhone desde una página web usando Mobile Safari. El navegador simplemente no reconoce la extensión .vcf y el tipo mime (texto / x-vcard) como algo que debería manejar. Además, Android y la mayoría de los otros dispositivos móviles deberían poder manejar archivos VCARD con la suficiente facilidad: ¡el estándar en sí es tan antiguo como las colinas!
También puede haber leído que ES posible lograr algo viable solicitando la dirección de correo electrónico de los usuarios y luego enviarles por correo electrónico el archivo de contacto O creando un enlace a una entrada de Google Map y extraer la información de contacto de esa (la entrada de Google Map requiere semanas para obtenerla). en el Reino Unido).
Si bien ambas son soluciones viables, no son lo que yo llamaría fáciles de usar y traté, sin éxito, de que un cliente mío aceptara cualquiera de ellas para su descarga de contacto en una aplicación web móvil.
Ahora, en este punto, también debo mencionar que PUEDE descargar algunas aplicaciones de terceros que agregan soporte para archivos VCARD (.vcf), como QRAFTER y VCARD GETTER, ambos del excelente lector QR de Kerem Erkan y su blog sobre el tema y la solución para iPad. e importador de tarjetas vcard HIPSCAN. Pero asumir que sus lectores tienen estas aplicaciones instaladas es un paso demasiado lejos en mi opinión, así que busqué una solución alternativa al correo electrónico, los mapas de Google y las aplicaciones de terceros.
Antes de continuar, hay muchos enlaces que describen el problema con más detalle:
Stack overflow tiene varios hilos sobre el tema Forzar la descarga de vCard (thesheep.co.uk) La solución EMAIL y el blog asociado de Code Train aquí Opciones de vCard para descargar También hay una posible solución usando Google Maps aquí. Y esto también está cubierto por este artículo de Dataplex. Jonas Schmid habla de servir correctamente los tipos de archivos. Hilo de MacRumours
Entonces me puse a pensar, el iPhone SÍ admite archivos vcalendar descargados de una página web a partir de IOS5. Los archivos VCALENDAR generalmente tienen una extensión .ics y son manejados por safari móvil que abre una ventana donde el archivo se puede abrir y guardar en el calendario. Me parece increíble que Apple y Mobile Safari admitan archivos VCAL pero no archivos VCARD, pero así es. Entonces, ¿qué pasa si puedo adjuntar un archivo VCARD a un archivo VCALENDAR?
El primer obstáculo es obtener un archivo adjunto en un evento del calendario …
Inicialmente intenté agregar un archivo adjunto a una cita del calendario de Outlook en Windows que, si bien fue posible, no se descargó correctamente cuando se vinculó desde una página web y ciertamente no produjo el resultado que buscaba. Entonces, decidí intentar usar el software de Apple ya que, después de todo, estamos tratando de descargarlo en un iPhone. El uso de la aplicación de calendario predeterminada de Apple “iCal” presenta un problema fundamental: ¡no puede agregar archivos adjuntos a un evento / cita de calendario! Así que busqué en Google “agregar archivos adjuntos a eventos de calendario en OSX” o similar y encontré este excelente artículo que me indicó la dirección correcta.
Agregar archivos adjuntos a las citas del calendario en OSX.
Así que unos minutos más tarde y con una copia de BusyCal instalada, pude crear un evento y adjuntarle un archivo VCARD (previamente guardado / exportado de mis contactos en OSX). Este paso solo es necesario para comprender el formato del archivo creado cuando se agrega un archivo adjunto a un elemento del calendario; NO necesita instalar BusyCal para implementar la solución que se describe a continuación, pero lo incluyo como referencia para que pueda ver cómo funciona la VCARD está incrustado en el archivo VCALENDAR / VEVENT (.ics).
Los pasos que utilicé fueron en un iMac de Apple con OSX Lion:
Exporte un contacto de sus Contactos / Libreta de direcciones para crear un archivo VCARD (.vcf): puede editar este archivo con un editor de texto para eliminar todas las cosas adicionales, como UID y PROD-ID, si lo desea. : 3.0 N: Contacto; iPhone ;;; FN: iPhone Contact EMAIL; tipo = INTERNET; tipo = TRABAJO; tipo = pref:[email protected]
TEL; type = CELL; type = VOICE; type = pref: 012-345-6789 END: VCARD Crea un nuevo calendario – llámalo como quieras, usé “vcal” – en el área “En mi Mac” para que cuando exporta este calendario para generar el archivo .ics, todo lo que obtiene es el evento único con la tarjeta adjunta en lugar de todos los eventos que podría tener si usa un calendario existente. Crea un nuevo evento, llámalo como quieras, y dale una fecha y hora arbitrarias. Adjunte el archivo VCARD de (1) a este nuevo evento; vea la captura de pantalla.
Guarde el evento en el calendario. Desde el menú principal de BusyCal, exporte el calendario a un archivo .ics en su disco local – descargue el archivo zip aquí -> Evento del calendario de Apple con el archivo de contacto adjunto. Ahora puede usar su editor de texto favorito para examinar cómo Apple almacena los archivos adjuntos en los eventos del calendario y el resultado está usando: ATTACH; VALUE = BINARY; ENCODING = BASE64; FMTTYPE = text / directory; X-APPLE-FILENAME = iPhone Contact.vcf: QkVHSU46VkNBUkQNClZFUlNJT046M … etc … [base64 encoded VCARD]
Entonces, eliminé todas las cosas adicionales que no necesitaba (prueba y error aquí) hasta que tuve el mínimo absoluto que el iPhone aún reconocía como un evento de calendario válido con archivo adjunto. La razón para hacer esto es hacer que el archivo PHP que crea el evento de calendario en la página web final sea lo más fácil posible; aquí está el vcal-mínimo a lo que lo reduje.
Entonces, todo lo anterior, como dije, no es necesario para implementar la solución de descarga de contactos; solo quería mostrarles cómo llegué a comprender cómo Apple adjunta archivos usando la línea de contacto X-APPLE-FILENAME. Y, por supuesto, cómo codifican los datos VCARD utilizando la codificación base64. Así que ahora tenemos toda la información que necesitamos para crear VEVENTs sobre la marcha y adjuntarles VCARD que se pueden descargar directamente a un iPhone a través de Mobile Safari.
1) Cargue el archivo de contacto (.vcf) que desea descargar; necesitará este archivo para poder descargarlo directamente en dispositivos que no sean iphones o codificarlo en base64 para el iPhone.
2) Cree un enlace a un archivo PHP que generará el evento de calendario sobre la marcha, como: Descargue Contact iPhone tal vez en una aplicación móvil HTML5 como la siguiente:
3) Cree o cargue el vcal.php con el código aquí iphonecontact-source-code. Este archivo PHP aplica el tipo de encabezado / contenido correcto para el archivo de calendario que se descargará, luego tiene la opción de obtener el contenido del archivo de calendario directamente “iphonecontact.ics” como se hizo en “vcal-from-file.php” o generar el calendario sobre la marcha como se muestra en “vcal.php”. Este último es mi método preferido porque obtienes un agradable evento de calendario con marca de tiempo que muestra la hora y la fecha de la descarga.
4) ¡Eso es! Ya está todo listo – ahora vaya a la página web de su iphone y haga clic en el enlace para ejecutar “vcal.php”. Su navegador ahora debería mostrar el archivo iphonecontact.ics y pedirle que lo abra en la aplicación Calendario del teléfono.
5) Seleccione “Abrir en …” y se le presentará la cita del calendario y el archivo de contacto adjunto.
6) Observe cómo configuro el título del evento del calendario en algo útil para decirle al usuario qué hacer con el archivo de contacto incrustado (puede ver la línea en vcal.php que establece el campo RESUMEN para el evento). Así que ahora haz clic en el archivo de contacto adjunto …
7) Y luego “Crear nuevo contacto” y ya casi está …
¡Guarda el contacto y maldice en voz baja los aros que Apple te hizo saltar!
Ahora, hay un par de puntos que me gustaría mencionar aquí basados en mis experiencias con esta técnica en aplicaciones web HTML5:
Usando el manifiesto de caché: tuve algunos comportamientos / problemas inesperados al servir el archivo de calendario (iphonecontact.ics) si se había almacenado en caché; simplemente no pude hacer que funcione, así que lo excluyo del manifiesto, lo que significa que siempre se descarga – el código fuente está incluido en este archivo zip iphonecontact-source-code.
He agregado algunos agentes de usuario que detectan en el archivo PHP “vcal.php” o como se llame (download.php en el último ejemplo en línea) si se debe entregar el archivo VCALENDAR a un iPhone y el archivo VCARD a todos los demás navegadores. .
También tenga cuidado, si se ve a través de una aplicación UiWebView, redirijo al usuario a una página que dice abrir con Mobile Safari (como lo sugirió alguien en mi blog), de lo contrario obtendrá el temido error “Frame Load Interrupted”.
Creo que eso es todo, para resumir:
Mobile safari no admite archivos VCARD (.vcf) directamente, pero sí admite archivos VCALENDAR (.ics).
- Las mejores soluciones actuales son enviar un correo electrónico al contacto solicitando la dirección de correo electrónico del usuario O incrustar el contacto en un enlace de mapa de Google O descargar una aplicación que maneja VCARDS.
- Apple admite archivos adjuntos a archivos de calendario, pero no es fácil, por lo que una vez que sepamos cómo se hace, podemos hacerlo en PHP.
- Incruste una VCARD en un archivo VCALENDAR para permitir que un usuario guarde un contacto en su libreta de direcciones con solo uno o dos clics adicionales.
Espero que les guste esta solución; es tan buena como creo que vamos a conseguir hasta que Apple cediera y permita que Mobile Safari acepte archivos VCARD.
Hasta la proxima vez…
Aunque un poco fuera del alcance de mis requisitos originales, he encontrado una solución al problema con la que puedo trabajar.
Resulta que si recibe un correo electrónico con una vcard como archivo adjunto, entonces puede abrir este archivo adjunto y agregarlo a su libreta de direcciones. Entonces, si en lugar de ofrecer una descarga de vcard enlace a los usuarios de iPhone, les proporcionas una forma de que se les envíe la vcard por correo electrónico en lugar de que puedan agregar la tarjeta a su libreta de direcciones.
Una solución un poco indirecta, pero la mejor que se me ocurre, mientras que Apple no te permite hacerlo de forma nativa. Ciertamente es una mejor solución que no hacer nada en absoluto.
Terminé escribiendo una publicación de blog sobre esto: Agregar una vCard a la libreta de direcciones de su iPhone desde una página web
Para los empleados de Google, a partir de esta publicación, en iOS 7 (beta 6) El archivo se puede abrir directamente en la aplicación de contactos y guardar.