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

Billing Library 6.0订阅升级报错“user not eligible”求助

问题描述

配置了两个独立订阅产品,分别对应基础方案:

  • SubsA -> 月度基础方案A
  • SubsB -> 年度基础方案B

单独购买两个订阅均成功,但已购买月度订阅后,尝试升级为年度订阅时触发错误:User is not eligible for this product。

升级代码如下:

var billingFlowParams = BillingFlowParams.newBuilder()
    .setObfuscatedAccountId(UUID.randomUUID().toString())
    .setProductDetailsParamsList(
        listOf(BillingFlowParams.ProductDetailsParams.newBuilder()
            .setProductDetails(productlist[productId]!!.productDetails!!)
            .setOfferToken(productlist[productId]!!.offerToken!!).build()
        )
    )
    .setSubscriptionUpdateParams(
        BillingFlowParams.SubscriptionUpdateParams.newBuilder()
            // purchaseToken can be found in Purchase#getPurchaseToken
            .setOldPurchaseToken(productlist["subscription_monthly"]!!.purchaseToken!!)
            .setSubscriptionReplacementMode(ReplacementMode.WITH_TIME_PRORATION)
            .build()
    ).build()
val billingResult = billingClient.launchBillingFlow(this, billingFlowParams)

if(billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
    showBillingClientError(billingResult.responseCode)
}

已确认:

  • 新订阅的offerToken和旧订阅的purchaseToken均正确,信息来自queryProductDetailsAsync()和queryPurchasesAsync()的返回结果并存储在productlist中。
排查方向

1. 两个订阅未归属同一订阅组

Google Play Billing的订阅升级/降级功能仅支持同一订阅组内的产品。如果SubsA和SubsB分属不同订阅组,系统会直接判定用户无升级资格,触发该错误。

解决操作:

  • 登录Google Play控制台,进入应用的「商品」->「订阅」页面。
  • 检查SubsA和SubsB的订阅组配置,确保两者属于同一个订阅组;若没有现成组,需新建订阅组并将两个产品关联进去。

2. 年度订阅的优惠方案限制了用户资格

如果年度订阅SubsB使用了带限制条件的优惠方案(比如仅新用户可享的首月折扣),已购买月度订阅的用户不符合优惠资格,也会触发错误。

解决操作:

  • 检查SubsB的offer设置,确认是否存在「仅新用户」等限制规则。
  • 升级场景下,优先使用年度订阅的基础方案令牌,而非优惠方案令牌;若需保留优惠,需调整优惠规则允许现有订阅用户使用。

3. 混淆账号ID未保持一致

代码中每次调用都生成随机UUID作为obfuscatedAccountId,但Google Play要求同一用户的该ID必须固定。前后购买时账号ID不一致,系统可能无法识别为同一用户,导致资格验证失败。

解决操作:

  • 为同一用户固定使用同一个obfuscatedAccountId,比如采用应用内用户的唯一标识(加密后),而非每次生成随机值。

4. 订阅替换模式的兼容性问题

WITH_TIME_PRORATION是常用替换模式,但部分地区或特定订阅组合可能存在兼容性问题。可尝试切换其他模式测试:

  • ReplacementMode.IMMEDIATE_WITH_PRORATION
  • ReplacementMode.DEFERRED

解决操作:

  • 修改setSubscriptionReplacementMode的参数,切换模式后重新测试升级流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:12:24