在桌面Mac世界中,如果我单击链接到VCF文件的网页中的链接,则此文件将在“地址簿”应用程序中打开。但是,在iPhone世界中,这样做会导致显示“下载失败。Safari无法下载此文件”消息。所以,我的问题是,实际上是否可以从网页上为iPhone的地址簿添加联系人?
我有原始的VCF文件和hCard微格式的数据版本,所以解决方案不必与下载原始文件有关 - 我可以在必要时重新处理数据。唯一的要求是从Mobile Safari中查看的网页中将联系人添加到iPhone的地址簿。
那么,有什么想法吗?
答案 0 :(得分:18)
[更新 - 2013年9月 - iOS7现在支持从我们的页面直接下载VCARD并导入到本机联系人应用程序,因此您只需要下面的解决方案,而iOS6及更低版本仍然不支持它 - 这可能会在将来改变Apple已经接受了这个功能]
[2013年1月更新 - 现在添加了用户代理嗅探并合并到一个download.php文件中,该文件检测iOS,Mobile Safari,UiWebView场景以防止" Farme Load Interrupted"错误并将.vcf文件提供给所有bnut Apple设备,它们将.vcf嵌入到.ics中。]
See the updated complete solution
以下是通过Mobile Safari将联系人从网页下载到iPhone的替代方法的完整说明。基本思想是将所需的联系信息作为文件附加到由移动野生动物园处理的日历事件中。联系人文件本身使用简单的PHP脚本动态地在日历文件中进行base64编码。请继续阅读...
只想要源代码?在这里下载[iphone-contact-download-demo],获取完全可用的HTML5 Web应用程序,您可以自由复制和复制,或者转到http://iphone.mobicontact.info进行工作演示。该演示使用HTML5缓存清单,该清单将内容下载到支持iphone或HTML5的浏览器,以便在脱机时使用。请谷歌了解有关"离线网络应用程序"的详细信息。如果你想了解更多。
VCALENDAR中的嵌入式VCARD for iPhone下载 您可能已经读过,无法使用Mobile Safari从网页直接将联系人文件(VCARD格式数据为.vcf文件)下载到您的iPhone。浏览器只是无法将.vcf扩展名和mime类型(text / x-vcard)识别为应该处理的内容。另外,Android和大多数其他移动设备应该能够轻松处理VCARD文件 - 标准本身就像山丘一样古老!
您可能还读过,通过请求用户的电子邮件地址,然后通过电子邮件发送联系人文件或创建指向Google地图条目的链接并从中提取联系信息(Google Map条目需要),可以实现可行的工作。在英国达到的几周。)
虽然这些都是可行的解决方案,但它们并不是我称之为用户友好的方式,我试图让我的客户接受其中任何一个用于在移动网络应用上下载联系人。
现在我还要提到你可以下载一些第三方应用程序来添加对VCARD(.vcf)文件的支持 - 比如来自Kerem Erkan优秀的QR阅读器和他的博客的QRAFTER和VCARD GETTER关于主题和iPad解决方案,以及HIPSCAN vcard导入器。但是假设你的读者安装了这些应用程序,我认为这一步太过分了,所以我搜索了一个替代电子邮件,谷歌地图和第三方应用程序的解决方案。
在继续之前,有许多链接更详细地描述了这个问题:
堆栈溢出在主题上有几个线程 强制vCard下载(thesheep.co.uk) 来自Code Train的EMAIL解决方案和相关博客可在此处下载vCard选项 此处还可以使用Google地图解决方案。 Dataplex的这篇文章也涵盖了这一点。 Jonas Schmid谈到正确提供文件类型。 MacRumours线程
然后我想,iPhone DOES支持从IOS5开始从网页下载的vcalendar文件。 VCALENDAR文件通常具有.ics扩展名,并由移动safari处理,打开一个窗口,可以打开文件并将其保存到日历中。我发现Apple和Mobile Safari支持VCAL文件但不支持VCARD文件令人难以置信,但事实就是如此。那么如果我可以将VCARD文件附加到VCALENDAR文件呢?
第一个障碍是在日历活动中获得附件......
最初我尝试在Windows中为Outlook日历约会添加附件,虽然从网页链接时可能无法正确下载,但肯定没有产生我所追求的结果。所以,我决定尝试使用Apple软件,毕竟我们正试图下载到iPhone上。使用Apple的默认日历应用程序" iCal"提出了一个基本问题 - 您无法在活动/日历约会中添加附件!所以我用谷歌搜索"在OSX中添加附件到日历事件"或类似的,发现这篇优秀的文章指出了我正确的方向。
在OSX中向日历约会添加附件。
几分钟后,安装了BusyCal副本,我就可以创建一个事件并将VCARD文件附加到它(之前从OSX中的联系人保存/导出)。此步骤仅用于了解将附件添加到日历项时创建的文件的格式 - 您不需要安装BusyCal来实现下面描述的解决方案,但我将其包含在内以供参考,以便您可以看到VCARD如何嵌入在VCALENDAR / VEVENT(.ics)文件中。
我使用的步骤是在运行OSX Lion的Apple iMac上进行的:
从联系人/地址簿导出联系人以创建VCARD文件(.vcf) - 您可以使用文本编辑器编辑此文件,以删除所有额外的内容,如UID和PROD-ID(如果您愿意).BEGIN :VCARD 版本:3.0 N:联系人; iPhone ;;; FN:iPhone联系人 EMAIL;类型= INTERNET;类型= WORK;类型= PREF:iphone@mobicontact.info TEL;类型= CELL;类型= VOICE;类型= PREF:012-345-6789 END:VCARD 创建一个新的日历 - 按照你喜欢的方式调用它,我使用" vcal" - 在"在我的Mac上"区域,以便在导出此日历以生成.ics文件时,您获得的只是带有附加卡的单个事件,而不是您使用现有日历时可能拥有的所有事件。 创建一个新事件 - 称之为您喜欢的任何事件 - 并给它一个任意的时间和日期。 将(1)中的VCARD文件附加到此新事件 - 请参阅屏幕截图。 将活动保存到日历。 从BusyCal的主菜单中,将日历导出到本地磁盘上的.ics文件 - 在此处下载zip文件 - >附带联系人文件的Apple日历活动。 您现在可以使用自己喜欢的文本编辑器来检查Apple如何在日历事件中存储附件,结果是使用:ATTACH; VALUE = BINARY; ENCODING = BASE64; FMTTYPE = text / directory; X-APPLE-FILENAME = iPhone Contact.vcf: QkVHSU46VkNBUkQNClZFUlNJT046M ...等... [base64编码的VCARD] 所以我然后删除了我不需要的所有额外的东西(这里是试验和错误),直到我有一个绝对最小值,仍然被iPhone识别为带有附件的有效日历事件。这样做的原因是使在最终网页上创建日历事件的PHP文件尽可能简单 - 这是我将其缩减到的最小值。
因此,正如我所说,以上所有内容都没有必要实现联系人下载解决方案 - 我只想告诉您如何理解Apple如何使用X-APPLE-FILENAME联系线附加文件。当然,他们如何使用base64编码对VCARD数据进行编码。所以现在我们拥有了动态创建VEVENT所需的所有信息,并将VCARD附加到它们上面,可以通过Mobile Safari直接下载到iPhone。
1)上传您要下载的联系人文件(.vcf) - 您需要此文件,以便您可以将其直接下载到非iphone或base64为iPhone编码。
2)创建一个指向PHP文件的链接,该文件将动态生成日历事件,例如: 下载可能在HTML5移动应用程序中联系iPhone,如下所示:
3)使用iphonecontact-source-code中的代码创建或上传vcal.php。此PHP文件为要下载的日历文件应用正确的标题/内容类型,然后您可以选择直接获取日历文件内容" iphonecontact.ics"在" vcal-from-file.php"中完成或者如" vcal.php"所示,即时生成日历。后者是我首选的方法,因为你得到一个很好的带时间戳的日历事件,显示下载的时间和日期。
4)那就是它!您已全部设置 - 现在浏览到iPhone上的网页,然后单击链接以执行" vcal.php"。您的浏览器现在应该显示iphonecontact.ics文件,并要求您在手机日历应用程序中打开它
5)选择"打开..."并且您将看到日历约会和附加的联系人文件。
6)注意我如何将日历事件的标题设置为有用的信息,告诉用户如何处理嵌入的联系人文件(您可以在vcal.php中看到为事件设置SUMMARY字段的行)。现在点击附加的联系人文件......
7)然后"创建新的联系人"而你几乎就在那里......
保存联系人并诅咒苹果让你跳过的篮球!
根据我在HTML5网络应用上使用此技术的经验,现在我想提一下几点:
使用缓存清单 - 我有一些意外的行为/问题服务于日历文件(iphonecontact.ics),如果它已被缓存 - 我只是无法让它工作,所以我将它从清单中排除意味着它总是被下载 - 源代码包含在这个zip文件中iphonecontact-source-code。
我添加了一些用户代理嗅探以检测" vcal.php"或者你称之为(最新在线示例中的download.php)PHP文件是否将VCALENDAR文件提供给iPhone,VCARD文件本身提供给所有其他浏览器。
另外要小心,如果通过UiWebView应用程序查看,那么我将用户重定向到一个用Mobile Safari打开的页面(正如我博客上某人所建议的那样),否则你会得到可怕的#34;帧加载中断&#34 ;错误。
我认为这是关于它的 - 总结一下:
Mobile safari不直接支持VCARD(.vcf)文件,但支持VCALENDAR(.ics)文件。
我希望你喜欢这个解决方案 - 它就像我认为的那样好,直到Apple放弃并允许Mobile Safari接受VCARD文件。
直到下一次......
答案 1 :(得分:9)
虽然略微超出了原始要求的范围,但我找到了可以解决的问题的解决方案。
事实证明,如果您收到一封带有vcard的电子邮件作为附件,那么您就可以打开此附件并将其添加到地址簿中。因此,如果不是向iPhone用户提供vcard下载链接,而是向他们提供通过电子邮件发送vcard的方式,那么他们就可以将卡添加到他们的地址簿中。
一个略微迂回的解决方案,但是我能够想出最好的解决方案,而Apple不允许你本地使用它。当然,这是一个比什么都不做的更好的解决方案。
我最后写了一篇关于此事的博文:Adding a vCard to your iPhone Address Book from a web page
答案 2 :(得分:4)
对于Google员工,截至本文,在iOS 7(测试版6)中,该文件可以直接打开到联系人应用程序中并保存。
答案 3 :(得分:1)
根据参考库,无法在iPhone的地址簿中添加联系人.. 可用的方案是:邮件,电话,文本,地图,YouTube和iTunes链接。
答案 4 :(得分:0)
我可以使用以下资源在Web应用程序上运行该功能:
vCard
"helloWorld.txt"
替换为vCard.getFormattedString()
。文件名(即name
参数)当然也应以.vcf
结尾。确认可以在Android,IOS和Outlook上运行。