使用queryProductDetails获取订阅价格后,如何判断用户折扣资格并展示实付价?
订阅产品折扣价展示判断方案
当你给订阅产品添加优惠后,调用queryProductDetails会拿到两个ProductDetails实例(对应原价和折扣价),但没法直接判断用户是否具备折扣使用资格,容易出现展示价格和实际支付价不符的问题,按下面的方法处理即可解决:
利用订阅产品的优惠资格字段直接判断
如果你用的是Flutter官方in_app_purchase包,订阅类的ProductDetails实际是SubscriptionProductDetails类型,它的subscriptionOfferDetails列表包含了所有优惠信息。每个SubscriptionOfferDetails都自带isEligible属性——这个属性直接标记当前用户能否使用该优惠。遍历这些优惠项,找到
isEligible为true的,对应的价格就是用户实际能支付的价格;如果没有符合条件的优惠,就展示原价。代码优化示例
修改你原有代码,加入资格判断逻辑:Set<String> kIds = <String>{productId!}; final ProductDetailsResponse response = await _iap.queryProductDetails(kIds); if (response.notFoundIDs.isNotEmpty) { if (response.error != null) _handleError(response.error!); } List<ProductDetails> products = response.productDetails; String? displayPrice; for (var product in products) { if (product is SubscriptionProductDetails) { // 优先查找用户可享受的优惠价 for (var offer in product.subscriptionOfferDetails!) { if (offer.isEligible) { displayPrice = offer.pricingPhases.pricingPhaseList.first.formattedPrice; break; } } // 无可用优惠则使用原价 displayPrice ??= product.formattedPrice; } else { // 非订阅产品直接展示正常价格 displayPrice = product.formattedPrice; } } // 将displayPrice展示给用户即可备选方案:后端辅助验证
如果你的应用有后端服务,也可以将用户ID和产品ID传给后端,由后端调用Google Play或App Store的官方查询接口,验证用户的优惠资格后返回应展示的价格。这种方式适合需要统一管控优惠规则的场景。
内容的提问来源于stack exchange,提问作者Zhuoyuan.Li
相关产品推荐
相关产品推荐

