PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → Mise à jour refusée sur playstore : READ_MEDIA_IMAGES/READ_MEDIA_VIDEO is a restricted
Mise à jour refusée sur playstore : READ_MEDIA_IMAGES/READ_MEDIA_VIDEO is a restricted
Débuté par Pascal BOULESTEIX, 29 mai 2026 08:07 - 7 réponses
Membre enregistré
1 259 messages
Posté le 29 mai 2026 - 08:07
Bonjour à tous
A ma grande surprise, ma dernière mise en production d'une de mes applications est rejetée au motif qu'elle n'est pas éligible à l'accès à toutes les photos du téléphone.
L'accès aux photos du téléphone est aussi vieux que mon application créée en 2017.
Dans la fenêtre du processus de compilation, la fenêtre des autorisations indique que les trois accès aux médias est utilisé par l'application mais il y a un badge "information" qui indique qu'il faudra justifier de ceci dans Google.





Remarques :
Mon autre application mise en production 5mn avant, utilise les mêmes autorisations sans problème et elle n'a pas été rejetée !
Contrairement à d'autres autorisations, mes applications ne demandent pas explicitement l'accès aux médias avec "PermissionDemande". Par contre, lors du premier lancement des applications, WM ou Google affichent une demande d'accès aux médias ; l'utilisateur peut alors autoriser ou pas l'accès partiel ou total aux médias.

Questions :
Vos applications accèdent-elles aux photos du téléphone ? Si oui, quelles autorisations utilisez-vous ? Votre application peut-elle accéder aux photos prisent par l'application "Appareil photo" native du téléphone.

Not compliant with the Photo and Video Permissions policy, or we were unable to review and verify your in-app experience for compliance with this policy.

READ_MEDIA_IMAGES/READ_MEDIA_VIDEO is a restricted permission and apps must only declare this permission if their core functionality requires broad access to all photo or video files on the device. Apps that request this restricted permission are subject to review, and those that do not meet the acceptable use case criteria will be disallowed from publishing on Google Play.

We’ve reviewed your appeal request and found that your app does not qualify for use of READ_MEDIA_IMAGES/READ_MEDIA_VIDEO for the following reasons:

Specifically, permission use is not directly related to your app’s core purpose:

We found that your app is not compliant with how the READ_MEDIA_IMAGES/READ_MEDIA_VIDEO permissions are allowed to be used. Your app only requires one-time or infrequent access to media files on the device. Only apps with a core use case that require persistent access to photo and video files located in shared storage on devices are allowed to use photo and video permissions. See Photo and Video Permissions article for more details.
Next Step:

Please remove the use of READ_MEDIA_IMAGES/READ_MEDIA_VIDEO permission from all version codes within the submission (includes both production and testing tracks) and use the Android photo picker.
For additional help, you can review the following resources:

Photo and Video Permissions policy
Android Photo Picker
Please update your app to fix this issue. You may also want to double-check that your app complies with all other Developer Program Policies.


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
1 426 messages
Posté le 29 mai 2026 - 21:53
Bonjour Pascal, je suis passé par là pas plus tard que la semaine dernière. Ça prend maintenant d'excellentes raisons pour obtenir cette autorisation, sécurité oblige. Voici ma façon de contourner le tout sans aucune permission. Espérant que Google ne nous enlève pas cette option.

UriRessource = URISélecteur(uriImage)
SI PAS ErreurDétectée ET PAS EnModeArrièrePlan ALORS
FenAttenteDébut("Chargement de l'image...")
URIVersBuffer(UriRessource, ProcChargement)
FIN

PROCEDURE INTERNE ProcChargement(bResultat, buffer)
SI bResultat ALORS

SI Taille(buffer) > 1000 ALORS
gbufImage1 = buffer
FenAttenteFin()
FIN
FIN
FIN
Membre enregistré
1 259 messages
Posté le 30 mai 2026 - 09:21
Bonjour Jean
Quel code utilisais-tu avant celui-ci ?
Dans mon cas, une action de mon application offre la possibilité de rechercher une photo sur le téléphone

bCheminImage est un booléen
bCheminImage=AlbumSélecteur(albumImage,PROCINT_FIND_PHOTO)

PROCEDURE INTERNE PROCINT_FIND_PHOTO(sCheminImage="")
sNewName est une chaîne = ""
sGUID est une chaîne = ""

SI sCheminImage = "" ALORS
Erreur(ErreurInfo())
RETOUR
FIN

sGUID = DonneGUID(guidFormaté)
sNewName = gsRepPhoto+[fSep()]+SAI_GUID+"_"+sGUID+fExtraitChemin(sCheminImage,fExtension)
fCopyFile(sCheminImage,sNewName)
ZoneRépétéeAjouteLigne(ZR_PHOTOS,sNewName,SAI_GUID+"_"+sGUID+fExtraitChemin(sCheminImage,fExtension),"P")

FIN


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
1 259 messages
Posté le 31 mai 2026 - 08:23
Jean,

J'ai fait un mini projet pour tester ta solution et reproduire le fonctionnement de mon application : c'est nickel :)

Par contre, je trouve que Google violente les mouches en vol !

J'ai ouvert un incident chez PCSoft. Le plus simple serait que la fonction AlbumSélecteur utilise le composant autorisé par Google

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
1 259 messages
Posté le 02 juin 2026 - 06:28
Après l'ouverture d'un incident auprès du supoort PCSoft, celui-ci m'a demandé de supprimer les deux autorisations et de faire un test.

J'ai donc fait un mini projet pour utiliser AlbumSelecteur et enlevé les deux autorisations que l'ajout de AlbumSélecteur avait ajouté ;(

Une fois testé sur le téléphone, j'ai eu accès aux photos? Il semblerait donc que AlbumSélection n'ait pas besoin des deux autorisations ; conséquences ?

J'ai testé une autre solution (celle de Jean) pour accéder aux photos en utilisant URISélecteur (voir le code plus bas).
Le résultat est différent de AlbumSélection mais on peut choisir les photos.

Question : que vaut-il mieux utiliser ? Cette seconde solution ou bien "bricoler" les autorisations de AlbumSélection ?

Si AlbumSélection peut se passer des deux autorisations (du moins des tests partiels semblent valider cet aspect) , ne serait-il pas plus user-friendely que les deux autorisations ne soient pas ajoutées automatiquement et que ceux qui en auraient besoin les ajoutent ?

Si, pour des raisons de portabilité AlbumSélection ne pouvait pas être modifié, il serait bien de créer une nouvelle fonction PhotoSélectionGoogle qui utilise l'API que préconise Google.

Deux codes équivalents pour choisir des photos :

AlbumSélection :

bCheminImage est un booléen
bCheminImage=AlbumSélecteur(albumImage,PROCINT_FIND_PHOTO)

PROCEDURE INTERNE PROCINT_FIND_PHOTO(sCheminImage="")
sNewName est une chaîne = ""
sGUID est une chaîne = ""

SI sCheminImage = "" ALORS
Erreur(ErreurInfo())
RETOUR
FIN

sGUID = DonneGUID(guidFormaté)
sNewName = gsRepPhoto+[fSep()]+SAI_GUID+"_"+sGUID+fExtraitChemin(sCheminImage,fExtension)
fCopyFile(sCheminImage,sNewName)
ZoneRépétéeAjouteLigne(ZR_PHOTOS,sNewName,SAI_GUID+"_"+sGUID+fExtraitChemin(sCheminImage,fExtension),"P")

FIN


URISélecteur :
UriRessource est une URI = URISélecteur(uriImage + TAB + "application/pdf")
sNewName est une chaîne = ""
sFileName est une chaîne = ""
sGUID est une chaîne = ""
sai_guid est une chaîne =DonneGUID(guidFormaté)

SI PAS ErreurDétectée ALORSsFileName=UriRessource.Chemin

sGUID = DonneGUID(guidFormaté)
sNewName = gsRepPhoto+[fSep()]+sai_guid+"_"+sGUID+fExtraitChemin(sFileName,fExtension)

URIVersFichier(UriRessource, sNewName, ProcEnregistre)

PROCEDURE INTERNE ProcEnregistre(bResultat, sChemin)
SI bResultat ALORS
ToastAffiche("Enregistrement terminé")
SINON
ToastAffiche("Echec de l'enregistrement")
FIN
FIN

FIN


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Message modifié, 02 juin 2026 - 06:30
Membre enregistré
1 426 messages
Posté le 02 juin 2026 - 13:18
Bonjour Pascal, je suis bien content d'apprendre que les autorisations se soient pas nécessaires pour l'utilisation d'AlbumSelecteur.

Toutefois, je préfère utiliser URISelecteur() car il gère toutes sorte de fichiers (Images, vidéos, pdf etc...). Il est géré par Android et te donne accès à des répertoires impossibles à utiliser autrement, même Onedrive et autres drives virtuelles. Tu peux te créer un composant standard utilisable dans n'importe quel programme qui réponde à toutes les utilisations.

La sécurité est un enjeu de plus en plus contraignant pour les programmeurs mais un mal nécessaire.
Membre enregistré
1 259 messages
Posté le 12 juin 2026 - 07:57
A ma question au support technique : vaut-il mieux utiliser AlbumSelecteur SANS les deux autorisations OU BIEN URISelecteur ?
le support répond ceci :
Si l'application permet seulement à l'utilisateur de choisir ponctuellement une photo déjà présente sur le téléphone, il n'est pas nécessaire de conserver ces autorisations larges. Google réserve désormais ces accès aux applications dont la fonction principale impose un accès étendu et récurrent aux médias du terminal.

En pratique, notre préconisation est donc la suivante : conserver une sélection ponctuelle via URISélecteur ou via le sélecteur système Android, supprimer READ_MEDIA_IMAGES et READ_MEDIA_VIDEO de la génération, puis valider à nouveau le comportement sur l'appareil avant une nouvelle soumission sur le Play Store.


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
1 259 messages
Posté le 25 juin 2026 - 11:09
Bonjour à tous
J'ai adopté le URISélecteur dans mon projet mais les deux autorisations sont toujours présentes dans la liste de autorisations nécessaire.
Après enquête, c'est l'utilisation de l'appareil photo qui les ajoutent.
Bref, après des tests internes de l'application, j'ai mis en prod hier soir : Google a accepté la mise à jour et l'appareil photo fonctionne.
A suivre.

--
Pascal Boulesteix
Applications Visiolittoral et WNat