Nogle udviklere kan have brug for et unikt id til at identificere Android-enheder. Anvendelsestilfælde, hvor udviklere har brug for dette Unique ID, er flere.
For eksempel, når du ønsker at :
- identificere en Android-bruger for at gemme spilresultater på en server
- spore installation af apps
- genererer DRM til kopibeskyttelse.
Der findes flere løsninger, men ingen af dem er perfekte. I denne vejledning vil vi undersøge fem løsninger og præsentere deres ulemper :
1. Unikt telefonnummer (IMEI, MEID, ESN, IMSI)
Hvis du kun henvender dig til smartphones, kan du drage fordel af, at enheden har telefonitjenester, så du kan nemt hente et unikt ID, der identificerer enheden.
Dette unikke ID kan være IMEI, MEID, ESN eller IMSI. De kan defineres som følger :
- IMEI for International Mobile Equipment Identity : det unikke nummer til at identificere GSM-, WCDMA-mobiltelefoner samt visse satellittelefoner
- MEID for Mobile Equipment IDentifier : det globalt unikke nummer, der identificerer et fysisk stykke CDMA-mobilstationsudstyr, MEID blev oprettet for at erstatte ESN’er (Electronic Serial Number)
- ESN for Electronic Serial Number : det unikke nummer til identifikation af CDMA-mobiltelefoner
- IMSI (International Mobile Subscriber Identity) : den unikke identifikation, der er knyttet til alle mobiltelefonbrugere på GSM- og UMTS-netværk
For at hente det unikke ID, der er knyttet til din enhed, kan du bruge følgende kode :
Denne løsning skal anmode om android.permission.READ_PHONE_STATE til din bruger, hvilket kan være svært at retfærdiggøre efter den type applikation, du har lavet.
Dertil kommer, at denne løsning er begrænset til smartphones, da tablets ikke har telefonitjenester. En fordel er, at værdien overlever til fabriksindstillinger på enheder.
2. MAC-adresse
Du kan også forsøge at få en MAC-adresse fra en enhed, der har Wi-Fi- eller Bluetooth-hardware. Men denne løsning anbefales ikke, da ikke alle enheder har Wi-Fi-forbindelse. Selv hvis brugeren har en Wi-Fi-forbindelse, skal den være tændt for at hente dataene. Ellers rapporterer opkaldet ikke MAC-adressen.
3. Serienummer
Enheder uden telefonitjenester som f.eks. tablets skal rapportere et unikt enheds-id, der er tilgængeligt via android.os.Build.SERIAL siden Android 2.3 Gingerbread. Nogle telefoner med telefonitjenester kan også definere et serienummer. Da ikke alle Android-enheder har et serienummer, er denne løsning ikke pålidelig.
4. Sikker Android ID
Der genereres og gemmes en tilfældig værdi ved første opstart af en enhed. Denne værdi er tilgængelig via Settings.Secure.ANDROID_ID . Det er et 64-bit nummer, der skal forblive konstant i en enheds levetid. ANDROID_ID synes at være et godt valg til en unik enhedsidentifikator, fordi det er tilgængeligt for smartphones og tablets. For at hente værdien kan du bruge følgende kode :
String androidId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);
Værdien kan dog ændre sig, hvis der udføres en fabriksnulstilling på enheden. Der er også en kendt fejl med et populært håndsæt fra en producent, hvor alle instanser har det samme ANDROID_ID. Det er klart, at løsningen ikke er 100 % pålidelig.
5. Brug UUID
Da kravet for de fleste applikationer er at identificere en bestemt installation og ikke en fysisk enhed, er en god løsning til at få et unikt id for en bruger at bruge UUID-klassen. Reto Meier fra Google præsenterede følgende løsning i en Google I/O-præsentation :
UUID.randomUUUID()-metoden genererer en unik identifikator for en bestemt installation. Du skal blot gemme denne værdi, og din bruger vil blive identificeret ved den næste lancering af din applikation. Du kan også forsøge at tilknytte denne løsning til Android Backup-tjenesten for at holde oplysningerne tilgængelige for brugeren, selv om han installerer din applikation på en anden enhed.
Slutning
Det er ikke let at identificere en bestemt enhed på Android. Der er mange gode grunde til at undgå det. Den bedste løsning er sandsynligvis at identificere en bestemt installation ved hjælp af en UUID-løsning. Hvis du imidlertid absolut vil identificere en bestemt enhed fysisk, kan du prøve at bruge ANDROID_ID-løsningen. Den er ikke 100 % pålidelig, men bedre end andre løsninger.