如何在React Native(Expo)中用Superwall获取已购订阅详情
获取Superwall SDK中已购订阅的详细方案信息(React Native/Expo)
getSubscriptionStatus()仅返回订阅的活跃/非活跃状态,要获取具体的套餐类型(月度/年度)、名称、时长等信息,你可以通过以下两种方式实现:
方法一:通过最新交易记录匹配套餐
Superwall的getLatestTransaction()方法会返回用户最近的订阅交易详情,其中包含产品ID,你可以通过该ID与你预先配置的套餐(如com.yourapp.monthly、com.yourapp.yearly)做关联判断:
Superwall.shared .getLatestTransaction() .then((transaction) => { if (!transaction) { console.log("无有效订阅交易记录"); return; } const { productId, purchaseDate, expirationDate } = transaction; // 根据产品ID判断套餐类型 let planInfo = {}; if (productId.includes("monthly")) { planInfo = { type: "月度套餐", duration: "30天" }; } else if (productId.includes("yearly")) { planInfo = { type: "年度套餐", duration: "365天" }; } else { planInfo = { type: "未知套餐" }; } console.log("当前订阅详情:", { ...planInfo, 购买时间: purchaseDate, 过期时间: expirationDate }); }) .catch((err) => console.error("获取交易记录失败:", err));
方法二:结合Paywall产品列表与订阅状态获取详情
先通过getPaywallProducts()获取所有在Superwall后台配置的订阅产品,再结合订阅状态匹配用户当前的订阅产品,拿到本地化的名称、价格等信息:
// 同时获取产品列表与订阅状态 Promise.all([ Superwall.shared.getPaywallProducts(), Superwall.shared.getSubscriptionStatus() ]) .then(([products, status]) => { if (status !== "active") { console.log("当前无活跃订阅"); return; } // 结合交易记录的productId匹配对应产品 return Superwall.shared.getLatestTransaction().then((transaction) => { if (!transaction) return; const activeProduct = products.find(p => p.productId === transaction.productId); if (activeProduct) { console.log("订阅套餐详情:", { 名称: activeProduct.localizedTitle, 描述: activeProduct.localizedDescription, 价格: activeProduct.localizedPrice, 产品ID: activeProduct.productId }); } }); }) .catch((err) => console.error("获取订阅详情失败:", err));
注意事项
getUserAttributes()仅用于获取你主动设置的用户自定义属性(如用户昵称、等级),不会返回订阅产品相关数据,因此无法通过该方法获取套餐信息。- 确保你在Superwall Dashboard、App Store Connect(iOS)、Google Play Console(Android)中配置的产品ID保持一致,否则会出现匹配失败的情况。
内容的提问来源于stack exchange,提问作者Komeil Mehranfar
相关产品推荐
相关产品推荐

