You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:55:00