You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

苹果Promotional Offer内购报SKErrorDomain 12签名无效问题求助

iOS 接入 Promotional Offer 提示签名无效(SKErrorDomain error 12)问题求助

首先我们已完成包含免费试用(introductory offer)的基础订阅功能开发,运行一切正常。后续接入Promotional Offer功能时,即便完全遵循苹果官方文档指引操作,始终收到相同报错:签名无效。

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

相关说明:

  • 签名由服务端实现,已验证为有效
  • 尝试过在终端用openssl生成经验证有效的签名,仍然无法正常运行
  • 点击UI上的Purchase Offer按钮后,苹果底部弹窗可正常唤起,优惠价格展示正确
  • 移动端使用swift (5)和SwiftyStoreKit处理支付流程
  • 使用沙箱账号在开发包、TestFlight包环境下测试均复现问题

优惠应用核心方法如下:

func proceedToApplyOffer(signatureResult: PromotionalOfferSignatureResponse, username: String, completion: @escaping ((_ purchaseResult: Result<PurchaseDetails>) -> ())) {
    if #available(iOS 12.2, *) {
        
        self.getAppleProducts() {
            productsResult in
            
            // 获取苹果产品信息,用于创建折扣对象
            switch productsResult {
            case .success(products: let products):
                
                // 创建折扣对象,用于后续购买操作
                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("当前系统版本不支持该功能")
    }
}

我查阅过此前同类提问,均无有效解答,苹果开发者论坛的相关问题也未得到官方答复,恳请各位提供排查思路或解决方案,万分感谢。


内容的提问来源于stack exchange,提问作者dianaqqq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 11:36:04