2017-03-31 176 views
0

我正在Swift 3.0应用程序中实施应用程序内购买,所以我需要抓取应用程序收据才能根据iTunes商店进行验证。这里是我如何获得收据:iOS Receipt not found

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控制台输出为:

应用收据:可选(文件:///用户/ dustinspengler /库/开发/ XCPGDevices/433E8E8F-B781-4ADC-A92D-5CABC28E94D6 /数据/集装箱/数据/应用/ C25BE9B6-FB64-4D49-9CF2-9DA371060A7B/StoreKit /收据)

它此后未能将收据转化为Data和catch语句打印:

将收据转换为数据时出错:文件“收据”无法打开,因为没有这样的文件。

我得到了一个操场,模拟器运行这个时完全相同的输出,而真正的设备,从而这是否意味着没有收据存在考虑的事实,用户尚未作出了应用内购买的应用程序然而?当通过苹果的documentation阅读时,我得到的印象是,无论先前购买什么,它们总是被创建。

+0

在用户进行购买*之前没有收据。对于从App Store下载的应用程序(甚至是免费的应用程序)。这是*购买*,所以会有收据。对于Xcode的调试版本,只有在进行应用内购买之后才会有收据。 – Paulw11

+0

感谢您的回复@ Paulw11!如果你想提交这个答案,我会接受它。 –

+0

考虑到这些信息没有在苹果文档中列出,有没有人关心评论下来的投票? –

回答

0

回答Paulw11:

没有收到,直到用户进行购买。对于从App Store下载的应用程序(甚至是免费的应用程序)。这是一项购买,所以会有收据。对于Xcode的调试版本,只有在进行应用内购买之后才会有收据。