Hi everyone,
I'm running into the known Billing Library 8 limitation around consumed one-time products, and want to confirm the recommended path forward, plus flag one detail that seems inconsistent.
Setup:
- Flutter app, no login system (anonymous app_user_ids)
- purchases_flutter 10.11.0 / purchases-android (via hybrid common)
- Product
sfl_prois a non-consumable one-time product (not a subscription), correctly configured as non-consumable in the RevenueCat dashboard - Transfer Purchases setting is enabled correctly
- Testing via Open Testing track with a licensed tester account (sandbox/test purchases, not production charges)
Issue:
- User purchases
sfl_proon Device A → works, entitlement active. - On Device B (same Google account, same license tester, confirmed identical "preferred billing account" identifier in logcat),
restorePurchases()returns successfully but with an empty result:
activeEntitlements: [],
nonSubscriptionTransactions: [],- However, if the user tries to purchase
sfl_proagain from Device B, Google Play immediately returns "You already own this item" (ITEM_ALREADY_OWNED), confirming Google Play does consider the purchase owned by this account.
So restorePurchases() can't see the purchase, but Google Play's purchase flow clearly can.
Questions:
- Is Order ID transfer (via dashboard or Restore by Order ID API) really the only supported path for this scenario given the Billing Library 8 constraints, or is there a more automated way to sync this (e.g., triggering a sync when we detect ITEM_ALREADY_OWNED during a purchase attempt)?
- Is there a recommended way to catch
ITEM_ALREADY_OWNEDin the Flutter SDK specifically and automatically kick off a recovery flow (grant entitlement, or prompt for Order ID) without the user needing to dig up their Order ID manually? - Product was never configured as consumable at any point (verified in dashboard history) - is there any other known cause for
restorePurchases()returning empty here, or is this purely a byproduct of BC8's removed query capability for one-time products with anonymous users?
Note: All purchases described above (Device A purchase, Device B restore attempt, and repurchase attempt) were made using a Google Play licensed tester account, so these are sandbox/test transactions, not real production purchases.
Any guidance appreciated - want to make sure I'm not missing a supported automatic recovery path before building a manual Order ID fallback UI.
