Matthias Nott
2026-06-11 39392618ecfeb89576387b0229fd1ebee6229946
refs
author Matthias Nott <mnott@mnsoft.org>
Thursday, June 11, 2026 15:59 +0200
committer Matthias Nott <mnott@mnsoft.org>
Thursday, June 11, 2026 15:59 +0200
commit39392618ecfeb89576387b0229fd1ebee6229946
tree 6086e47dc83073ed1f202ce4a53b56451226442e tree | zip | gz
parent 01b26eb410542d33200cf300ff5d7228dafb9a9e view | diff
fix(iap): align PurchaseService with the live store products

The paywall scaffolding (PaywallBanner, locked sessions in the drawer, settings
upgrade button) was already in place but pointed at the wrong product id and
had a hard 'Pro=true' override that masked the real flow.

- kFullAccessProductId is now com.tekmidian.pailot.pro to match the IAPs
created today in App Store Connect (Apple ID 6779190925) and Google Play
Console (one-time product, Active).
- PurchaseService.initialize() no longer forces _isPro = true: it hydrates
from the SharedPreferences cache, and only grants Pro automatically in
kDebugMode when the platform store is unavailable (so sideloaded dev
builds still work). Release builds without a store fall back to the
cached value rather than silently unlocking everything.
- isProProvider's default is now false; main.dart still seeds it from
PurchaseService.instance.isPro on boot and keeps it synced via a listener.
- kFreeTierMessageTtl bumped 15m → 30m to match the stated free-tier window
(2 sessions / 30 minutes).
2 files modified
changed files
lib/providers/providers.dart diff | view | blame | history
lib/services/purchase_service.dart diff | view | blame | history