【发布时间】:2017-08-26 01:35:18
【问题描述】:
我正在 Swift 3.0 应用中实现应用内购买,因此我需要获取应用收据以对照 iTunes 商店进行验证。以下是我获取收据的方式:
func getReceipt() -> Data? {
if Bundle.main.appStoreReceiptURL != nil {
print("app receipt: \(Bundle.main.appStoreReceiptURL)")
do {
let receiptData = try Data(contentsOf: Bundle.main.appStoreReceiptURL!)
print(receiptData)
return receiptData
} catch {
print("error converting receipt to Data: \(error.localizedDescription)")
}
}
return nil
}
收据 URL 的控制台输出是:
应用收据:可选(file:///Users/dustinspengler/Library/Developer/XCPGDevices/433E8E8F-B781-4ADC-A92D-5CABC28E94D6/data/Containers/Data/Application/C25BE9B6-FB64-4D49-9CF2-9DA371060A7B /StoreKit/收据)
然后它无法将收据转换为Data 并且 catch 语句打印:
将收据转换为数据时出错:文件“收据”无法打开,因为没有这样的文件。
在游乐场、模拟器和真实设备上运行此程序时,我得到完全相同的输出,所以 考虑到用户尚未进行应用内购买,这是否意味着该应用不存在收据? 在阅读 Apple 的 documentation 时,我得到的印象是它们总是被创造出来的,无论之前是否购买过。
【问题讨论】:
-
在用户进行购买之前没有收据。对于从 App Store 下载的应用程序(甚至是免费应用程序)。这是购买,所以会有收据。对于来自 Xcode 的调试版本,在进行应用内购买之前没有收据。
-
感谢@Paulw11 的回复!如果您想将此作为答案提交,我会接受。
-
考虑到此信息未在 Apple 文档中列出,是否有人愿意对否决票发表评论?