此SO answer适用于我,但我不知道如何“将内容类型更改为application / vnd.apple.pkpass”
目前直接链接到我的pkpass会触发下载,我不知道在哪里设置内容类型。
我已要求我的托管服务提供商验证“application / vnd.apple.pkpass”是否支持MIME类型
我试过了
从iOS 6或Mac OS 10.8点击链接时,如何将文件识别为“application / vnd.apple.pkpass”?
答案 0 :(得分:4)
您需要更改Web服务器的配置才能执行此操作。如何执行此操作取决于您使用的Web服务器。如果您有一家托管公司为您管理您网站的服务器,您可能需要让他们这样做或告诉您在哪里。
许多托管公司都使用Apache作为Web服务器。如果是这样,您可以在公共HTML目录中创建.htaccess文件,并将其放入其中:
AddType application/vnd.apple.pkpass .pkpass
这将使以“.pkpass”结尾的任何文件都以该内容类型下载。
这假设您正在让客户端下载静态文件。如果您正在动态生成此文件,则根本不需要弄乱服务器,只需要发送标头即可。这取决于您正在使用的脚本语言,例如在PHP中:
header("Content-Type: application/vnd.apple.pkpass");
答案 1 :(得分:3)
如果您正在动态生成通行证,您可能会发现以下内容有助于确保每次都下载新的.pkpass,并按照Apple的建议使用最后修改的标头提供该文件。
用PHP编写,但很容易移植到其他语言。
// Assumes a .pkpass bundle named pass.pkpass in the same directory.
//Prevent caching
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
// Set MIME type, encoding and force download
header("Content-type: application/vnd.apple.pkpass; charset=UTF-8");
header('Content-Transfer-Encoding: binary');
header('Content-Disposition:attachment; filename="pass.pkpass"');
// Provide a content-length header based on the file size
$filesize = filesize('pass.pkpass');
if ($filesize)
header("Content-Length: ". $filesize);
// Set a last-modified header (used by the device in update requests)
date_default_timezone_set("UTC");
header('Last-Modified: ' . date("D, d M Y H:i:s", time())) . ' GMT');
// Clear anything that may be in the output buffer and send the bundle contents
flush();
readfile('pass.pkpass');
// Do any clean up required
exit();