varios - porque no aparecen mis contactos en mi iphone
¿Cómo agregar un contacto a la libreta de direcciones del iPhone desde una página web? (4)
En el mundo de Mac de escritorio, si hiciera clic en un enlace en una página web vinculada a un archivo VCF, este archivo se abriría en la aplicación Libreta de direcciones. Sin embargo, en el mundo iPhone, al hacer eso aparece el mensaje "Error al descargar. Safari no puede descargar este archivo". Entonces, mi pregunta es, ¿es realmente posible agregar un contacto a la libreta de direcciones de su iPhone desde una página web?
Tengo a mi disposición tanto el archivo VCF original como una versión microformateada de los datos de hCard, por lo que la solución no tiene que estar vinculada a la descarga del archivo original; puedo reprocesar los datos si es necesario. El único requisito es agregar el contacto a la libreta de direcciones del iPhone desde una página web que se visualiza desde Mobile Safari.
Entonces, ¿alguna idea?
Aunque estoy ligeramente fuera del alcance de mis requisitos originales, he encontrado una solución al problema con la que puedo trabajar.
Como resultado, si recibe un correo electrónico con una vcard como archivo adjunto, podrá abrir este archivo adjunto y agregarlo a su libreta de direcciones. Entonces, si en lugar de ofrecer un enlace de descarga de vcard a los usuarios de iPhone, les proporciona una forma de que le envíen la vcard por correo electrónico, entonces pueden agregar la tarjeta a su libreta de direcciones.
Una solución ligeramente indirecta, pero casi no puedo permitir que lo hagas de forma nativa. Ciertamente es una solución mejor que no hacer nada en absoluto.
Terminé escribiendo una entrada de blog sobre esto: Agregar una vCard a su Libreta de direcciones de iPhone desde una página web
De acuerdo con la biblioteca de referencia, no es posible agregar contactos a la libreta de direcciones del iPhone. Los esquemas disponibles son: correo, teléfono, texto, mapa, youtube y enlaces de iTunes.
Para Googlers, 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.
[ACTUALIZADO: septiembre de 2013: iOS7 ahora admite la descarga directa de VCARD desde nuestra página e importación en la aplicación de contacto nativa, por lo que solo necesita la solución que se encuentra a continuación, mientras que iOS6 e inferior aún no la admiten, eso puede cambiar en el futuro ahora que Apple ha aceptado la característica ]
[ACTUALIZADO EN JAN 2013: ahora hemos agregado el agente de usuario sniffing y se han combinado en un solo archivo download.php que detecta los escenarios de iOS, Mobile Safari, UiWebView para evitar errores de "carga interrumpida de Farme" y sirve el archivo .vcf a todos los dispositivos Apple de Apple. obtener el .vcf incrustado en el .ics.]
Ver la solución completa actualizada.
Lo que sigue es una descripción completa de un método alternativo para descargar contactos de 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 un 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? Descárguelo aquí [iphone-contact-download-demo] para una aplicación web HTML5 totalmente 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 navegador compatible con iPhone o HTML5 para usarlo cuando está desconectado. Por favor, busque más detalles sobre "aplicaciones web sin conexión" en google si desea saber más.
Descarga de VCARD incrustada en VCALENDAR para 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 con 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 misma facilidad, ¡el estándar en sí es tan antiguo como las colinas!
También puede haber leído que ES posible lograr algo viable al solicitar la dirección de correo electrónico de los usuarios y luego enviarles por correo electrónico el archivo de contacto O crear un enlace a una entrada de Google Map y extraer la información de contacto de esa información (la entrada de Google Map requiere semanas). en el Reino Unido).
Si bien estas dos soluciones son viables, no son lo que yo llamaría un usuario amigable e intenté, sin éxito, lograr que un cliente mío aceptara a cualquiera de ellos para su descarga de contactos 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 HIPSCAN vcard importador. Pero suponer 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:
El desbordamiento de pila tiene varios subprocesos sobre el tema Forzar la descarga de vCard (thesheep.co.uk) La solución de CORREO ELECTRÓNICO y el blog asociado de Code Train aquí vCard opciones para descargar También hay una posible solución utilizando Google Maps aquí. Y esto también está cubierto por este artículo de Dataplex. Jonas Schmid habla de servir los tipos de archivos correctamente. Hilo de macrumours
Luego me puse a pensar que el iPhone SÍ admite archivos vcalendar descargados de una página web desde IOS5. Los archivos VCALENDAR generalmente tienen una extensión .ics y son manejados por un safari móvil que muestra una ventana donde el archivo puede abrirse y guardarse en el calendario. Me parece increíble que Apple y Mobile Safari admitan archivos VCAL pero no archivos VCARD, pero así es como es. Entonces, ¿qué tal si pudiera adjuntar un archivo VCARD a un archivo VCALENDAR?
El primer obstáculo es conseguir un archivo adjunto en un evento de calendario ...
Inicialmente, intenté agregar un archivo adjunto a una cita del calendario de Outlook en Windows que, aunque era posible, no se descargaba correctamente cuando se vinculaba desde una página web y ciertamente no daba el resultado que buscaba. Entonces, decidí intentar usar el software de Apple, ya que, después de todo, estamos intentando 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 una cita de evento / calendario! Así que busqué en Google "agregando adjuntos a los eventos del calendario en OSX" o similar y encontré este excelente artículo que me indicó la dirección correcta.
Adición de 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 desde 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 su lista de contactos / 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. COMIENCE: VCARD VERSION : 3.0 N: Contacto; iPhone ;;; FN: iPhone Contacto CORREO ELECTRÓNICO; tipo = INTERNET; tipo = TRABAJO; tipo = pref: [email protected] TEL; tipo = CELL; type = VOICE; type = pref: 012-345-6789 END: VCARD Crear un nuevo calendario - llámelo como quiera, usé "vcal" - en el área "En mi Mac" para que cuando exporte este calendario para generar el archivo .ics, todo lo que obtenga sea el evento único con la tarjeta adjunta en lugar de todos los eventos es posible que tenga si utiliza 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. Guarda 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á utilizando: ATTACH; VALUE = BINARY; ENCODING = BASE64; FMTTYPE = text / directory; X-APPLE-FILENAME = iPhone Contact.vcf: QkVHSU46VkNBUkQNClZFUlNJT046M ... etc ... [base64 codificada VCARD] Así que 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á la vcal-mínima de lo que lo reduje.
Así que todo lo anterior, como dije, no es necesario para implementar la solución de descarga de contactos, solo quería mostrarle cómo llegué a entender 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 VEVENT sobre la marcha y adjuntar VCARD que se puedan 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 a dispositivos que no sean iphones o codificar en base64 para el iPhone.
2) Cree un enlace a un archivo PHP que generará el evento del calendario sobre la marcha, tal como: Descargar Contact iPhone tal vez en una aplicación móvil HTML5 como la siguiente:
3) Cree o cargue vcal.php con el código aquí iphonecontact-source-code. Este archivo PHP aplica el encabezado / tipo de contenido correcto para el archivo de calendario que se descargará, entonces tiene la opción de obtener el contenido del archivo de calendario directamente "iphonecontact.ics" como se hace 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 buen 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 navegue 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 del evento). Así que ahora haga clic en el archivo de contacto adjunto ...
7) Y luego "Crear nuevo contacto" y ya casi llegas ...
¡Guarda el contacto y maldita en voz baja en los aros por los que Apple te hizo saltar!
Ahora hay un par de puntos que me gustaría mencionar aquí en base a mis experiencias al usar esta técnica en aplicaciones web HTML5:
Uso del manifiesto de la memoria caché: tuve un comportamiento inesperado / problemas al servir el archivo de calendario (iphonecontact.ics) si se había almacenado en la memoria caché. Simplemente no conseguí que funcionara, 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 algún agente de usuario sniffing para detectar en el "vcal.php" o como se llame (download.php en el último ejemplo en línea) el archivo PHP ya sea para servir el archivo VCALENDAR en un iPhone y el archivo VCARD en todos los demás navegadores .
También tenga cuidado, si lo veo a través de una aplicación UiWebView, redirigiré al usuario a una página que dice abrir con Mobile Safari (como lo sugiere alguien en mi blog), de lo contrario, aparecerá el error "Frame Load Interrupted".
Creo que eso es todo, así que 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 de los usuarios O para incrustar el contacto en un enlace del mapa de Google O descargar una aplicación que maneje VCARDS.
- Apple admite archivos adjuntos a los archivos de calendario, pero no fácilmente, así que una vez que sepamos cómo hacerlo, 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 un clic o dos adicionales.
Espero que le guste esta solución: es tan buena como creo que vamos a obtener hasta que Apple ceda y permita que Mobile Safari acepte archivos VCARD.
Hasta la proxima vez...