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

Composants FMX Delphi Discussion :

Obtenir un identifiant unique par appareil


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut Obtenir un identifiant unique par appareil
    Bonjour,

    le titre est général, au début, juste pour une application vers mobile le choix était facile : le numéro de téléphone.
    Mais qu'en serait-il pour une tablette (je n'en ai hélas pas de compatible sous la main) ?
    Il faut que :
    - l'identifiant soit facile à retrouver par l'utilisateur
    - facile à récupérer par l'application

    Tant qu'à faire, généralisons à tout appareil. J'ai bien pensé à l'adresse mac mais y en a t-il vraiment une sur les mobiles et si c'est le cas je ne sais même pas comment en lire une sur mon mobile !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Sur un mobile, l'adresse MAC existe, mais le problème, c'est qu'il peut y en avoir plusieurs, celle pour le wifi, bluetooth ...
    Sous Windows, s'ajoute les adresses de VPN, de réseau via USB ...
    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
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Oui, j'ai fini par trouver de même que le code IMEI, mais le problème n'est pas tant sur mobile (après tout il y a le numéro de téléphone) que sur les tablettes qui ont ou pas de carte SIM.
    J'ai quand même vu que l'on pouvait distinguer les mobiles des tablettes niveau plateforme mais faire un truc unifié me parait utopique.
    Côté Android la mac address ça pourrait le faire puisque l'on peut obtenir celle du WIFI
    Côté la Pomme, aucune idée
    pour Desktop Windows ou Linux évidemment les diverses adresses possibles rendent le truc un peu casse-tête
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour,

    il me semble que "normalement" chaque mobile dispose d'un serial number.
    Concernant Android :


    C'est le genre de code qui me plait. J'ai réalisé un équivalent en Desktop avec Qt/C++ [mais pour les serial numbers des disques durs]. Enfin le Qt n'a pas grand chose à voir. Il faut simplement y intégrer les codes purement C++ pour en faire un composant Qt. Avec un bug sous certains Windows provenant de l'API Windows native : le même programme sur le même disque dur, ne renvoyait pas le même N° sur un appareil dual-boot [Windows-Linux]... Qui avait raison ? Linux. Parfois certains Windows renvoyaient le bon N°, parfois le numéro était inversé . Mes codes figuraient à l'époque sur le forum Qt que gérait Der§en à l'époque, forum qui n'existe malheureusement plus. Je n'ai jamais porté ces codes sur FMX mais je crois -ce n'est pas une certitude- les posséder sous Lazarus [Windows, Linux et mac OS].

    Pour en revenir à ton approche, est-ce que c'est possible sur desktop (avec le N° de série de l'appareil) ? Cela semble l'être :
    https://isit.arts.ubc.ca/how-to-loca...r-of-computer/

    Est-ce qu'on peut le faire avec FMX ? Aucune idée. Je cerne trop mal Firemonkey pour avoir un début d'avis significatif. Et comme Lazarus est "balbutiant" en Android et inexistant concernant les cibles iPhone et iPad, je ne pourrai pas me pencher sur ce problème très intéressant.
    Cordialement. Gilles

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour Gilles,

    est-ce que c'est possible sur desktop (avec le N° de série de l'appareil) ?
    pour te répondre rapidement , oui c'est possible du moins en ce qui concerne windows pour apple je ne sais pas.

    Les approches pour mobile IMEI ou numero de téléphone Android pas de souci, niveau Apple même doute.

    C'est plus les tablettes sans carte sim (donc sans numero de tel ni Imei), et cette fois plus particulièrement pour Android , que je n'ai aucune idée. Pour les tablettes à la pomme j'ai moins que questionnment car j'ai accès aux tablettes des mères et belle-mères pour vérifier ce qui est "lisible" (ce que je cherche avant tout) ,à défaut d'interrogeable par code
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    tu veux identifier l'appareil ou simplement l'installation ?

    générer un GUID au lancement s'il n'existe pas déjà permet de d'avoir un identifiant unique de l'installation.

    si c'est pour identifier l'appareil, c'est toujours un peu douteux, surtout pour l'ensemble des plateformes...le simple fait de faire tourner le logiciel dans une VM par exemple et tu ne peux rien croire de ce que tu vois

    c'est quoi le but en fait ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Rebonjour,

    cette discussion me semble assez exhaustive.
    Cordialement. Gilles

  8. #8
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Attention : sur Stack ça ne parle que d'android.

    D'une façon générale, tout appareil a au moins une carte réseau de nos jours (filaire, wifi, bluetooth ou gsm), du coup tu peux trouver une API pour récupérer les adresses MAC. Par contre, comme le reste, çe ne te met pas à l'abris d'un changement d'ID sur le même périphérique (remplacement d'une carte/puce par une autre) mais c'est globalement efficace pour avoir un identifiant unique au niveau mondial, toutes marques confondues. (par contre Apple attribue des MAC virtuelles et les change, dont fouareux sur iOS)

    En clair, à part définir toi-même un identifiant à stocker, c'est pas top top.

  9. #9
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 930
    Points : 1 959
    Points
    1 959
    Par défaut
    Bonjour,

    Citation Envoyé par SergioMaster Voir le message
    C'est plus les tablettes sans carte sim (donc sans numero de tel ni Imei), et cette fois plus particulièrement pour Android , que je n'ai aucune idée. Pour les tablettes à la pomme j'ai moins que questionnment car j'ai accès aux tablettes des mères et belle-mères pour vérifier ce qui est "lisible" (ce que je cherche avant tout) ,à défaut d'interrogeable par code
    J'ai pas bien compris, est ce que tu as le même questionnement pour les iPad ? Si c'est le cas, il y a l'UDID qui est un identifiant unique pour les iPAD. C'est cet identifiant que l'on utilisait pour autoriser un device à utiliser une appli.
    Mais par contre je ne sais pas s'il est lisible par code.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    • Merci @Gilles qui a trouvé la discussion Android qu'il faut
    • @Free oui, je savais que les Ipad avaient un indentifiant unique, le retrouver par code doit être possible mais cette chose, je ne pourrai la tester sans machines
    • @Paul c'est bien un identifiant de l'appareil qu'il me faut


    Je rappelle le but : il s'agissait au départ d'une installation d'application android sur certains postes (mobile) précis. le Numero de Tel me suffisait donc. C'est par "extension" que j'en suis venu à mes délires, en pensant tout d'abord tablette Android (donc généralement sans SIM mais avec WIFI) puis tout types d'appareils/OS

    En théorie pour IOS Delphi fourni ce qu'il faut iOSapi.UIKit.UIDevice.identifierForVendor, si quelqu'un peut le valider, ce code a été obtenu en fouillant un peu partout
    cependant l'applestore refuserait une application faisant cette demande, selon certaines réactions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    uses iOSApi.UIKit;
     
    function GetVendorID: string;
    var
      Device: UIDevice;
    begin
      Device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
       if TOSVersion.Major < 6 then
        result := UTF8ToString( TUIDevice.Wrap( TUIDevice.OCClass.currentDevice ).uniqueIdentifier.UTF8String )
      else
        result := UTF8ToString( TUIDevice.Wrap( TUIDevice.OCClass.currentDevice ).identifierForVendor.UUIDString.UTF8String );  
    end;
    pour Android je vais fouiller du côté de l'unité AndroidAPI.JNI.Os JStringToString(TJBuild.JavaClass.MODEL);Achant que cette classe contient d'autres spécificités Hardware
    - BOARD
    - BOOTLOADER
    - CPU_ABI
    - CPU_ABI2
    - DEVICE
    - DISPLAY
    - FINGERPRINT
    - HARDWARE
    - HOST
    - ID
    - MANUFACTURER
    - MODEL
    - PRODUCT
    - RADIO
    - SERIAL
    - TAGS
    - TIME
    - &TYPE
    - UNKNOWN
    - USER
    et ne necessiterai aucune permission particulière, je devrai trouver mon bonheur ( dès que j'aurai quelques minutes de libres)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Pour continuer, niveau Android, une solution proposée sur un autre forum en utilisant JMediaDrm


    J'ai quand même transcrit ici mon programme test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    unit UniqueIDAndroidU;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
     
    {$IFDEF ANDROID}
         AndroidApi.Jni,
         AndroidApi.Helpers,
         AndroidApi.Jni.JavaTypes,
         AndroidApi.JNIBridge,
         AndroidApi.Jni.Media,
    {$ENDIF}
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
      FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.fmx}
     
     
    function BytesToHex(const ABytes: TBytes): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := Low(ABytes) to High(ABytes) do
        Result := Result + IntToHex(ABytes[I], 2);
    end;
     
    function get_media_drm_UNIQUE_ID:string;
    var
     wvDrm:JMediaDrm;
     str:String;
     UUID:JUUID;
     data : TJavaArray<Byte>;
     datab: TBytes;
     i:integer;
    begin
    //UUID:=TJUUID.JavaClass.fromString(stringtojstring('12107456-8629-b532-5c37-d8232ae2de13'));   //EJNIException with message 'android.media.UnsupportedSchemeException: Failed to instantiate drm object.
      UUID:=TJUUID.JavaClass.fromString(stringtojstring('edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'));//widevine_id
     
      wvDrm:=tJMediaDrm.Create;
      wvDrm:=tJMediaDrm.JavaClass.init(UUID);
      data:=wvDrm.getPropertyByteArray( TJMediaDrm.JavaClass.PROPERTY_DEVICE_UNIQUE_ID);
      if data <> nil then
      begin
          SetLength(datab, data.Length);
          for I := 0 to data.Length - 1 do
            datab[I] := data.Items[I];
          str:=BytesToHex(datab);
      end;
      result:=str;//length of str:64byte
     end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     memo1.Lines.add(get_media_drm_UNIQUE_ID);
    end;
     
    end.
    Sur mon vieux mobile 32 bits , ça plante (sachant que de toute façon pour les mobiles j'avais déjà la solution n° de téléphone pas grave)
    Faute de matériel je ne peux pas tester sur une tablette compatible.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 897
    Points : 6 024
    Points
    6 024
    Par défaut
    Hello !

    D'après son wiki, c'est bien l'IMEI qu'il te faut, un équipement mobile ne signifiant pas téléphone.

    Les quelques ressources sur le net ne sont pas exploitables?

    Sinon, est-il possible de simuler de fameux *#06# et de capturer le résultat ? (même si ça ne vaut peut-être que si le device a 1 carte gsm)

    [edit]
    1 post résolu sur le sujet : http://www.activedelphi.com.br/forum...525c1871de7870
    en portugais, mais le pascal est natif ^^
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

Discussions similaires

  1. [PHP 5.0] Identifiant unique par Ordinateur
    Par guigui69 dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2016, 18h54
  2. Obtenir un ID unique et inchangeable par PC
    Par GG84MYM dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2014, 14h30
  3. Réponses: 4
    Dernier message: 06/09/2012, 12h58
  4. Obtenir un identifiant unique pour chaque device
    Par skip78 dans le forum Développement Mobile en Java
    Réponses: 2
    Dernier message: 20/09/2010, 16h26
  5. Récupérer un identifiant unique par machine ?
    Par [ZiP] dans le forum Débuter
    Réponses: 18
    Dernier message: 17/02/2009, 08h36

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