背景是使用 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)
}
}
}
|