navigator.permission are not well supported on mobile. However, this is supported on most mobile devices today:
<input type="file" accept="audio/*" capture="microphone">
On mobile devices, this will probably cause the app to delegate recording to a 3rd party app (iOS microphone app, or whatever recording app users have installed on Android).
I understand this is not ideal, and if you’re building an audio recording app, you’re better off looking at React Native than going with a PWA today. However, the standards do exist, and browsers are implementing them. Chrome for Android & Android Browser partially support
getUserMedia() behind a feature flag.
The latest iOS Safari has full support for
getUserMedia() today. Notably though, the global market share for the latest iOS is rather small.
There are some remaining device API gaps that need to be plugged before PWAs can truly replace all native apps (excluding native hardware drivers), but the gaps are closing relatively fast.