Play Billing Library 7 Deadline Passed: A 5-Check Flutter Upgrade (2026)
Is your Flutter app on Play Billing Library 7 or newer, and what happens if it is not?
Google Play's deprecation FAQ sets the deadline for Play Billing Library 7 at 31 August 2026 for new apps and updates, with an extension deadline of 1 November 2026. Both dates have passed. An app that is already published keeps working on an older version, but a new app or an update has to use a supported Billing Library version to go through. If your Flutter app takes payments with the in_app_purchase plugin, the Billing Library version is decided by the version of in_app_purchase_android that your project resolves, not by anything you wrote yourself. This guide gives a 5-check upgrade to find that version, read the Play Console warning, upgrade the plugin, fix the Dart changes and test the result.
Plugin versions and Google's pages change. Everything below was checked on 2026-11-04; confirm the current versions on pub.dev and the Android Developers site before you ship.
The deadlines in one table
| Billing Library | New app and update deadline | Extension deadline |
|---|---|---|
| Version 7 | 31 August 2026 | 1 November 2026 |
| Version 8 | 31 August 2027 | 1 November 2027 |
| Version 9 | 31 August 2028 | 1 November 2028 |
The table comes from Google's Play Billing deprecation FAQ. The practical reading in November 2026: version 7 or newer is the floor. Version 8 is supported until the 2027 dates, and version 9 is the newest. If your build still carries version 6 or older, your next update is the one that gets blocked. For context on the other Play deadline of this season, see our guide to the target API 36 deadline and extension.
The 5-check Flutter billing upgrade
- Find the version your build really uses. In the project, run
flutter pub deps | grep in_app_purchaseor openpubspec.lockand read the resolved version ofin_app_purchase_android. Then confirm in the built app: in Android Studio's APK Analyzer, open the mergedAndroidManifest.xmland look for thecom.google.android.play.billingclient.versionentry. Google's FAQ says that entry must be present, and that if it is missing, you should check how your manifests merge. Do the same for an AAB or APK that you uploaded, not only for your debug build. - Read what Play Console says. Warnings appear on the Policy status page in Play Console, and the FAQ describes an extension request form there. The 1 November 2026 extension date for version 7 has passed, so plan to fix the version before your next update rather than counting on more time.
- Upgrade the plugin. Raise
in_app_purchaseinpubspec.yamland runflutter pub upgrade in_app_purchase. The currentin_app_purchaserelease depends onin_app_purchase_android ^0.5.0, so a normal upgrade resolves to the newest 0.5.x. Checkpubspec.lockafterwards. - Fix the Dart-side changes. The Billing Library changes surface in a few Dart APIs. See the table below.
- Test on a testing track before production. Upload to a closed or internal testing track and run a purchase, a restore and a cancelled purchase with a license tester account. Then roll out in stages.
Which plugin version carries which Billing Library
| in_app_purchase_android | Billing Library | What changes for your Dart code |
|---|---|---|
| 0.4.0 to 0.4.x | 7.1.1 (up from 6.2.0) | Meets the version 7 floor |
| 0.5.0 to 0.5.4 | 8.0.0 | queryPurchaseHistory removed; use queryPurchases. Adds subResponseCode, oneTimePurchaseOfferDetailsList and unfetchedProductList |
| 0.5.5 | 9.1.0 | Minimum Android SDK 23 (Flutter's own minimum is already 24). A blocked Play Store now reports billingUnavailable instead of error |
The pub.dev changelog is the source for this table. Treat the version ranges as a guide, and read the changelog entries for the versions between yours and the latest before you upgrade.
The Dart changes that can break a build or a purchase flow
- Purchase history. If your code calls
queryPurchaseHistory, it will no longer compile on 0.5.0 or newer. UsequeryPurchasesfor purchases that are still active. It does not return everything the old history call did, so decide what your restore flow really needs. - Error handling. Billing Library 9 reports
billingUnavailablewhere it previously reportederrorwhen the system blocks the Play Store app, for example in an OEM kids mode. The changelog warns that code that branches on the response code, or matches the stringified code inIAPError.message, must handle the new value. A "try again" dialog is the wrong message for a device where billing is blocked. - New response detail. Google's migration guide for version 9 lists new sub-response codes, such as
PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDSandUSER_INELIGIBLE. You do not have to handle them to compile, but a purchase screen that distinguishes them gives the user a better message. - Minimum Android SDK. Version 9 requires Android SDK 23. Flutter's own minimum is already 24, so a current Flutter project is unaffected.
The migration guide recommends automatic reconnection to the billing service. The plugin manages the connection for you, so you do not need native code for this, but your app should still handle a purchase stream that reports an error and be able to recover on the next launch.
The trap: an old Flutter SDK can pin an old plugin
Pub picks the newest plugin version that your Flutter and Dart constraints allow. The in_app_purchase changelog notes that applications built with older versions of Flutter keep using compatible versions of the platform implementations. In practice, a project that is stuck on an older Flutter SDK can resolve to an older in_app_purchase_android that still bundles a lower Billing Library, even after you run pub upgrade. If pubspec.lock does not show the version you expected, check your environment constraints and the Flutter version you build with before you blame the plugin. Upgrading Flutter may be the real fix, and our Flutter Android 16 upgrade hub covers that path.
Test and roll out the upgrade safely
A payment library changes the part of your app that handles money, so give it more caution than a UI change.
- Use a testing track. A 12-tester closed track is covered in our closed testing guide.
- Test real purchase paths. Buy, cancel, restore on a second device and test a declined payment. Check that your app does not grant an entitlement for a pending or cancelled purchase.
- Add your release to your usual checklist. The Flutter release checklist for Google Play covers the rest of a release.
- Roll out in stages. Staged rollout rules explain how to halt a bad release, and how long Google Play review takes helps you plan the timing.
GSPTeck in one line
GSPTeck is giosaia's indie studio, and these guides are written for solo Flutter developers shipping to Google Play. We link to the primary documentation for every claim, and we do not claim hands-on results we have not had. Browse the rest of the series on the GSPTeck blog.
FAQ
Will my published Flutter app stop working after the Play Billing Library 7 deadline?
No. Google's FAQ says existing apps keep working. The deadline applies to new apps and to updates, which must use a supported Billing Library version to be accepted.
How do I check which Play Billing Library my Flutter app uses?
Read the resolved in_app_purchase_android version in pubspec.lock, then match it against the plugin's changelog. Confirm in the built app by looking for the com.google.android.play.billingclient.version entry in the merged manifest.
What breaks when upgrading in_app_purchase_android to 0.5.x?
The changelog lists the removal of queryPurchaseHistory in 0.5.0. Use queryPurchases instead. Version 0.5.5 also changes the error reported when the Play Store is blocked to billingUnavailable.
Why does pub upgrade not give me the newest in_app_purchase_android?
Pub chooses the newest version that fits your Flutter and Dart constraints. An older Flutter SDK can resolve to an older plugin release, so check your SDK version and constraints.
Sources
- Android Developers: Play Billing Library deprecation FAQ (checked 2026-11-04)
- Android Developers: Migrate to Google Play Billing Library 9 (checked 2026-11-04)
- pub.dev: in_app_purchase_android changelog (checked 2026-11-04)
- pub.dev: in_app_purchase changelog (checked 2026-11-04)