Mar 03

Pendant le dernier épisode du Dév du Jeudi, un participant a demandé comment avoir un identifiant unique depuis une application installée sur un périphérique mobile.

Google & Apple ne proposant pas les mêmes fonctionnalités dans leurs SDKsW respectifs, pour l’exemple fourni dans cet article, je vais me baser sur :

  • le numéro IMEIW sous Android
  • le code IDFV sous iOS

Identifiant unique

Identifiant unique



Pour la partie iOS, j’ai utilisé une unité téléchargée depuis internet, DX.Apple.Utils.
Cette unité permet entre autres, de récupérer l’identifiant lié à un vendeur. Il sera unique au vendeur et par périphérique : un même vendeur aura le même code sur les différentes applications installées sur un même téléphone et un autre code sur un autre périphérique.

Concernant Android, on peut facilement récupérer le numéro IMEI. J’ai rapidement créé une unité qui permet d’avoir cet identifiant basée sur le code de cette réponse.

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
unit Android.IMEI;

interface

{$IFDEF ANDROID}
uses
  Androidapi.JNI.Telephony, Androidapi.JNI.Provider, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge, FMX.Helpers.Android, androidapi.JNI.JavaTypes, androidapi.JNI.Os;
{$ENDIF}

function ToString: string;

implementation

function ToString: string;
{$IFDEF ANDROID}
var
  obj: JObject;
  tm : JTelephonyManager;
{$ENDIF}
begin
  Result := '111111111111';
{$IFDEF ANDROID}
  obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  if obj <> nil then
  begin
    tm := TJTelephonyManager.Wrap( (obj as ILocalObject).GetObjectID );
    if tm <> nil then
    begin
      Result := JStringToString(tm.getDeviceId);
    end;
  end;
  if Result = '' then
  begin
    Result := JStringToString(TJSettings_Secure.JavaClass.getString(SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID));
  end;
{$ENDIF}
end;

end.

 
Puis, j’ai codé une autre unité qui utilise l’unité et le code qui sont nécessaires en fonction de la plateforme cible.

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
unit Mobile.Identifier;

interface

{$IFDEF ANDROID}
uses
  Android.IMEI;
{$ENDIF}
{$IFDEF IOS}
uses
  DX.Apple.Utils;
{$ENDIF}

function ToString: string;

implementation

function ToString: string;
begin
  Result := '000000000000'; // Sous Windows
{$IFDEF ANDROID}
  Result := Android.IMEI.ToString;
{$ENDIF}
{$IFDEF IOS}
  Result := DX.Apple.Utils.VendorIdentifier;
{$ENDIF}
end;

end.

L’intégralité du projet (code source) est disponible depuis ce lien.

Attention !!! Sous Android, la permission Lire l’état du téléphone (Read Phone State) est nécessaire sinon une erreur est déclenchée.

 

Code développé avec Embarcadero Delphi XE5.

Développé en Delphi

Share

Lien permanent vers Identifiant unique Rédigé par Whiler \\ Tags : , , ,

Une réponse pour “Identifiant unique”

  1. Pings: Liens de l’épisode 11 de la saison 3 | Le Dev du Jeudi

Laisser une réponse

(requis)

(requis)

*

;) (lol) (y) |-( (hi) 8-) (angel) :s (clap) (bow) (tmi) (:| plus »

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.