SwiftyStoreKit语法已更改?

SwiftyStoreKit语法已更改?,swift,swift3,in-app-purchase,Swift,Swift3,In App Purchase,我正在遵循一个实现应用内购买的教程,当我试图编写它时,有一行代码与教程不同 视频中说将代码行写为: SwiftyStoreKit.verifyReceipt(password: sharedSecret, completion: {(more code added here)}) 然而,当我把它写出来的时候,唯一的选择涉及到另一部分,这就是“使用:” SwiftyStoreKit.verifyReceipt(using: 'ReceiptValidator', password: 'Strin

我正在遵循一个实现应用内购买的教程,当我试图编写它时,有一行代码与教程不同

视频中说将代码行写为:

SwiftyStoreKit.verifyReceipt(password: sharedSecret, completion: {(more code added here)})
然而,当我把它写出来的时候,唯一的选择涉及到另一部分,这就是“使用:”

SwiftyStoreKit.verifyReceipt(using: 'ReceiptValidator', password: 'String?', completion: '(VerifyReceiptResult) -> Void')

如果我只是删除“using:”部分,就会发生错误。我是一个相当新的开发人员,如果有人能解释这意味着什么,以及如何填写这一部分,那就太好了。

首先,您需要创建AppleReceiptValidator对象,并将此对象传递给第一个参数,如下图所示

let validator = AppleReceiptValidator(service: .production)
SwiftyStoreKit.verifyReceipt(using: validator, password: "Your_shared_secret") { (result) in
    switch result {
        case .success(receipt: let receiptInfo): self.reactOn(info: receiptInfo)
        case .error(error: let receiptError): self.reactOn(error: receiptError)
        }
    completion()
}
我想指出的是,在Apple文档中,您不应该从应用程序向Apple后端发送收据。应该这样做:

  • 你的应用程序将收据发送到你的后端
  • 您的后端将收据发送到Apple后端进行验证
  • 你的后端得到苹果的响应
  • 您的后端将结果发送回您的应用程序,该结果有效或无效 苹果的文档中写的是关于密码的:“仅用于包含自动续费订阅的收据。你的应用程序的共享秘密(十六进制字符串)。”


    更多信息。

    根据《swiftyStoreKit官方指南》,当前版本的swiftyStoreKit用于验证应用内订阅(包括首先验证收据)的完整正确代码为:

    let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "your-shared-secret")
    SwiftyStoreKit.verifyReceipt(using: appleValidator) { result in
    switch result {
    case .success(let receipt):
        let productId = "com.musevisions.SwiftyStoreKit.Subscription"
        // Verify the purchase of a Subscription
        let purchaseResult = SwiftyStoreKit.verifySubscription(
            ofType: .autoRenewable, // or .nonRenewing (see below)
            productId: productId,
            inReceipt: receipt)
    
        switch purchaseResult {
        case .purchased(let expiryDate, let items):
            print("\(productId) is valid until \(expiryDate)\n\(items)\n")
        case .expired(let expiryDate, let items):
            print("\(productId) is expired since \(expiryDate)\n\(items)\n")
        case .notPurchased:
            print("The user has never purchased \(productId)")
        }
    
       case .error(let error):
          print("Receipt verification failed: \(error)")
       }
    }
    

    您可以在这里找到它,包括其他示例:

    我在某个地方读到,我们不能将“sharedSecretString”用作!“收件验证器”。对吗?*可以用,不能用。对不起,谢谢,但我还不能奖励奖金,因为有一个最短的时间限制。你能在空闲时间帮我回答这个问题吗?非常感谢。