我正在使用 Pass 转换器(pass 转换器 github 链接)将 Google Pass 转换为 Apple Pass,输出存储在 AWS S3 中。当用户访问该链接时,它将下载 .pkpass (命名如下:applepass-95370f2a-cd77-4bcc-b52b-be22dff45415.pkpass)。但当我使用 iPhone 14 时,我收到“Safari 无法下载此文件”。
在Windows中通过更改用户代理,它正在被下载
知道如何解决这个问题,下面附有屏幕截图。
这是将 pkpass 发送到 s3 并返回链接的代码:
if (req.passText.charAt(0) === '{') {
try {
const pkPassBuffer = await googleToPkPass(JSON.parse(req.passText), req.fullUrl);
// Respond with the PKPass file
const params = { content: pkPassBuffer, contentType: 'application/vnd.apple.pkpass', }
const applePassUrl = await uploadToS3(params);
res.send({ msg: 'success', url: applePassUrl })
} catch (e) {
console.log(e);
}
}
const uploadToS3 = async ({ content, contentType }) => {
let random = seedrandom(`${new Date().getTime()}`)();
const keyId = uuidv4(`link/${random}`, uuidv4.URL);
const params = {
Bucket: bucket,
Key: `applepass-${keyId}.pkpass`,
Body: content,
ContentEncoding: "base64",
ContentType: contentType,
};
const uploadedfile = await s3.upload(params).promise();
return uploadedfile.Location.replace("s3.amazonaws.com/", "");
};
我使用 pass validator 来验证通行证,它说:
如何解决这个问题,以便我可以将这张通行证添加到苹果钱包
更新: 我遇到问题是因为标头,因为我使用 aws 来存储 pkpass 文件,当我返回它进行下载时,我将其作为 json 内容类型而不是 contentType 发送:'application/vnd.apple.pkpass',
出现“Safari无法下载此文件”错误的原因主要是:
如果响应的 contentType 不是“application/vnd.apple.pkpass” 如果 pkpass 文件中不存在任何必填字段 如果证书无效