购买促销优惠(苹果):签名无效(SKErrorDomain 错误 12。)

时间:2021-06-18 09:36:12

标签: ios swift in-app-purchase

首先,我们通过免费试用(介绍性优惠)实施了基本订阅,并且一切顺利。之后,我们实现了 Promotional Offer,问题如下: 即使我们遵循了 Apple 在他们的文档中提供的指南(从上到下),我们也总是会遇到同样的错误,即“签名无效”。

("Error: The operation couldn’t be completed. (SKErrorDomain error 12.)"

提及:

  • 签名是在我们的服务器端实现的
  • 签名经验证有效
  • 我尝试使用来自终端的 openssl 生成的签名(经验证也有效),但仍然无效
  • 在 UI 上,我们有一个标记为 Purchase Offer 的按钮,当点击该按钮时,Apple 的底部模式会正确显示,价格与报价一致
  • 在移动端,我们使用 swift (5)SwiftyStoreKit 来处理购买。
  • 测试是使用沙盒帐户(开发和测试飞行构建)进行的

以下是申请优惠的基本方法:

    
    func proceedToApplyOffer(signatureResult: PromotionalOfferSignatureResponse, username: String, completion: @escaping ((_ purchaseResult: Result<PurchaseDetails>) -> ())) {
        if #available(iOS 12.2, *) {
            
            self.getAppleProducts() {
                productsResult in
                
                // Get the apple products in order to be able to create the discount object
                
                switch productsResult {
                case .success(products: let products):
                    
                    // Create the discount object with which the purchase will be made
                    
                    guard let monthlyProduct: SKProduct = products.first(where: { $0.productIdentifier == self.monthlyProductIdentifier}) else { return }
                    let discount = SKPaymentDiscount(identifier: self.promotionalOfferIdentifier, keyIdentifier: self.keyIdentifier, nonce: signatureResult.nonce, signature: signatureResult.signature, timestamp: NSNumber(value: signatureResult.timestamp))
                    let swiftyDiscount = PaymentDiscount(discount: discount)
                    
                    self.paymentService.purchaseProductWithDiscount(product: monthlyProduct, username: username, discount: swiftyDiscount) {
                        result in
                        switch result {
                        
                        case .error(error: let skError):
                            completion(.error(skError))
                            
                        case .success(purchase: let purchaseDetails):
                            completion(.success(purchaseDetails))
                        }
                    }
                case .error(error: let error):
                    completion(.error(error))
                }
            }
        }
        else {
            debugPrint("Not available on current OS version")
        }
    }

我知道之前有人问过这个问题(我都读过),但他们没有任何答案,我希望这个会有答案,因为我得出的结论是,即使是发布在apple.developer 论坛仍未得到答复。 我将不胜感激任何帮助,任何想法 谢谢

0 个答案:

没有答案