如何设置application/vnd.apple.pkpass的MIME类型以便通过链接或电子邮件共享pass

问题描述 投票:0回答:6

我刚刚创建了一个应用程序和一张通行证,因此我可以将通行证添加到 iPod 中的 PassBook,但我无法通过电子邮件或来自网络服务器的链接共享通行证。从我从 Apple 阅读的文档中,我需要添加一个 MIME 类型为

application/vnd.apple.pkpass
。但是,我不清楚我应该做什么步骤。我不知道如何使用 MIME 类型。

我应该如何添加此 MIME 类型才能使用我的网络服务中的 pass?

ios mime-types passbook
6个回答
16
投票

阿帕奇

将以下行添加到其中之一:

  • 为您的 .pkpass 提供服务的目录中的
    .htaccess
    ,或者
  • mime.types
    文件,或者
  • 到您的应用程序
    httpd.conf
    或虚拟服务器
    .conf
    文件

然后重新启动Apache(如果添加到

.htaccess
则不需要)

AddType application/vnd.apple.pkpass    pkpass

nginx

将以下行添加到您的

mime.types
文件中并重新启动 nginx

application/vnd.apple.pkpass    pkpass;

IIS

  1. 打开 IIS 管理器并导航到您要管理的级别。
  2. 在功能视图中,双击 MIME 类型。
  3. 在操作窗格中,单击添加。
  4. 在添加 MIME 类型中
    .pkpass
  5. 在 MIME 文本框中键入
    application.vnd.pkpass
  6. 点击确定
  7. 重新启动 IIS

如果您通过脚本提供文件并且无法编辑 Web 服务器配置,您可以在发送任何内容之前添加以下行:

PHP

header('Content-Type: application/vnd.apple.pkpass');

C#

WebClient client = new WebClient();
client.Headers.Add("Content-Type", "application/vnd.apple.pkpass");

4
投票

对于纯 PHP 解决方案,请将 .pkpass 包添加到服务器,然后创建以下文件并将该文件命名为 pass.php。

<?php   
$pkpass_file = '/path/to/your/.pkpass/file/GenericMemberCard.pkpass';

header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/vnd.apple.pkpass");
header('Content-Disposition: attachment; filename="pass.pkpass"');
clearstatcache();
$filesize = filesize($pkpass_file);
if ($filesize)
    header("Content-Length: ". $filesize);
header('Content-Transfer-Encoding: binary');
if (filemtime($pkpass_file)) {
    date_default_timezone_set("UTC");
    header('Last-Modified: ' . date("D, d M Y H:i:s", filemtime($pkpass_file)) . ' GMT');
}
flush();
readfile($pkpass_file);

然后创建第二个文件链接到您上面创建的文件。

<a href="pass.php">Click to download your pass</a>

2
投票

我已经使用 Express 服务器实现了这一点。 当我生成通行证并希望通过 URL 发送它时,我设置标头如下 -

router.get("/getpass", (req, res) => {
     const passData = getPass();
     res.setHeader("Content-type", application/vnd.apple.pkpas);
     res.setHeader(
              "Content-disposition",
              `attachment; filename=generatedPass.pkpass`,
            );
     res.status(201).send(passData);
})

0
投票

通过 Windows 10 IIS

  1. 打开 IIS 管理器并导航到您要管理的级别。
  2. 在功能视图中,双击 MIME 类型。
  3. 在操作窗格中,单击添加。
  4. 在添加 MIME 类型中
    .pkpass
  5. 在 MIME 文本框中键入
    application.vnd.pkpass
  6. 点击确定
  7. 重新启动 IIS

0
投票

任何仍在 IIS 中苦苦挣扎的人。对于 IIS,此处的建议类型是错误的 IIS 需要 xx/xxxxxx,因此这就是 IIS 中正确的类型。


0
投票

如果有人到达此页面并被卡住,就像我试图使用 axios 通过网络使用响应类型:'blob'下载苹果通行证

我尝试了所有关于 Mimetype 等的常见想法,但最终解决它的是使用“arraybuffer”而不是“blob”

            try {
                const response = await axios.get(this.route('api.apple.pass'), {
                    responseType: 'arraybuffer', //instead of blob
                });
                const data = new Uint8Array(response.data);
                const dataUri = 'data:application/vnd.apple.pkpass;base64,' + btoa(String.fromCharCode.apply(null, data));
                const link = document.createElement('a');
                link.href = dataUri;
                link.download = 'pass.pkpass';
                link.click();
               } catch (error) {
                console.error('Error downloading pass:', error);
              }
           }
© www.soinside.com 2019 - 2024. All rights reserved.