我在网页上有一个链接,该链接应该允许用户从链接下载存折文件,但是当在 iPhone 上的 Safari 中单击该链接时,我收到以下错误消息:
Safari cannot download this file.
我在这里看过类似的问答,MIME类型设置为
application/vnd.apple.pkpass
。该文件可以在 Windows 手机上下载。
对于为什么会出现这种情况以及如何解决这个问题以便用户可以访问存折文件有什么建议吗?
pkpass 包含以下文件:
icon.png
logo.png
strip.png
manifest.json
pass.json
signature
manifest.json 的一个例子:
{
"icon.png": "fa6b59072ae5c8163c903d8c8b5f2e4a45fbd49b",
"logo.png": "3165c9be22cbf76e2b3118972dabaef8918390f5",
"strip.png": "5d15c45f543e8088c227fc54a6c01d1f9f0b1db3",
"pass.json": "0f536b34a6b73a7799aae43ff9861dde45a6dfc6"
}
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"
}
注意 - 我遇到了这个问题。我的解决方案是选择不同的中间证书。 Apple 在本页的中间证书中有两个标记为“WWDR 证书”的证书:https://www.apple.com/certificatauthority/
然而,截至目前,只有 2023 年到期的那个才真正用于此目的。
虽然这有点老了,但最近发生在我身上,所以我会留下我的解决方案,以防它对其他人有帮助。
我这边的问题是我将 voided 字段设置为字符串而不是布尔值,如下所示:“voided”:“false”并且缺少“expirationDate”字段。
所以这样做解决了问题:
...
"expirationDate": "2016-06-30T11:59:59Z",
"voided": false,
...
这很棘手,我花了一段时间才弄明白。希望对您有所帮助。
如@PassKit 所述,我将 webServiceURL 更改为使用 https,问题已解决。
我有一些其他问题导致 .pkpass 文件在我的 mac 上查看时正确显示, 但产生了相同的“Safari 无法下载此文件”- 尝试在 iOS 中查看它们时出错。
我的错误来源是:
所以,一定要在字段定义中只使用字符串作为“键”属性
还要检查您在创建签名文件时是否使用了最新的Apple WWDR 中间证书。
可以在Console.app中查看iPhone日志查看错误原因:
pass.com.example.XXXX
Pass Viewer
Invalid data
MobileSafari
(如果在 Safari 中打开)MobileMail
(如果在邮件中打开)就我而言,我能够确定错误是由于我将
serialNumber
值设置为整数而不是字符串引起的:🙄
Invalid data error reading pass pass.com.example.XXXX/(null). Value for key 'serialNumber' must be of class NSString, but is actually of class __NSCFNumber.