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 :
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.
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.
Pings: Liens de l’épisode 11 de la saison 3 | Le Dev du Jeudi