问题
I've got a link on a web page that should enable users to download a passbook file from a link, however when clicking on the link in Safari on an iPhone, I get the following error message:
Safari cannot download this file.
I have read similar Q&As on here, and the MIME type is set to application/vnd.apple.pkpass
. The file can be downloaded on a Windows phone.
Any suggestions on why this is the case and how to resolve this so users can access the passbook file?
The pkpass contains the following files:
icon.png
logo.png
strip.png
manifest.json
pass.json
signature
An example of the manifest.json:
{
"icon.png": "fa6b59072ae5c8163c903d8c8b5f2e4a45fbd49b",
"logo.png": "3165c9be22cbf76e2b3118972dabaef8918390f5",
"strip.png": "5d15c45f543e8088c227fc54a6c01d1f9f0b1db3",
"pass.json": "0f536b34a6b73a7799aae43ff9861dde45a6dfc6"
}
An example of the pass.json:
{
"passTypeIdentifier":"pass.com.XXXX.sampleticket",
"formatVersion":1,
"serialNumber":"TIC1000000518",
"description":"XXXX",
"organizationName":"XXXX",
"teamIdentifier":"W9XR4FBDD4",
"logoText":"Dragon Bay",
"foregroundColor":"rgb(0,0,0)",
"backgroundColor":"rgb(255,255,0)",
"labelColor":"rgb(0,0,0)",
"voided":false,
"eventTicket":{
"headerFields":[],
"primaryFields":[],
"secondaryFields":[{"key":"activity",
"label":"11/20/2015 12:00 AM",
"value":"One Day at the Museum"
}],
"auxiliaryFields":[],
"backFields":[{
"key":"terms",
"label":"Terms & Conditions",
"value":"XXXX"
},
{
"key":"contact",
"label":"XXXX",
"value":"XXXX"
},
{
"key":"legal",
"label":"Legal",
"value":"XXXX"
},
{
"key":"notes",
"changeMessage":"%@","label":"Notes","value":""
},
{
"key":"lastUpdated",
"label":"Last Updated",
"dateStyle":"PKDateStyleMedium",
"timeStyle":"PKDateStyleShort",
"isRelative":false,
"value":"2016-01-08T19:00Z"
}]
},
"barcode":{
"format":"PKBarcodeFormatPDF417",
"message":"1000000518",
"messageEncoding":"UTF-8",
"altText":"1000000518"
},
"authenticationToken":"0123456789ABCDEF",
"webServiceURL":"XXXX/passbook.svc"
}
回答1:
Although this is a bit old this happened to me recently so I'll just leave my solution in case it helps anyone else.
The problem on my side was that I was setting the voided field as a string instead of a boolean, like this: "voided":"false" and was missing the "expirationDate" field.
So doing this fixed the issue:
...
"expirationDate": "2016-06-30T11:59:59Z",
"voided": false,
...
It was tricky and took me a while to figure it out. Hope it helps.
回答2:
I changed the webServiceURL to use https as mentioned by @PassKit and the issue was resolved.
回答3:
i had some other issue causing .pkpass files to be displayed correctly when viewed on my mac, but yielded the same "Safari cannot download this file" - error when trying to view them in iOS.
my source of error was:
- i was using integer values for the "key" property in the field-definitions (as i'm using a CMS to create those fields)
so, be sure to use only strings as "key" property in the field-definitions
回答4:
Also check that you're using an up-to-date Apple WWDR intermediate certificate when creating the signature file.
来源:https://stackoverflow.com/questions/34694542/safari-cannot-download-passbook-file-pkpass