iOS has a somewhat heavy-handed implementation of user permissions for camera access in the Safari browser. The permissions are not persistent, and re-requested with every page load.
If you have a single-page app, you should expect to grant camera access once per application load.
However, if you're loading the page each time you need to scan, you will see the camera permission dialog. Whenever possible, we recommend implementing your workflow without reloading the page.
However, this issue has been resolved by iOS 13 as written here (Per-site settings): https://www.apple.com/au/ios/ios-13-preview/features/. Please find here how to grant camera access to your website: https://stackoverflow.com/questions/48847388/how-to-permanently-allow-usage-of-camera-on-trusted-websites-with-ios-safari/57368061#57368061.
Permissions are persistent on OSX and Chrome on Android, and are asked with every camera load on Firefox.