Jak získat jedinečné ID pro identifikaci zařízení se systémem Android?

Někteří vývojáři mohou potřebovat jedinečné ID pro identifikaci zařízení se systémem Android. Případů použití, kdy vývojáři potřebují toto jedinečné ID, je více.

Například když chcete :

  • identifikovat uživatele systému Android pro ukládání výsledků her na server
  • sledovat instalaci aplikací
  • generovat DRM pro ochranu proti kopírování.

Existuje několik řešení, ale žádné není dokonalé. V tomto návodu se budeme zabývat pěti řešeními a představíme si jejich nevýhody :

1. Jedinečné telefonní číslo (IMEI, MEID, ESN, IMSI)

Pokud se zaměřujete pouze na chytré telefony, můžete využít toho, že zařízení mají telefonní služby, takže můžete snadno získat jedinečné ID identifikující zařízení.

Tímto jedinečným ID může být IMEI, MEID, ESN nebo IMSI. Lze je definovat takto :

  • IMEI pro International Mobile Equipment Identity : jedinečné číslo pro identifikaci mobilních telefonů GSM, WCDMA a také některých satelitních telefonů
  • MEID pro Mobile Equipment IDentifier : celosvětově jedinečné číslo identifikující fyzický kus zařízení mobilní stanice CDMA, MEID bylo vytvořeno jako náhrada ESN (Electronic Serial Number)
  • ESN pro Electronic Serial Number : jedinečné číslo pro identifikaci mobilních telefonů CDMA
  • IMSI (International Mobile Subscriber Identity) : jedinečná identifikace spojená se všemi uživateli mobilních telefonů sítí GSM a UMTS

Pro získání jedinečného identifikátoru přiřazeného k vašemu zařízení můžete použít následující kód :

Toto řešení je třeba vyžádat pro systém Android.permission.READ_PHONE_STATE pro vašeho uživatele, což může být těžko odůvodnitelné v návaznosti na typ aplikace, kterou jste vytvořili.

Toto řešení je navíc omezeno na smartphony, protože tablety nemají telefonní služby. Jednou z výhod je, že tato hodnota přežije i obnovení továrního nastavení zařízení.

2. Adresa MAC

Můžete se také pokusit získat adresu MAC ze zařízení, které má hardware Wi-Fi nebo Bluetooth. Toto řešení se však nedoporučuje, protože ne všechna zařízení mají připojení Wi-Fi. I když uživatel má připojení Wi-Fi, musí být pro získání dat zapnuté. V opačném případě volání neohlásí adresu MAC.

3. Sériové číslo

Zařízení bez telefonních služeb, jako jsou tablety, musí ohlásit jedinečné ID zařízení, které je od systému Android 2.3 Gingerbread k dispozici prostřednictvím funkce android.os.Build.SERIAL. Některé telefony, které mají telefonní služby, mohou také definovat sériové číslo. Stejně jako ne všechna zařízení se systémem Android mají sériové číslo, není toto řešení spolehlivé.

4. Zabezpečené ID Androidu

Při prvním spuštění zařízení se náhodně vygeneruje a uloží hodnota. Tato hodnota je dostupná prostřednictvím položky Settings.Secure.ANDROID_ID . Jedná se o 64bitové číslo, které by mělo zůstat konstantní po celou dobu životnosti zařízení. ANDROID_ID se zdá být dobrou volbou pro jedinečný identifikátor zařízení, protože je k dispozici pro chytré telefony a tablety. Pro získání hodnoty můžete použít následující kód :

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

V případě obnovení továrního nastavení zařízení se však hodnota může změnit. Je také známa chyba u populárních telefonů jednoho výrobce, kdy mají všechny instance stejné ANDROID_ID. Je zřejmé, že toto řešení není stoprocentně spolehlivé.

5. Použijte UUID

Jelikož požadavkem většiny aplikací je identifikace konkrétní instalace, nikoli fyzického zařízení, je dobrým řešením pro získání jedinečného id uživatele použití třídy UUID. Následující řešení představil Reto Meier ze společnosti Google v prezentaci na konferenci Google I/O :

Metoda UUID.randomUUID() generuje jedinečný identifikátor pro konkrétní instalaci. Tuto hodnotu stačí uložit a uživatel bude identifikován při dalším spuštění aplikace. Toto řešení můžete také zkusit spojit se službou zálohování systému Android, aby měl uživatel informace k dispozici i v případě, že vaši aplikaci nainstaluje na jiné zařízení.

Závěr

Identifikace konkrétního zařízení v systému Android není jednoduchá věc. Existuje mnoho dobrých důvodů, proč se tomu vyhnout. Nejlepším řešením je pravděpodobně identifikace konkrétní instalace pomocí řešení UUID. Pokud však chcete absolutně identifikovat konkrétní zařízení fyzicky, můžete zkusit použít řešení ANDROID_ID. Není sice stoprocentně spolehlivé, ale je lepší než jiná řešení.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.