PWA vs Native App
Has anyone here had immense success with a PWA? I'm considering it over a native app & would appreciate people's input. Thanks
Has anyone here had immense success with a PWA? I'm considering it over a native app & would appreciate people's input. Thanks
Upfront: I'm the creator, this isn't a paid ad, just a project I build alone.
I started Floravia because I kept killing my plants and every existing app was either a wall of ads or paywalled to death. The idea is simple: photo → ID → care plan, plus an AI you can ask real questions ("why is my monstera drooping?").
What I actually want is honest feedback: what's missing? what does it misidentify? what would stop you using it?
Free to try, no card: floravia.app
And if you'd rather not click, happy to answer plant questions right here anyway. 🌱
There is a recent BUG (it worked before!): if you INSTALL a PWA (webapk) and if you have many different PWAs under the same domain (but in different directories), only the first one installs. Chrome says "already installed" and does not produce the APK, even if every PWA/WEBAPP has different name, and ID. In previous versions it was possible. So there is an big error. Calling const installedRelatedApps = await navigator.getInstalledRelatedApps?.(); gives no answer. (which is correct).
I built a small PWA (a 30-minute guided Ashtanga yoga practice generator) and shipped it to the Play Store as a Trusted Web Activity. Sharing the build because it's a fairly "pure" PWA and I hit a few gotchas that might save someone time.
The stack / shape
vite-plugin-pwa (Workbox) for the service worker; fully offline-capable once loaded, including the audio (voice cues, bell, ambient loops are precached).Things that went well
AudioBufferSourceNode + GainNode, which <audio loop> couldn't do without an audible seam).The painful lessons (Play Billing in a TWA) I added a one-time in-app purchase via the Digital Goods API + Play Billing. This is where TWAs get sharp edges:
window.getDigitalGoodsService. Result: hasDGService: false, PaymentRequest.show() rejecting instantly, no purchase sheet, and hours of chasing the wrong things. Switching the default browser to Chrome fixed it immediately.getDetails.Net takeaway: a TWA is a great way to get a PWA into the Play Store, but billing only works for users whose provider browser supports Digital Goods (effectively Chrome). I handle the rest gracefully, when isBillingAvailable() is false, the app just doesn't offer the purchase and stays fully functional as the free tier.
Disclosure: I made this, so there's a link, but I'm posting mainly for the build discussion. Happy to go deeper on any part (service worker setup, the Web Audio looping, the TWA billing wiring).
Play Store (TWA): https://play.google.com/store/apps/details?id=com.ashtanga30.twa
Anyone else shipped TWAs with billing? Curious how you handle the non-Chrome-provider gap, that feels like the biggest weakness of the TWA-plus-billing path right now.