iOS 未找到收据

Dus*_*ler 6 ios receipt

我正在 Swift 3.0 应用程序中实现应用内购买,因此我需要获取应用程序收据以根据 iTunes 商店进行验证。以下是我获取收据的方式:

\n\n
func getReceipt() -> Data? {\n    if Bundle.main.appStoreReceiptURL != nil {\n        print("app receipt: \\(Bundle.main.appStoreReceiptURL)")\n        do {\n            let receiptData = try Data(contentsOf: Bundle.main.appStoreReceiptURL!)\n            print(receiptData)\n            return receiptData\n        } catch {\n            print("error converting receipt to Data: \\(error.localizedDescription)")\n        }\n    }\n    return nil\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的收据 URL 控制台输出是:

\n\n
\n

应用程序收据:可选(文件:///Users/dustinspengler/Library/Developer/XCPGDevices/433E8E8F-B781-4ADC-A92D-5CABC28E94D6/data/Containers/Data/Application/C25BE9B6-FB64-4D49-9CF2-9DA371060A7B/StoreKit/收据)

\n
\n\n

然后它无法将收据转换为Data并打印 catch 语句:

\n\n
\n

将收据转换为数据时出错:文件 \xe2\x80\x9creceipt\xe2\x80\x9d 无法打开\xe2\x80\x99,因为没有此类文件。

\n
\n\n

在游乐场、模拟器和真实设备中运行此程序时,我得到完全相同的输出,那么考虑到用户尚未进行应用内购买,这是否意味着该应用程序不存在收据?当阅读苹果的文档时,我的印象是它们总是被创建,无论之前是否购买过。

\n

Dus*_*ler 7

这个答案基于应用程序在本地计算机上运行的上下文。如果该应用程序已在应用程序商店中上线,即使该应用程序是免费的,您在下载该应用程序时就会收到收据。

@Paulw11 回答:

在用户购买之前不会有收据。对于从 App Store 下载的应用程序(即使是免费的)。这是一次购买,所以会有收据。对于来自 Xcode 的调试版本,在进行应用内购买之前不会有收据。