2010-08-12 15 views
6

Chciałbym móc generować unikalne numery seryjne dla każdego urządzenia z systemem Android do wykorzystania w odblokowywaniu aplikacji. Jak mogłem to zrobić?Generowanie specyficznego dla urządzenia numeru seryjnego

EDIT:

Powodem jest to, że chce zreorganizować płatną aplikację i zapewniają użytkownikom, którzy zapłacili za starej wersji, które będą miały inną nazwę pakietu, sposób na uzyskanie pełnej wersji pobierając odblokowania darmowa wersja aplikacji. Pchnęłbym aktualizację do starej wersji, która wygenerowałaby i wyświetliła kod, który mogliby wprowadzić, aby zamienić darmową wersję w wersję w pełni funkcjonalną.

Odpowiedz

6

Możesz użyć Android id. Ten identyfikator powinien być unikalny dla urządzeń, ale jego ustawienie zależy od implementacji producenta urządzenia.

String deviceId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID); 

Identyfikator Androida może ulec zmianie po przywróceniu ustawień fabrycznych telefonu, a użytkownik może go również zmienić na telefonach zrootowanych. Ale jeśli potrzebujesz identyfikatora do identyfikacji użytkownika, powinno być dobrze.

+2

Niestety, w przeszłości byli producenci, którzy ustawili ANDROID_ID jako wartość zerową lub, co gorsza, takie same na wszystkich urządzeniach! Zobacz [ten wątek] (http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id) na ten temat. – Andrew

0

Możesz użyć numeru IMEI nie do tego.

+0

nie użyłby IMEI to. Uzyskanie dostępu do IMEI wymaga specjalnych uprawnień, które wyglądają tak, jakbyś używał danych, których nie powinieneś używać i wzbudzać podejrzeń użytkownika. Imei to nic, co powinno się przechowywać z dala od telefonu. – Janusz

1

Android zapewnia już licensing service do użytku przez płatne aplikacje. Czy istnieje powód, dla którego nie chcesz tego używać? Pamiętaj, że próba zablokowania aplikacji na konkretnym telefonie będzie naprawdę denerwować użytkowników, którzy przełączają urządzenia (np. Wszystkie, prędzej czy później).

+0

Dodano przyczynę zadawania pytania: –

7

dlaczego nie używać nazwy konta google ther? jest łatwy do zdobycia i wymaga jedynie prostego żądania w pliku manifestu. będą zostało nabyte z gplay, więc g + konto nazwa powinna być na tyle ...

w manifeście:

<manifest ... > 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    ... 
</manifest> 

pobrać nazwy konta:

AccountManager am = AccountManager.get(this); // "this" references the current Context 

Account[] accounts = am.getAccountsByType("com.google"); 

do pobierania nazwa:

accounts[0].name 

Piszę prosty alert, aby upewnić się, że znalazłem konto tutaj e cały kod:

Account[] accounts = am.getAccountsByType("com.google"); 
    AlertDialog.Builder miaAlert = new AlertDialog.Builder(this); 

    miaAlert.setTitle("i found an account name!"); 
    miaAlert.setMessage(accounts[0].name); 
    AlertDialog alert = miaAlert.create(); 
    alert.show(); 
0

Można użyć numeru seryjnego jako unikalny identyfikator, ponieważ są one availbalble we wszystkich devices.You IMEI nie należy używać jako unikatowy identyfikator, ponieważ nie są abalibale WiFi Tabs (karty, które NIE mieć gniazdo karty SIM).

Można użyć

try { 
     Class<?> c = Class.forName("android.os.SystemProperties"); 
     Method get = c.getMethod("get", String.class, String.class); 
     serial = (String) get.invoke(c, "ril.serialnumber", "unknown"); 
    } catch (Exception ignored) { 
    } 
1

z roztworu Google Developer w rozwiązywaniu problemu z PRNG, coraz unikalny numer seryjny urządzenia za pośrednictwem refleksji:

http://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html

/** 
* Gets the hardware serial number of this device. 
* 
* @return serial number or {@code null} if not available. 
*/ 
private static String getDeviceSerialNumber() { 
    // We're using the Reflection API because Build.SERIAL is only available 
    // since API Level 9 (Gingerbread, Android 2.3). 
    try { 
     return (String) Build.class.getField("SERIAL").get(null); 
    } catch (Exception ignored) { 
     return null; 
    } 
} 
Powiązane problemy