背景是使用 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) } } }
![]() | 1 rrubick 180 天前 既然用的桥接,那就跟 rn 没关系了,继续研究下 StoreKit2 吧 |
3 belowfrog 79 天前 用 expo-iap 啊,或者它的老版本 react-native-iap |