Le scan de code-barres ne pouvait pas fonctionner sur Android
Le manifest ne declarait que INTERNET. Or /meals scanne via navigator.mediaDevices.getUserMedia() : Capacitor 8 relaie bien la demande (BridgeWebChromeClient.onPermissionRequest mappe VIDEO_CAPTURE sur Manifest.permission.CAMERA, puis lance le permissionLauncher), mais il ne peut demander a l'utilisateur que ce qui est declare dans le manifest. La permission etant absente, le scan etait le seul chemin casse - <input capture> continuait de marcher, puisqu'il delegue a l'app appareil photo par intent. CAMERA implique android.hardware.camera ET android.hardware.camera.autofocus en fonctionnalites REQUISES, donc filtrage au Play Store, tant qu'on ne les redeclare pas en required="false". Les deux sont donc declarees explicitement : le scan demande facingMode ideal, pas exact, l'app reste utilisable sans. Cote iOS, les libelles de permission ne decrivaient que le scan de code-barres et la photo de profil, alors que la camera et la photothèque servent aussi a photographier une assiette et une etiquette nutritionnelle pour analyse. Un libelle qui ne couvre pas l'usage reel est un motif classique de rejet App Store. NSPhotoLibraryAddUsageDescription reste inutile : rien n'ecrit dans la photothèque (aucun PHPhotoLibrary ni UIImageWriteToSavedPhotosAlbum dans ios/). Les deux fichiers sont bien formes (xml.etree, plistlib). Rien n'est compile ici : reste a verifier sur un appareil que le dialogue camera apparait et que le flux video s'affiche. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -32,4 +32,24 @@
|
||||
<!-- Permissions -->
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<!-- Caméra : la page /meals de l'app web utilise navigator.mediaDevices.getUserMedia()
|
||||
pour le scan de code-barres (BarcodeDetector natif, repli ZXing) et des
|
||||
<input type="file" accept="image/*" capture="environment"> pour photographier
|
||||
une assiette / une étiquette nutritionnelle.
|
||||
Capacitor 8 relaie ces demandes au runtime :
|
||||
- getUserMedia -> BridgeWebChromeClient.onPermissionRequest() (VIDEO_CAPTURE -> Manifest.permission.CAMERA)
|
||||
- input capture -> BridgeWebChromeClient.onShowFileChooser() (isMediaCaptureSupported() -> permissionLauncher)
|
||||
mais il ne peut demander que ce qui est déclaré ici. -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- La permission CAMERA implique android.hardware.camera ET
|
||||
android.hardware.camera.autofocus en fonctionnalités REQUISES (donc filtrage
|
||||
Play Store) tant qu'on ne les redéclare pas explicitement en required="false".
|
||||
Réf. https://developer.android.com/guide/topics/manifest/uses-feature-element
|
||||
(§ "Permissions that Imply Feature Requirements").
|
||||
Le scan demande facingMode: { ideal: 'environment' } — "ideal", pas "exact" —
|
||||
donc l'app reste utilisable sans caméra arrière ni autofocus. -->
|
||||
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
|
||||
</manifest>
|
||||
|
||||
Reference in New Issue
Block a user