2026-09-16 · Monetization & Payments

Google Play 结算库(Billing Library)版本要求——2026 年 8 月 31 日截止线、延期申请与 v8 的破坏性变更

1. Google 对 Play 结算库实行「两年弃用周期」:每个大版本自发布起支持两年,之后 Play Console 就会拒收用该版本编译的新构建。官方弃用文档中的时间表(https://developer.android.com/google/play/billing/deprecation-faq)为:5.x 新应用与更新的最后期限 2024-08-31(延期申请截止 2024-11-01)、6.x 2025-08-31/2025-11-01、7.x 2026-08-31/2026-11-01、8.x 2027-08-31/2027-11-01。落到实操上:自 2026 年 8 月 31 日起,任何使用 Play 结算的新应用或应用更新,都必须基于结算库 8.0.0 或更高版本构建。

2. 官方措辞必须逐字看清。弃用文档写的是:该弃用「只限制新应用和更新继续使用旧版结算库;已在使用的旧版库的应用会继续正常工作」。它是发布闸门,不是运行时开关——已经上线的 v7 版本仍能正常处理购买。你失去的是「再发布任何版本」的能力,包括安全补丁或任何重建,所以只要你还打算维护某个应用,就必须迁移。

3. 延期是「申请」而非自动宽限。7.x 的延期申请截止日是 2026-11-01,且必须在原截止日之前提交。应用一旦处于已弃用版本,Play Console 会在应用页给出警告并在「政策状态(Policy status)」页留一条收件箱消息;延期表单就在该警告或问题的详情页上(https://developer.android.com/google/play/billing/release-notes)。

4. 检测陷阱:Play Console 是通过库自动写入清单文件的 com.google.android.play.billingclient.version 条目来判断你用了哪个版本的。多模块工程的清单合并有时会把这个条目丢掉——一旦最终合并的清单里没有它,Play Console 无法识别你的库版本,警告可能根本不会推给你。请核对合并后的清单,不要把「没收到警告」当作没事。

5. v8 的破坏性变更(每一项在替换前都会编译失败):querySkuDetailsAsync() → queryProductDetailsAsync(QueryProductDetailsParams, ProductDetailsResponseListener);无参数的 enablePendingPurchases() → enablePendingPurchases(PendingPurchasesParams);queryPurchasesAsync(String skuType, PurchasesResponseListener) 重载 → queryPurchasesAsync(QueryPurchasesParams, PurchasesResponseListener);queryPurchaseHistoryAsync() 在客户端已无替代方案,购买历史必须改为服务端记录;BillingClient.Builder.enableAlternativeBilling()、AlternativeBillingListener、AlternativeChoiceDetails → enableUserChoiceBilling(UserChoiceBillingListener)、UserChoiceBillingListener、UserChoiceDetails;此外 ProductDetailsResponseListener.onProductDetailsResponse() 的返回类型改为 QueryProductDetailsResult,把「已获取」与「未获取」的商品分开、并带每件商品的独立状态码。术语也变了:文档中的「in-app items」在 v8 里改称「one-time products(一次性商品)」,且与订阅一样支持多购买选项与优惠。

6. 实操清单:依赖锁定 8.x 系列的最新补丁版本,不要停在 8.0.0;上线前用许可测试账号重新走通购买、恢复购买与待处理购买(pending purchase)三条路径;购买令牌继续在服务端校验;并把它当成年度例行维护而不是一次性任务——8.x 自己对「新应用与更新」的截止线是 2027-08-31,延期兜底到 2027-11-01。每次截止前预留一个季度做迁移,才是它永远不会卡住发版的唯一办法。

需要专家帮助?联系KappS获取专属解答 →
← 返回FAQ列表