Kuinka noutaa yksilöivä tunnus Android-laitteiden tunnistamiseen?

Jotkut kehittäjät voivat tarvita yksilöllisen tunnuksen Android-laitteiden tunnistamiseen. Useita kertoja ovat tapaukset, joissa kehittäjät tarvitsevat tämän yksilöllisen tunnuksen. Esimerkiksi, kun haluat:

  • tunnistaa Android-käyttäjän tallentamaan pelitulokset palvelimelle
  • seurata sovellusten asennusta
  • luo DRM kopiosuojausta varten.

Useita ratkaisuja on olemassa, mutta mikään niistä ei ole täydellinen. Tässä opetusohjelmassa tutkitaan viittä ratkaisua ja esitetään niiden haitat:

1. Yksilöllinen puhelinnumero (IMEI, MEID, ESN, IMSI)

Jos kohdistat vain älypuhelimiin, voit hyötyä siitä, että laitteessa on puhelinpalveluita. Joten voit helposti hakea laitteen yksilöivän tunnuksen.

Tämä ainutlaatuinen tunnus voi olla IMEI, MEID, ESN tai IMSI. Ne voidaan määritellä seuraavasti:

  • IMEI kansainväliselle matkaviestinlaitteelle: yksilöivä numero GSM-, WCDMA-matkapuhelimien ja joidenkin satelliittipuhelimien tunnistamiseen
  • MEID for Mobile Equipment IDentifier: maailmanlaajuisesti ainutlaatuinen numero, joka identifioi fyysisen osan CDMA-matkaviestinlaitteesta, MEID luotiin korvaamaan ESN (elektroninen sarjanumero).
  • ESN for Electronic Serial Number: yksilöivä numero CDMA-matkapuhelimien tunnistamiseen
  • IMSI (International Mobile Subscriber Identity): yksilöivä tunniste, joka liittyy kaikkiin GSM- ja UMTS-verkon matkapuhelinten käyttäjiin

Voit hakea laitteeseesi liitetyn yksilöllisen tunnuksen käyttämällä seuraavaa koodia:

tuo android.telephony.TelephonyManager;
tuo android.content.Context;
// ...
TelephonyManager puhelinhallinta;
telephonyManager = (TelephonyManager) getSystemService (asiayhteys.
                    TELEPHONY_SERVICE);
/ *
* getDeviceId () palauttaa yksilöllisen laitetunnuksen.
* Esimerkiksi IMEI GSM: lle ja MEID tai ESN CDMA-puhelimille.
* /
Merkkijono deviceId = telephonyManager.getDeviceId ();
/ *
* getSubscriberId () palauttaa yksilöllisen tilaajatunnuksen,
* Esimerkiksi IMSI GSM-puhelimelle.
* /
Merkkijono subscriberId = telephonyManager.getSubscriberId ();

Tämän ratkaisun on pyydettävä käyttäjältä android.permission.READ_PHONE_STATE, jota voi olla vaikea perustella tekemäsi sovellustyypin seuraamisella.

Lisäksi tämä ratkaisu on rajoitettu älypuhelimiin, koska tableteissa ei ole puhelinpalveluita. Yksi etu on, että arvo säilyy laitteiden tehdasasetusten palauttamisessa.

2. MAC-osoite

Voit myös yrittää saada MAC-osoitteen laitteelta, jossa on Wi-Fi- tai Bluetooth-laitteisto. Tätä ratkaisua ei kuitenkaan suositella, koska kaikilla laitteilla ei ole Wi-Fi-yhteyttä. Vaikka käyttäjällä olisi Wi-Fi-yhteys, sen on oltava päällä tietojen noutamiseksi. Muuten puhelu ei ilmoita MAC-osoitetta.

3. Sarjanumero

Laitteiden, joissa ei ole puhelinpalveluita, kuten tablet-laitteiden, on ilmoitettava yksilöivä laitetunnus, joka on saatavana android.os.Build.SERIAL -sivustolla Android 2.3 Gingerbreadista lähtien. Jotkut puhelimet, joissa on puhelinpalvelu, voivat myös määrittää sarjanumeron. Koska kaikilla Android-laitteilla ei ole sarjanumeroa, tämä ratkaisu ei ole luotettava.

4. Suojattu Android-tunnus

Laitteen ensimmäisessä käynnistyksessä luodaan ja tallennetaan satunnaisesti arvo. Tämä arvo on saatavana kautta Settings.Secure.ANDROID_ID. Se on 64-bittinen numero, jonka pitäisi pysyä vakiona laitteen elinaikana. ANDROID_ID vaikuttaa hyvältä valinnalta yksilöivälle laitetunnisteelle, koska se on saatavana älypuhelimiin ja tablet-laitteisiin. Voit noutaa arvon käyttämällä seuraavaa koodia:

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

Arvo voi kuitenkin muuttua, jos laitteelle suoritetaan tehdasasetusten palautus. On myös tunnettu vika, jolla on suosittu valmistajan luuri, jossa kaikilla esiintymillä on sama ANDROID_ID. On selvää, että ratkaisu ei ole 100% luotettava.

5. Käytä UUID: ta

Koska suurimman osan sovelluksista vaaditaan tietyn asennuksen tunnistamista, ei fyysistä laitetta, hyvä ratkaisu saada käyttäjän yksilöivä tunnus UUID-luokan käyttämiseksi. Seuraavan ratkaisun on esittänyt Reto Meier Googlelta Google I / O -esityksessä:

yksityinen staattinen merkkijono uniqueID = null;
yksityinen staattinen lopullinen merkkijono PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
julkinen synkronoitu staattinen merkkijonotunnus (kontekstiyhteys) {
   if (uniqueID == nolla) {
      SharedPreferences sharedPrefs = context.getSharedPreferences (
         PREF_UNIQUE_ID, konteksti.MODE_PRIVATE);
      uniqueID = sharedPrefs.getString (PREF_UNIQUE_ID, nolla);
      if (uniqueID == nolla) {
         uniqueID = UUID.randomUUID (). toString ();
         Editor editor = sharedPrefs.edit ();
         editor.putString (PREF_UNIQUE_ID, yksilöivä tunnus);
         editor.commit ();
      }
   }
    palauta unikalID;
}

UUID.randomUUID () -metodi luo yksilöivän tunnisteen tietylle asennukselle. Sinun on vain tallennettava tämä arvo ja käyttäjä tunnistetaan seuraavassa sovelluksesi käynnistyksessä. Voit myös yrittää liittää tämän ratkaisun Android Backup -palveluun pitääksesi käyttäjän tiedot saatavilla, vaikka hän asentaa sovelluksesi toiseen laitteeseen.

johtopäätös

Tietyn laitteen tunnistaminen Androidilla ei ole helppoa. Tämän välttämiseksi on monia hyviä syitä. Paras ratkaisu on todennäköisesti tunnistaa tietty asennus UUID-ratkaisulla. Jos kuitenkin haluat tunnistaa tietyn laitteen ehdottomasti fyysisesti, voit yrittää käyttää ANDROID_ID-ratkaisua. Ei 100% luotettava, mutta parempi kuin muut ratkaisut.