ios 将vCard编码为Apple Wallet的QR/条形码

1yjd4xko  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(139)

我尝试使用 vCard 作为Apple Wallet中QR或条形码的内容。我已经能够对内容进行编码,但QR码不可读-我相信这是因为我无法提前正确准备/格式化数据。
当我使用PHP时,这不是一个特定于语言的问题。
以下是我使用的vCard示例:

BEGIN:VCARD
VERSION:3.0
REV:2023-11-08T00:00:00Z
N:Murphy;Jill;;;
ORG:Company
TITLE:Developer
EMAIL;INTERNET;WORK:[email protected]
URL:https://example.com
END:VCARD

字符串
在Apple的Wallet format中,barcode data以JSON格式指定:

"barcode": {
    "format": "PKBarcodeFormatQR",
    "message": "VCARD_DATA_HERE",
    "messageEncoding": "iso-8859-1"
},


我尝试了以下几种组合:
1.直接传入vCard文本
1.使用“\n“分隔符将vCard数据连接到一行中
1.使用urlencode(PHP)
1.所有上述与苹果的各种支持的条形码格式
这些格式是:PKBarcodeQR、PKBarcodeQR PDF 417、PKBarcodeQR Aztec和PKBarcodeQR Code 128
我知道我可以托管一个 vCard,只是有一个URL的条形码,但我故意去一个独立的版本。
任何人都可以提供指导,如何格式化 vCard 文本之前,我把它变成pass.json,使它允许一个可读的条形码?

xa9qqrwz

xa9qqrwz1#

经过进一步的尝试和错误,我偶然发现了答案。这是如何准备数据。我一直在用错误的分隔符连接 vCard 的每一行。
我应该一直使用“\n\r“,在我的情况下,一旦转义将是“\\r\\n“。

function getVCard($pass_name) {
    $vcard = '';
    $vcfFilePath = "./passes/$pass_name/vcard.vcf";
    if (file_exists($vcfFilePath)) {
        $vcard = '';
        $file = fopen($vcfFilePath, 'r');
        $vcard = '';
        while (!feof($file)) {
            $line = fgets($file);
            $vcard .= trim($line) . "\\r\\n";
        }
        fclose($file);
    }
    return $vcard;
}

字符串
在我的pass.json for Apple Wallet中,相关的JSON片段看起来像这样:

"barcode": {
    "format": "PKBarcodeFormatQR",
    "message": "BEGIN:VCARD\r\nVERSION:3.0\r\nREV:2023-11-08T00:00:00Z\r\nN:Murphy;Jill;;;\r\nORG:Company\r\nTITLE:Developer\r\nEMAIL;INTERNET;WORK:[email protected]\r\nURL:https://example.com\r\nEND:VCARD\r\n\r\n",
    "messageEncoding": "iso-8859-1"
},

相关问题