背景是使用 react native + storekit2 (桥接) 开发 APP ,接入苹果订阅。遇到一个奇怪的问题是: 使用沙箱账号测试支付的时候,调用product.purchase(productId)会返回购买成功 success ,但Transaction.currentEntitlements 又取不到生效的订单,我以为是有没过期还在续订的订单。

但用Transaction.all查到所有订单之后发现所有订单都是过期的。完全没头脑,官方文档也翻了几遍,AI 也问了各种,就是不知道为啥。

求个老哥帮忙解决下,可付费。

另外之所以用桥接没有直接用 react-native-iap ,是因为上周遇到一个蜜汁问题,死活查不到在 apple store connect 配置的 sku ,后面按照 github 其他人的教程用了桥接调用就 OK 了。

这是 purchase 的代码:

func purchaseProduct(_ productId: NSString,
                         resolver resolve: @escaping RCTPromiseResolveBlock,
                         rejecter reject: @escaping RCTPromiseRejectBlock) {
        Task {
            do {
                let products = try await Product.products(for: [productId as String])
                guard let product = products.first else {
                    reject("no_product", "未找到对应产品", nil)
                    return
                }
                let result = try await product.purchase()
                print("[StoreKit2Module] 购买结果: \(result)")
                switch result {
                case .success(_):
                    print("[StoreKit2Module] 购买成功")
                    resolve("购买成功")
                case .userCancelled:
                    print("[StoreKit2Module] 用户取消了购买")
                    reject("cancelled", "用户取消了购买", nil)
                case .pending:
                    print("[StoreKit2Module] 购买处于等待状态")
                    reject("pending", "购买处于等待状态", nil)
                @unknown default:
                    print("[StoreKit2Module] 未知的购买结果")
                    reject("unknown", "未知的购买结果", nil)
                }
            } catch {
                print("[StoreKit2Module] 购买时发生错误: \(error)")
                reject("purchase_error", "购买时发生错误: \(error)", error)
            }
        }
    }
举报· 106 次点击
登录 注册 站外分享
快来抢沙发
0 条回复  
返回顶部