Kuidas hankida unikaalset ID-d Androidi seadmete tuvastamiseks?

Mõni arendaja võib Android-seadmete tuvastamiseks vajada unikaalset ID-d. Kasutage juhtumeid, kus arendajad vajavad seda kordumatut ID, mitmekordselt. Näiteks kui soovite:

  • tuvastage Androidi kasutaja mängude tulemuste serverisse salvestamiseks
  • jälgida rakenduste installimist
  • genereerige DRM koopiakaitseks.

On olemas mitmeid lahendusi, kuid ükski pole täiuslik. Selles õpetuses uurime viit lahendust ja tutvustame nende puudusi:

1. Unikaalne telefoninumber (IMEI, MEID, ESN, IMSI)

Kui sihite ainult nutitelefone, võite kasu saada sellest, et seadmel on telefoniteenused. Nii saate hõlpsalt hankida seadme identifitseeriva kordumatu ID.

See ainulaadne ID võib olla IMEI, MEID, ESN või IMSI. Neid saab määratleda järgmiselt:

  • IMEI rahvusvahelise mobiilseadme identiteedi jaoks: unikaalne number GSM, WCDMA mobiiltelefonide ja mõnede satelliittelefonide tuvastamiseks
  • MEID mobiilseadmete identifikaatori jaoks: globaalselt unikaalne number, mis identifitseerib CDMA mobiiljaama seadme füüsilise osa, MEID loodi ESN-ide (elektrooniline seerianumber) asendamiseks
  • ESN elektroonilise seerianumbri jaoks: ainulaadne number CDMA-mobiiltelefonide tuvastamiseks
  • IMSI (rahvusvaheline mobiilside abonendi tunnus): kõigi GSM- ja UMTS-võrgu mobiiltelefonide kasutajatega seotud unikaalne identifikaator

Seadmega seotud unikaalse ID hankimiseks võite kasutada järgmist koodi:

import android.telephony.TelephonyManager;
import android.content.Context;
// ...
TelephonyManager telefonitelefonihaldur;
telephonyManager = (TelephonyManager) getSystemService (kontekst.
                    TELEPHONY_SERVICE);
/ *
* getDeviceId () tagastab kordumatu seadme ID.
* Näiteks IMEI GSM-i jaoks ja MEID või ESN CDMA-telefonide jaoks.
* /
String deviceId = telephonyManager.getDeviceId ();
/ *
* getSubscriberId () tagastab ainulaadse abonendi ID,
* Näiteks GSM-telefoni IMSI.
* /
String subscriberId = telephonyManager.getSubscriberId ();

See lahendus peab teie kasutajalt taotlema android.permission.READ_PHONE_STATE, mida on teie tehtud rakenduse tüübi järgimine keeruline.

Lisaks on see lahendus piiratud nutitelefonidega, kuna tahvelarvutitel pole telefoniteenuseid. Üks eelis on see, et väärtus säilib seadmetes tehase lähtestamise korral.

2. MAC-aadress

Võite proovida ka MAC-aadressi saada seadmest, millel on WiFi või Bluetooth-riistvara. Kuid seda lahendust ei soovitata, kuna kõigil seadmetel pole WiFi-ühendust. Isegi kui kasutajal on WiFi-ühendus, peab see andmete saamiseks olema sisse lülitatud. Muidu ei teatata kõnes MAC-aadressi.

3. Seerianumber

Telefoniteenusteta seadmed, näiteks tahvelarvutid, peavad edastama unikaalse seadme ID, mis on saadaval saidil android.os.Build.SERIAL alates Androidi 2.3 piparkookidest. Mõned telefoniteenused saavad ka seerianumbri määratleda. Kuna kõigil Androidi seadmetel pole seerianumber, pole see lahendus usaldusväärne.

4. Turvaline Androidi ID

Seadme esimesel käivitamisel genereeritakse ja salvestatakse juhuslik väärtus. See väärtus on saadaval saidil Settings.Secure.ANDROID_ID. See on 64-bitine number, mis peaks seadme eluea jooksul samaks jääma. ANDROID_ID tundub hea valik unikaalse seadme identifikaatori jaoks, kuna see on saadaval nutitelefonide ja tahvelarvutite jaoks. Väärtuse toomiseks võite kasutada järgmist koodi:

String androidId = Settings.Secure.getString (getContentResolver (),
                     Seaded.Secure.ANDROID_ID);

Väärtus võib aga muutuda, kui seadmes tehakse tehaseseadetele lähtestamine. Samuti on teada tootja tõrge populaarse telefonitoruga, kus kõigil eksemplaridel on sama ANDROID_ID. On selge, et lahendus pole 100% usaldusväärne.

5. Kasutage UUID-d

Kuna enamiku rakenduste nõue on tuvastada konkreetne install, mitte füüsiline seade, on hea lahendus kasutaja kordumatu ID saamiseks UUID-klassi kasutamisel. Järgmise lahenduse esitas Reto Meier Google'ist Google I / O esitluses:

privaatne staatiline string stringIDID = null;
privaatne staatiline lõplik string string PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
avalik sünkroonitud staatiline stringi ID (konteksti kontekst) {
   if (ainulaadne ID == null) {
      SharedPreferences sharedPrefs = context.getSharedPreferences (
         PREF_UNIQUE_ID, taust.MODE_PRIVATE);
      uniqueID = sharedPrefs.getString (PREF_UNIQUE_ID, null);
      if (ainulaadne ID == null) {
         unikaalneID = UUID.randomUUID (). toString ();
         Toimetaja toimetaja = sharedPrefs.edit ();
         editor.putString (PREF_UNIQUE_ID, unikaalne ID);
         editor.commit ();
      }
   }
    tagastama unikaalse ID;
}

UUID.randomUUID () meetod genereerib konkreetse installi jaoks unikaalse identifikaatori. Peate selle väärtuse lihtsalt salvestama ja teie kasutaja tuvastatakse teie rakenduse järgmisel käivitamisel. Võite proovida seda lahendust siduda ka Andmete varundamise teenusega, et hoida teave kasutaja jaoks kättesaadavana ka siis, kui ta installib teie rakenduse mõnda teise seadmesse.

Järeldus

Kindla seadme tuvastamine Androidis pole lihtne asi. Selle vältimiseks on palju häid põhjuseid. Parim lahendus on tõenäoliselt konkreetse installi tuvastamine UUID-lahenduse abil. Kui soovite aga kindla seadme füüsiliselt täielikult tuvastada, võite proovida kasutada lahendust ANDROID_ID. Pole 100% usaldusväärne, kuid parem kui teised lahendused.