IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[Rio] [Android 9] : Silence radio


Sujet :

Web & réseau Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 38
    Points : 18
    Points
    18
    Par défaut [Rio] [Android 9] : Silence radio
    Bonjour à tous,

    J'ai une petite appli BDD entre mobile et serveur via WebBroker. Je dois synchroniser les bases à la demande.
    Tout est OK avec un client Windows ou Android 6.
    Mais c'est le silence radio avec Android 9 !! Aucune information n'arrive au serveur !!

    Il semblerait que ce soit un problème de permissions. Ce qui est probable puisqu'un simple Get fonctionne sous navigateur !

    Quelles permissions modifier ? C'est encore très confus pour un néophyte comme moi !

    Merci par avance de votre assistance en espérant un jour pouvoir vous rendre service à mon tour.

    Alain

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 032
    Points : 21 133
    Points
    21 133
    Par défaut
    Un sujet évoquait les permissions spécifiques à Android, c'était pour le micro, il semble qu'il existe "android.permission.INTERNET" donc voir ce qu'il faut passer à PermissionsService.RequestPermissions n'ayant jamais fait d'Android, ce n'est qu'une déduction entre le sujet et une rapide cherche Google
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 032
    Points : 26 015
    Points
    26 015
    Par défaut
    sous Android les permissions sont dynamiquement maintenant si je ne m'abuse, au lieu de donner tous les droits à l'installation, l'application réclame le droit dont elle a besoin au moment où elle doit l'utiliser.

    http://docwiki.embarcadero.com/RADSt...rmission_Model
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre à l'essai
    Inscrit en
    octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Merci de votre retour,

    Je cherche et teste désespérément depuis ce matin. Et je ne ménage pas ma peine.
    Certaines permissions nécessitent l'accord utilisateur à l'installation mais de nombreuses autres sont à fixer au déploiement.
    Il est effectivement pas question de donner tous les droits en se disant que ça devrait marcher !

    Ce qui me contrarie c'est que ma config fonctionne pour android 6 mais visiblement pas pour android 9. D'où mon intervention sur le forum.

    Je n'ai que ces deux versions sous la main pour mes tests. (J'ai aussi une version 2 mais bon !)
    Il semblerai qu'il y ait des soucis avec la version Android 9 et Delphi. Mais je n'ai pas trouver grand chose sinon une déclaration de bug https://quality.embarcadero.com/browse/RSP-23008 qui date de début 2019.

    Alors j'ai tenté auprès de vous. En espérant que d'autres aient rencontré le problème et trouvé une solution.

    Alain

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 032
    Points : 21 133
    Points
    21 133
    Par défaut
    En combinant l'exemple fourni par Paul Toth et la permission que j'ai indiqué faudrait essayer cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //  PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.INTERNET)],   
      PermissionsService.RequestPermissions(['android.permission.INTERNET')],
          procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
          begin
            if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
              { activate or deactivate the location sensor }
              // Gérer le droit disponible et lancer le GET, tout ça de façon asynchrone
            else
            begin
              // Gérer une erreur
            end;
          end)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 032
    Points : 26 015
    Points
    26 015
    Par défaut
    bon en même temps je serais surpris que l'accès internet demande une permission interactive...mais bon

    sinon soit un démarrage en mode debug permet de lever une exception qui explique ce qu'il se passe

    parfois il faut passer par Monitor (dans le SDK Android) pour afficher les logs de Android et voir une exception non remontée par Delphi

    EDIT: il suffit aussi parfois de supprimer le fichier AndroidManifest.template.xml que Delphi va recréer et mettre à jour
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre à l'essai
    Inscrit en
    octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Bonjour à tous,

    Vos conseils ont permis d'orienter mes recherches et j'ai fini par trouver l'explication.
    Il s'agit bien d'un souci de version Android. En effet, Android n'accepterait plus les connexions HTTP et imposerait HTTPS à partir de la version 9.

    Afin de continuer à utiliser HTTP (au moins pour les tests en développement et pour la version 9 d'Android) il est impératif de modifier les fichiers AndroidManifest.xml (présents dans les répertoires Android\Debug et Android\Release de l'application) pour y ajouter :

    android:usesCleartextTraffic="True"

    dans la partie <application android ... />

    Il est aussi possible de passer à android:targetSdkVersion="27" (à la place de "28") à l’arrache si une app ne fonctionne plus avec la version 9. Mais cette solution n'est pas pérenne !!

    Je vais pouvoir profiter de ce beau dimanche après-midi !

    Alain

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 032
    Points : 26 015
    Points
    26 015
    Par défaut
    ça c'est un truc qui me gonfle avec Google, leur volonté de mettre HTTPS partout, ça devrait rester un choix
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2017
    Messages
    981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : octobre 2017
    Messages : 981
    Points : 3 482
    Points
    3 482
    Par défaut
    Ma réponse est un peu tardive mais je l'indique tout de même si cela peut servir à quelqu'un!

    A partir de Android 9, par défaut l'OS interdit les communications non-cryptées: C'est https ou rien!

    Il est possible de contourner le problème à l'aide de fichier manifest, mais franchement dans le cadre d'une application mobile autant faire dans le https parce que échanger des données en clair, c'est un peu se faire un "harakiri" technologique.

  10. #10
    Membre chevronné Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 913
    Points : 1 956
    Points
    1 956
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ça c'est un truc qui me gonfle avec Google, leur volonté de mettre HTTPS partout, ça devrait rester un choix
    pareil pour Apple depuis iOS 7 ou 8, mais l'exception avait été prise en compte par Embarcadero et est toujours activée par défaut dans les options de projets.

    Concernant Android il y a trois types de permissions. Elles sont décrites dans la doc de Delphi : les permissions informatives, les permissions nécessitant qu'on fasse du code pour les vérifier et que l'OS demande à l'utilisateur et celles qui ont besoin de clés d'API ou autres infos.

    Elles doivent toujours être déclarées dans les options de projet pour apparaître dans le PlayStore et être indiquées dans le manifest. Celles qui demandent confirmation à l'utilisateur doivent faire l'objet de quelques lignes de code de notre part avec ce qu'à écrit Serge juste au dessus.

    Notez que ce que vous écrivez pour Android sera par défaut autorisé sur les autres plateformes (System.Permissions acceptant par défaut tout, sauf sur Android où l'OS est interrogé), donc pas besoin de faire plusieurs version de votre code.

    Pour la permission INTERNET, elle est active par défaut en DEBUG car l'IDE s'en sert pour le débogage, mais elle n'est pas nécessaire en RELEASE si votre projet n'a pas besoin d'accès à Internet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [W10][Delphi RIO][Android] Configuration android
    Par petitcoucou31 dans le forum EDI
    Réponses: 4
    Dernier message: 01/05/2020, 21h35
  2. Android et Radio en live
    Par tlili_info dans le forum Android
    Réponses: 5
    Dernier message: 30/03/2018, 21h15
  3. Radio sous Android
    Par bza88 dans le forum Android
    Réponses: 0
    Dernier message: 11/08/2014, 13h00
  4. Réponses: 0
    Dernier message: 14/11/2013, 16h19
  5. Radio sous Android
    Par fruwen7 dans le forum Android
    Réponses: 5
    Dernier message: 31/07/2012, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo