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

如何在Play Billing Library v5.0中查询用户当前订阅的优惠方案

解决方案

要获取用户当前订阅的优惠方案(offer1/offer2),你需要利用Google Play Billing返回的Purchase对象中的隐藏字段,具体步骤如下:

核心方法:解析Purchase的原始JSON

queryPurchasesAsync返回的Purchase对象虽然公开API未直接提供优惠方案信息,但它的getOriginalJson()方法返回的JSON字符串包含了完整的订阅详情,其中就包含用户订阅的offer标识:

  1. 调用billingClient.queryPurchasesAsync获取用户的订阅列表
  2. 遍历列表找到对应月度基础套餐的Purchase实例
  3. 调用purchase.getOriginalJson()获取原始JSON字符串
  4. 使用JSON解析库(如Gson、Jackson)解析该字符串,提取offerId字段(或subscriptionOfferDetails数组中的offerId),即可判断用户订阅的是offer1还是offer2

示例代码(用Gson解析):

// 获取目标Purchase
Purchase targetPurchase = null;
for (Purchase purchase : purchases.getPurchasesList()) {
    if (purchase.getProductId().equals("你的月度基础套餐productId")) {
        targetPurchase = purchase;
        break;
    }
}

// 解析原始JSON获取offerId
if (targetPurchase != null) {
    String originalJson = targetPurchase.getOriginalJson();
    Gson gson = new Gson();
    PurchaseJson purchaseJson = gson.fromJson(originalJson, PurchaseJson.class);
    String userOfferId = purchaseJson.getOfferId(); // 或从subscriptionOfferDetails中提取
    // 根据userOfferId判断是offer1还是offer2
}

// 对应的实体类示例
class PurchaseJson {
    private String offerId;
    // 其他需要的字段
    public String getOfferId() { return offerId; }
}

备选方案:查询购买历史记录

如果queryPurchasesAsync未返回所需信息,可以调用billingClient.queryPurchaseHistoryAsync获取用户最近的购买历史,PurchaseHistoryRecord同样包含getOriginalJson()方法,解析后可得到offer信息。

额外建议

  • 确保使用Billing Library 5.0及以上版本,旧版本可能不包含offer相关字段
  • 为了更可靠,建议在用户首次订阅时将offerId同步到你的后端服务器,卸载重装后直接从后端拉取该信息,避免本地解析可能出现的兼容性问题

内容的提问来源于stack exchange,提问作者Priya Sindkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:35:16