Eindeutige Android-Seriennummer

Lesezeit: 7 Minuten

Ich entwickle eine Android-Anwendung, die auf Android 4.0 (API 14) und höher abzielt.

Ich suche eine Seriennummer, die pro Gerät eindeutig ist und für immer bestehen bleibt (stirbt mit dem Gerät, ändert sich nach Werksresets nicht).

Ich habe im Internet viele Ergebnisse zu eindeutigen Kennungen für Android-Geräte gefunden, aber nur sehr wenige android.os.Build.SERIAL Nummer.

Bisher habe ich die Verwendung der eliminiert ANDROID_ID weil es sich nach dem Zurücksetzen auf die Werkseinstellungen ändern könnte. Ich habe auch die Verwendung von eliminiert IMEI weil das Android-Gerät möglicherweise kein Telefon ist. Ich kann weder WLAN noch Bluetooth nutzen MAC-ADRESSE da das Gerät möglicherweise nicht über eine solche Hardware verfügt und / oder solche MAC-Adressen möglicherweise nicht lesbar sind, wenn die Hardware nicht aktiviert ist (basierend auf dem, was ich im Internet gefunden habe).

Ich glaube, ich könnte nach der Seriennummer des Android-Geräts suchen.

Es ist leicht zugänglich mit android.os.Build.SERIAL (da es in API-Ebene 9 hinzugefügt wird und keine zusätzliche Berechtigung benötigt).

Meine Fragen sind:

  • Unter Berücksichtigung, dass meine Anwendung auf Android 4.0 (API 14) und höher abzielt, ist die android.os.Build.SERIAL Nummer für die Android-Geräte einzigartig für jedes Gerät ?

  • Derzeit Dokumentation von android.os.Build.SERIAL zeigt an : Eine Hardware-Seriennummer, falls verfügbar. Nur alphanumerisch, Groß-/Kleinschreibung nicht beachten.
    Bedeutet dies, dass die Seriennummer möglicherweise nicht verfügbar ist?

  • Was könnte eine andere Alternative sein, die die oben genannten Bedingungen erfüllt?

  • pocketmagic.net/2011/02/android-unique-device-id/#.UW-y06JTDzw und stackoverflow.com/a/5424756/2021499 können helfen

    – Dein Schöpfer

    18. April 2013 um 8:47 Uhr

  • Haben Sie sich am Ende für eine Lösung entschieden? ich stehe jetzt vor einem ähnlichen Dilemma…

    – IgorGanapolsky

    12. September 2016 um 14:14 Uhr

Benutzer-Avatar
Toni Chan

Unter Berücksichtigung, dass meine Anwendung auf Android 4.0 (API 14) und höher abzielt, ist die android.os.Build.SERIAL-Nummer für die Android-Geräte für jedes Gerät eindeutig?

Entsprechend nützlich Artikel im Blog für Android-Entwickler, android.os.Build.SERIAL sollte einzigartig sein, wenn es verfügbar ist. Aus dem Artikel:

Geräte ohne Telefonie müssen hier eine eindeutige Geräte-ID melden; Einige Telefone können dies auch tun.

Bedeutet dies, dass die Seriennummer möglicherweise nicht verfügbar ist?

Richtig, möglicherweise nicht verfügbar. Beachten Sie, dass sie sagen “Geräte ohne Telefonie werden benötigt…”so dass nur Geräte ohne “Telefonie” (wie WLAN-Tablets) zur Versorgung benötigt werden SERIAL Nummer, obwohl einige Telefone dies immer noch tun (wie das Nexus 4).

Zu diesem Thema fehlt definitiv eine Dokumentation, aber aufgrund der Formulierung ist es möglich, dass nur “Geräte ohne Telefonie” eine eindeutige ID übermitteln müssen, während Telefone, die eine übermitteln, möglicherweise nicht eindeutig sind.

Was könnte eine andere Alternative sein, die die oben genannten Bedingungen erfüllt?

Für Ihre Situation ist es meiner Meinung nach am besten, zuerst nach a zu suchen deviceId (IMEI, oder was nicht) und wenn deviceId existiert nicht, dann greifen Sie auf die Verwendung zurück android.os.Build.SERIAL (da dies wahrscheinlich ein Tablet ist) so:

public static String getDeviceId(Context context) {
    final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
    if (deviceId != null) {
        return deviceId;
    } else {
        return android.os.Build.SERIAL;
    }
}

Denken Sie daran, zu verwenden deviceId du brauchst die erlaubnis android.permission.READ_PHONE_STATE.

So Da das minSDK Ihrer App 14 ist, können Sie das Feld sicher verwenden android.os.Build.SERIAL. Und wenn wir davon ausgehen, dass Geräte ohne Telefonie wirklich immer eindeutige IDs liefern SERIAL dann denke ich, dass dies eine sichere Wette wäre, um immer eine eindeutige Geräte-ID zu erhalten (natürlich ohne Fehler).

  • Also wenn ich benutze Build.SERIAL für Geräte, die keine Mobiltelefone sind, und getDeviceId() Glauben Sie, dass dies für Geräte, die Mobiltelefone sind, immer funktionieren und immer Einzigartigkeit bieten würde? Danke im Voraus.

    – Ich Glückspilz

    14. Juli 2013 um 0:45 Uhr

  • @LuckyMe Wenn alles entsprechend funktionieren würde, wäre es meiner Meinung nach sicher. Aber natürlich gibt es Fehler, zum Beispiel heißt es im Artikel getDeviceId() Fehler: Wir haben einige Fälle von Produktionstelefonen gesehen, bei denen die Implementierung fehlerhaft ist und Müll zurückgibt, z. B. Nullen oder Sternchen. Es hängt auch davon ab, wie Ihre min-API aussehen wird Build.SERIAL ist nur ab API 9 verfügbar. Aber wenn Ihre Situation denen der OP ähnlich ist, dann denke ich, dass Sie sicher sind. Aber Sie sollten trotzdem Ihre Datenbank überprüfen, um zu sehen, ob Sie seltsame Gerätekennungen zurückbekommen.

    – Toni Chan

    30. Juli 2013 um 21:47 Uhr

  • Ich hatte Build.SERIAL verwendet, weil ich dachte, es sei einzigartig, aber wir haben gerade eine Reihe von Tablets/Phablets (API 15) von einem Hersteller in China erhalten, und die Seriennummer ist auf mehreren Geräten (aber nicht allen) gleich. Dies ist vielleicht nur ein unseriöser Hersteller, aber ich würde Ihnen empfehlen, sich nicht darauf zu verlassen, dass die Seriennummer einzigartig ist!

    – Peconia

    10. März 2016 um 15:28 Uhr

  • ~”obwohl einige Telefone dies immer noch tun“. Tatsächlich liefern die meisten Telefone eine Seriennummer. Sogar die Low-End-Prepaid-Telefone tun dies. Sie können die Seriennummer mit abfragen android.os.Build.SERIAL.

    – IgorGanapolsky

    12. September 2016 um 14:20 Uhr


Benutzer-Avatar
Kai Wang

Ich persönlich benutze Secure.ANDROID_ID & Build.SERIAL So identifizieren Sie ein Telefon:

androidId = Settings.Secure.getString(this.getContentResolver(), 
                Settings.Secure.ANDROID_ID) + Build.SERIAL;

Sie können das gleiche haben ANDROID_IDsie haben möglicherweise keine SERIAL. Aber die Chance auf beides ist gering.

  • Scheint eine Lösung zu sein. Ich brauche eine statische eindeutige Zeichenfolge jedes Geräts, die an meine Server-API gesendet werden muss, um einen Benutzer zu registrieren. Und die Lösung benötigt keine Addon-Berechtigungen. Mag ich!

    – Trancer

    12. Dezember 2016 um 12:23 Uhr


  • Das Problem ist, dass der Wert, den Sie verwenden, erhalten wird Secure.ANDROID_ID kann sich ändern, wenn der Benutzer auf die Werkseinstellungen zurücksetzt, was bedeutet, dass sich auch Ihre verkettete ID ändert, selbst wenn es sich immer noch um dasselbe Gerät handelt.

    – Michael A.

    14. September 2017 um 13:22 Uhr

Sie scheinen die Situation ziemlich gut zusammengefasst zu haben.

Die Seriennummer soll für jedes Gerät eindeutig sein, aber (dies ist Android) gibt es natürlich Fehler, die Ausnahmen schaffen, z
https://code.google.com/p/android/issues/detail?id=35193

Wie Sie darauf hinweisen, deuten die Dokumente darauf hin, dass dies eine Hardware-Seriennummer sein soll, aber die Art und Weise, wie sie formuliert ist, legt nahe, dass Sie sich nicht darauf verlassen sollten. Und verwechseln Sie diese nicht mit der tatsächlichen Seriennummer des Geräts, dh der Seriennummer, die auf der Rückseite oder auf der Verpackung aufgedruckt ist. Außerdem glaube ich, dass es viel weniger verbreitet ist als android_id, daher könnte es durchaus Probleme geben, die nicht gemeldet werden.

Ich habe es weit verbreitet gesehen, dass die android_id auf der Seriennummer basiert, aber ich glaube, dass das nicht stimmt – ich habe kürzlich beobachtet, dass auf einem Tablet mit der neuen Multi-User-Fähigkeit jedes Benutzerkonto seine eigene android_id bekommt, aber die Seriennummer ist bei beiden gleich.

AFAIK „eine andere Alternative“ existiert nicht: Ihre Liste ist vollständig. Die Seriennummer kommt dem, was Sie suchen, am nächsten, es sei denn, Sie sind bereit, sich auf WLAN- oder Bluetooth-Berechtigungen zu verlassen.

  • Da haben Sie recht android_id basiert nicht auf der Seriennummer. Anscheinend basiert es einfach auf einem Zufallszahlengenerator. Sehen Sie sich die Codeänderungen an, die sie vorgenommen haben hier als sie endlich den Fehler behoben haben, bei dem viele Geräte dasselbe hatten android_id.

    – Toni Chan

    5. Juni 2013 um 0:30 Uhr

  • Was ist mit der Verwendung Settings.Secure.ANDROID_ID? Wäre das nicht zuverlässiger eindeutig als die Seriennummer?

    – IgorGanapolsky

    12. September 2016 um 14:30 Uhr

Normalerweise erhalte ich eindeutige IDs, indem ich einen SHA1-Hash einer eindeutigen Zeichenfolge (normalerweise Firmenname) + imei (falls keine imei, Mac-Adresse) durchführe [wifi, bluetooth, etc]). Dies gibt mir eindeutige IDs, die gleich aussehen und in der Regel pro Gerät eindeutig sind (nicht perfekt, wenn der MAC geändert / gefälscht wird).

1133280cookie-checkEindeutige Android-Seriennummer

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy