Swift PKPass eror 'The pass cannot be read because it isn’t valid'



我正在从服务器创建一个Ticket,并将其传递到我的ios应用程序中,但当我试图将JSON数据传递到PKPass模型中时,我一直会收到这个错误。

Error Domain=PKPassKitErrorDomain Code=1 "The pass cannot be read because it isn’t valid.

在我的服务器上,它说票证创建成功,但我在Xcode中仍然收到这个错误。我把数据解码错了吗?如何使用JSON响应创建PKPass

服务器端代码:

exports.createTicket = functions.https.onRequest(async (req, res) => {
const passName = "Event"
try {
const examplePass = await createPass({
model: "./models/Event",
certificates: {
wwdr: "./models/certs/wwdrc.pem",
signerCert: "./models/certs/signerCert.pem",
signerKey: {
keyFile: "./models/certs/signerKey.pem",
passphrase: "54321"
}
},
overrides: {
// keys to be added or overridden
serialNumber: "AAGH44625236dddaffbda"
}
});
examplePass.barcode("36478105430"); // Random value
// Generate the stream, which gets returned through a Promise
const stream = examplePass.generate();
res.set({
"Content-Type": "application/vnd.apple.pkpass",
"Content-disposition": `attachment; filename=${passName}.pkpass`
});
stream.pipe(res);
console.log("Successfully created ticket", stream)
} catch (err) {
console.log("There was an error", err)
res.set({
"Content-type": "text/html",
});
res.send(err.message);
}
});

IOS侧:

AF.request(URLString, method: .post, parameters: requestData).responseString { response in
guard let data = response.data as? Data else { return }
do {
let pass = try PKPass(data: data)
print(pass)
} catch {
print("Error", error)
}

}

pass.json

{
"formatVersion": 1,
"passTypeIdentifier": "pass.com.CodyHost.Finder-Dev",
"teamIdentifier": "L9C6U8UKPB",
"organizationName": "Finder",
"description": "Rolling loud new york 2020",
"eventTicket": {}
}

签名:

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

查看您的签名和pass.json,您的pass无法加载,因为用于创建签名的证书是:

  • PassTypeId:pass.com.apple.devpubs.example
  • 队名:A93A5CM278

这与pass.json中的passTypeIdentifierteamName不匹配。

./models/certs/signerCert.pem./models/certs/signerKey.pem替换为PassTypeId证书的正确证书和密钥,您应该可以克服此错误。

使用上面的pass.json编译的任何过程仍然不会加载,但原因不同。eventTicket对象不能为空。

相关内容

最新更新