How to set MIME type of application/vnd.apple.pkpass in order to share pass by link or email
I just created an app and a pass, so I can add the pass to the PassBook in iPod, but I cannot share the pass by email or link from web server. From the documentation I read from Apple, I need to add a MIME type as application/vnd.apple.pkpass
. However, I don't understand clearly what steps should I do. I don't know how to use MIME type.
How should I add this MIME type in order to use pass from my web service?
Solution 1:
Apache
Add the following line to either:
- the
.htaccess
in the directory serving your .pkpass, or - to the
mime.types
file, or - to your appache
httpd.conf
or virtuatl server.conf
file
Then restart Apache (not required if adding to .htaccess
)
AddType application/vnd.apple.pkpass pkpass
nginx
Add the following line to your mime.types
file and restart nginx
application/vnd.apple.pkpass pkpass;
IIS
- Open IIS Manager and navigate to the level you want to manage.
- In Features View, double-click MIME Types.
- In the Actions pane, click Add.
- In the Add MIME Type
.pkpass
- Type
application.vnd.pkpass
n the MIME text box - Click OK
- Restart IIS
If you are serving your file via a script and are not able to edit your web server config you could add the following line before any content is sent:
PHP
header('Content-Type: application/vnd.apple.pkpass');
C#
WebClient client = new WebClient();
client.Headers.Add("Content-Type", "application/vnd.apple.pkpass");
Solution 2:
For a pure PHP solution, add your .pkpass bundle to the server, then create the following file and name this file 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);
Then create a second file linking to the file you created above.
<a href="pass.php">Click to download your pass</a>