如何通过URL重定向让iPhone下载联系人卡片

时间:2011-12-07 03:45:39

标签: iphone qr-code vcard

我正在研究跟踪工具,我想知道是否有人知道如何通过URL重定向让iPhone下载联系人卡片。 iPhone不会从网上下载联系人卡片。有没有人想出办法解决这个问题?在大多数手机的其他情况下,我可以将它们重定向到vcard或类似文件,并使用正确的http标头,让手机下载它。 iPhone不允许vcard下载,那么如何通过网络浏览器将vcard送到iPhone上?

2 个答案:

答案 0 :(得分:2)

我刚刚在我的博客上发布了另一种解决方案,该解决方案描述了如何将联系人文件作为附件附加到由移动版Safari处理的日历文件

http://mobicontact.info/iphone/download-contact-from-web-page/

也许这里有一些你可以使用的东西。没有具体解决重定向问题,但它确实允许用户在浏览日历应用程序后直接打开联系人。

博客显示完整的解决方案,包括整个过程的源代码和图像,因此比我在Stack Overflow上可以放置的更容易阅读,我试图防止许多此类论坛之间的重复。需要注意的主要问题是Apple使用:

ATTACH;VALUE=BINARY;ENCODING=BASE64;FMTTYPE=text/directory;
X-APPLE-FILENAME=iPhone Contact.vcf:
QkVHSU46VkNBUkQNClZFUlNJT046M…etc… [base64 encoded VCARD]

用于VCALENDAR文件中的嵌入式VCARD。创建一个VCALENDAR文件,然后在其中对您的VCARD进行base64编码 - 下面的代码片段(我博客上的完整详细信息)

<?php
# Send correct headers      
header("Content-type: text/x-vcalendar; charset=utf-8"); 
# Alternatively: application/octet-stream
# Depending on the desired browser behaviour
# Be sure to test thoroughly cross-browser

header("Content-Disposition: attachment; filename=\"iphonecontact.ics\";");
# Output file contents - simple version
#echo file_get_contents("iphonecontact.ics");

# Generate file contents - advanced version
# BEGIN:VCALENDAR
# VERSION:2.0
# BEGIN:VEVENT
# DTSTART;TZID=Europe/London:20120617T090000
# DTEND;TZID=Europe/London:20120617T100000
# SUMMARY:iPhone Contact
# DTSTAMP:20120617T080516Z
# ATTACH;VALUE=BINARY;ENCODING=BASE64;FMTTYPE=text/directory;
#  X-APPLE-FILENAME=iphonecontact.vcf:
#  QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpOOkNvbnRhY3Q7aVBob25lOzs7DQpGTjppUGhvbm
#  UgQ29udGFjdA0KRU1BSUw7VFlQRT1JTlRFUk5FVDtUWVBFPVdPUks6aXBob25lQHRoZXNpbGlj
#  b25nbG9iZS5jb20NClRFTDtUWVBFPUNFTEw7VFlQRT1WT0lDRTtUWVBFPXByZWY6KzQ0MTIzND
#  U2Nzg5MA0KRU5EOlZDQVJE
# END:VEVENT
# END:VCALENDAR

echo "BEGIN:VCALENDAR\n";
echo "VERSION:2.0\n";
echo "BEGIN:VEVENT\n";
echo "SUMMARY:Click attached contact below to save to your contacts\n";
$dtstart = date("Ymd")."T".date("Hi")."00";
echo "DTSTART;TZID=Europe/London:".$dtstart."\n";
$dtend = date("Ymd")."T".date("Hi")."01";
echo "DTEND;TZID=Europe/London:".$dtend."\n";
echo "DTSTAMP:".$dtstart."Z\n";
echo "ATTACH;VALUE=BINARY;ENCODING=BASE64;FMTTYPE=text/directory;\n";
echo " X-APPLE-FILENAME=iphonecontact.vcf:\n";
$vcard = file_get_contents("iphonecontact.vcf");        # read the file into memory
$b64vcard = base64_encode($vcard);                      # base64 encode it so that it can be used as an attachemnt to the "dummy" calendar appointment
$b64mline = chunk_split($b64vcard,74,"\n");             # chunk the single long line of b64 text in accordance with RFC2045 (and the exact line length determined from the original .ics file exported from Apple calendar
$b64final = preg_replace('/(.+)/', ' $1', $b64mline);   # need to indent all the lines by 1 space for the iphone (yes really?!!)
echo $b64final;                                         # output the correctly formatted encoded text
echo "END:VEVENT\n";
echo "END:VCALENDAR\n";
?>

答案 1 :(得分:1)

您可以尝试重定向到.tel网站。

例如,我的二维码将iPhone重定向到http://edent.tel/

或者,如果您不想购买.tel,您可以通过“点击通话”链接创建一个包含所需电话号码的简单网站。

<a href=”tel:123456798″>Call me on 123456789</a>