有没有熟悉 react native 的老哥,求帮忙看个问题

143 天前
 smileme

背景是使用 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)
            }
        }
    }
2098 次点击
所在节点    React
3 条回复
magic3584
143 天前
既然用的桥接,那就跟 rn 没关系了,继续研究下 StoreKit2 吧
smileme
142 天前
@magic3584 好的,感谢老哥,我在再研究一下 StoreKit2
belowfrog
41 天前
用 expo-iap 啊,或者它的老版本 react-native-iap

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1125174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX