Skip to main content
Google Play Billing Library

Google Play Billing Library 8.0: Release Notes and Action Checklist

Explore what’s new in Google Play Billing Library 8.0 — including one-time product offers, auto-reconnect, major API removals, and base plan requirements.

Kamo

Kamo

July 23, 20254 min read
Google Play Billing Library 8.0: Release Notes and Action Checklist

On June 30, 2025, Google officially released version 8.0 of the Google Play Billing Library (PBL), including Kotlin extension updates. As always, I'm unpacking all the most relevant changes — in priority order, with engineering context and action guide.


1. In-app items will now be referred to as one-time products

This appears to be a naming convention shift announced by Google — with no visible changes yet in the Play Console UI or SDK behavior. Your existing product IDs and configurations continue to work as before. We assume this is an early-stage rollout, and that interface or behavior changes may follow.

2. Multiple purchase options and offers for one-time products

Google hints at subscription-like flexibility coming to one-time products — intro offers, regional targeting, and more. This capability isn’t yet available in the console, but the groundwork is clearly being laid.

3. Improved queryProductDetailsAsync() method This method now provides more detailed results: in addition to available products, it also includes those that couldn’t be fetched (e.g., due to invalid offers). To support this, the callback now receives a QueryProductDetailsResult object instead of a plain list.Before:After:Important: This change requires updating the implementation of your ProductDetailsResponseListener.onProductDetailsResponse() callback, as its signature has been updated in PBL 8.0.

4. Automatic service reconnection

If you’ve ever seen SERVICE_DISCONNECTED errors, you’ll appreciate this one. You can now enable automatic reconnection with a single line:

This will automatically retry connection when the service drops — a helpful quality-of-life improvement.

5. Sub-response codes for launchBillingFlow()BillingResult now includes a sub-response code to help identify specific failure reasons. Here’s how to get the sub-response code after calling launchBillingFlow():

This field currently supports only one new value, but more detailed sub-codes are expected to be added in future updates. Small change — potentially big impact on your UX and support diagnostics.

6. Removal of queryPurchaseHistory()This is a significant change: queryPurchaseHistory() has been fully removed. It was the only SDK method for accessing expired subscriptions or consumed purchases — and was useful for building analytics based on historical purchase data.From now on:

You can only query active subscriptions or non-consumed one-time purchases using queryPurchasesAsync()- You’ll now need to maintain your own purchase history on the backend, as it’s no longer possible to retrieve it through the Billing Library

  • You can optionally use the Voided Purchases API for refunds and chargebacks — but it’s not a complete replacement, as it only covers cancellation, refund, and chargeback cases

As a result of these changes, we’ve had to deprecate the syncHistoricalData() method, which was previously used to help migrate user purchase history when connecting to Qonversion. Now, the only option to get complete history is to provide a dataset with historical purchases manually. 7. Removal of querySkuDetailsAsync() This method, which predates the base plan architecture, has been removed. Historically, it allowed querying products without specifying a basePlanId, relying on a “backwards compatible base plan” defined in the Play Console.As of PBL 8.0:

You now need to use queryProductDetailsAsync(), which returns all available base plans for each product. From there, you should select the appropriate one — either by basePlanId or based on your own logic (e.g., duration)In our dashboard, basePlanId must now be explicitly defined for each subscription product

Important: If no base plan is selected, your app won’t be able to initiate purchases or fetch store data correctly. 8. Updated enablePendingPurchases() APIThe old no-arg enablePendingPurchases() method is removed. Now, you need to pass explicit params:Before:After:Note: This is functionally equivalent to the old call — the format for specifying this option has simply changed and now requires explicit setup with enableOneTimeProducts(), which was previously assumed by default.9. Removal of queryPurchasesAsync(skuType) overloadThe version of queryPurchasesAsync() that accepted a raw skuType is gone. Before: | After:This is part of Google’s broader migration from SKU-based APIs to product-based architecture.

Developer Actions Checklist

Google Play Billing Library 8.0: Release Notes and Action Checklist

Final Thoughts

Google Play Billing Library 8.0 continues Google’s shift toward a more structured and explicit API approach. While some legacy functionality like purchase history retrieval is being phased out, the added flexibility and precision around product querying and purchase flows are clear upgrades — just be sure to update your integration accordingly.

Kamo

Kamo

SDK Engineer at Qonversion

Kamo works on SDK development, making integration easy for developers.

Share:

Ready to optimize your subscriptions?

Start using Qonversion today and see the difference.