Apakah perangkat Android memiliki ID unik, dan jika demikian, apa cara sederhana untuk mengaksesnya menggunakan Java?
android
uniqueidentifier
Tyler
sumber
sumber
ANDROID_ID
pastikan untuk membaca jawaban ini dan bug ini .Jawaban:
Settings.Secure#ANDROID_ID
mengembalikan ID Android sebagai unik untuk setiap string hex 64-bit pengguna .sumber
UPDATE : Pada versi Android terbaru, banyak masalah dengan
ANDROID_ID
telah diselesaikan, dan saya percaya pendekatan ini tidak lagi diperlukan. Silakan lihat jawaban Anthony .Pengungkapan penuh: aplikasi saya menggunakan pendekatan di bawah ini awalnya tetapi tidak lagi menggunakan pendekatan ini, dan kami sekarang menggunakan pendekatan yang diuraikan dalam entri Blog Pengembang Android yang terhubung dengan tautan emmby (yaitu, menghasilkan dan menyimpan a
UUID#randomUUID()
).Ada banyak jawaban untuk pertanyaan ini, sebagian besar hanya akan berfungsi "sebagian" pada saat itu, dan sayangnya itu tidak cukup baik.
Berdasarkan pengujian perangkat saya (semua ponsel, setidaknya satu di antaranya tidak diaktifkan):
TelephonyManager.getDeviceId()
TelephonyManager.getSimSerialNumber()
getSimSerialNumber()
(seperti yang diharapkan)ANDROID_ID
ANDROID_ID
danTelephonyManager.getDeviceId()
- selama akun Google telah ditambahkan selama pengaturan.Jadi jika Anda menginginkan sesuatu yang unik untuk perangkat itu sendiri,
TM.getDeviceId()
harus cukup. Jelas beberapa pengguna lebih paranoid daripada yang lain, jadi mungkin berguna untuk hash 1 atau lebih dari pengidentifikasi ini, sehingga string masih hampir unik untuk perangkat, tetapi tidak secara eksplisit mengidentifikasi perangkat sebenarnya pengguna. Misalnya, menggunakanString.hashCode()
, dikombinasikan dengan UUID:mungkin menghasilkan sesuatu seperti:
00000000-54b3-e7c7-0000-000046bffd97
Ini cukup berhasil bagi saya.
Seperti yang disebutkan Richard di bawah ini, jangan lupa bahwa Anda perlu izin untuk membaca
TelephonyManager
properti, jadi tambahkan ini ke manifes Anda:impor libs
sumber
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
file manifes. Jika menyimpan dalam database, string yang dikembalikan adalah 36 karakter.Terakhir Diperbarui: 6/2/15
Setelah membaca setiap posting Stack Overflow tentang membuat ID unik, blog pengembang Google dan dokumentasi Android, saya merasa seolah-olah 'Pseudo ID' adalah pilihan terbaik.
Masalah Utama: Perangkat Keras vs Perangkat Lunak
Perangkat keras
Perangkat lunak
Kerusakan keseluruhan dengan Android
- Jaminan keunikan (termasuk perangkat yang di-rooting) untuk API> = 9/10 (99,5% dari perangkat Android)
- Tidak ada izin tambahan
Kode psuedo:
Terima kasih kepada @stansult untuk memposting semua opsi kami (dalam pertanyaan Stack Overflow).
Daftar opsi - alasan mengapa / mengapa tidak menggunakannya:
Email Pengguna - Perangkat Lunak
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
atau<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
( Cara mendapatkan alamat email utama perangkat Android )Nomor Telepon Pengguna - Perangkat Lunak
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
IMEI - Hardware (hanya telepon, kebutuhan
android.permission.READ_PHONE_STATE
)<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Android ID - Hardware (bisa nol, bisa berubah setelah reset pabrik, bisa diubah pada perangkat yang di-rooting)
Alamat MAC WLAN - Perangkat Keras (kebutuhan
android.permission.ACCESS_WIFI_STATE
)<uses-permission android:name="android.permission.ACCESS_WIFI_STATE "/>
Bluetooth MAC Address - Hardware (perangkat dengan Bluetooth, kebutuhan
android.permission.BLUETOOTH
)<uses-permission android:name="android.permission.BLUETOOTH "/>
Pseudo-Unique ID - Software (untuk semua perangkat Android)
Saya tahu tidak ada cara 'sempurna' untuk mendapatkan ID unik tanpa menggunakan izin; namun, terkadang kita hanya perlu melacak pemasangan perangkat. Ketika membuat ID unik, kita dapat membuat 'id unik semu' hanya berdasarkan informasi yang diberikan oleh API Android tanpa menggunakan izin tambahan. Dengan cara ini, kami dapat menunjukkan rasa hormat pengguna dan mencoba menawarkan pengalaman pengguna yang baik juga.
Dengan id pseudo-unik, Anda benar-benar hanya menemukan fakta bahwa mungkin ada duplikat berdasarkan fakta bahwa ada perangkat serupa. Anda dapat mengubah metode gabungan untuk membuatnya lebih unik; namun, beberapa pengembang perlu melacak pemasangan perangkat dan ini akan melakukan trik atau kinerja berdasarkan perangkat yang serupa.
API> = 9:
Jika perangkat Android mereka adalah API 9 atau lebih, ini dijamin unik karena bidang 'Build.SERIAL'.
INGAT , Anda secara teknis hanya kehilangan sekitar 0,5% pengguna yang memiliki API <9 . Jadi Anda bisa fokus pada sisanya: Ini adalah 99,5% pengguna!
API <9:
Jika perangkat Android pengguna lebih rendah dari API 9; semoga, mereka belum melakukan reset pabrik dan 'Secure.ANDROID_ID' mereka akan dipertahankan atau tidak 'null'. (lihat http://developer.android.com/about/dashboards/index.html )
Jika semuanya gagal:
Jika semuanya gagal, jika pengguna memang memiliki lebih rendah dari API 9 (lebih rendah dari Gingerbread), telah mengatur ulang perangkat mereka atau 'Secure.ANDROID_ID' mengembalikan 'nol', maka ID yang dikembalikan hanya akan didasarkan pada informasi perangkat Android mereka. Di sinilah tabrakan dapat terjadi.
Perubahan:
Silakan lihat metode di bawah ini:
Baru (untuk aplikasi dengan iklan DAN Layanan Google Play):
Dari konsol Pengembang Google Play:
Implementasi :
Izin:
Kode:
Sumber / Dokumen:
http://developer.android.com/google/play-services/id.html http://developer.android.com/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html
Penting:
Peringatan, pengguna dapat mengatur ulang:
http://en.kioskea.net/faq/34732-android-reset-your-advertising-id
Saya telah mencoba merujuk setiap tautan yang saya ambil informasinya. Jika Anda hilang dan perlu dimasukkan, beri komentar!
Layanan Pemain Google InstanceID
https://developers.google.com/instance-id/
sumber
Build
kelas akan berubah setelah pembaruan OS? Terutama jika API diperbarui? Jika demikian, bagaimana Anda menjamin ini unik? (Berbicara tentang metode yang Anda tulis)Seperti yang disebutkan Dave Webb, Blog Pengembang Android memiliki artikel yang membahas hal ini. Solusi pilihan mereka adalah melacak pemasangan aplikasi daripada perangkat, dan itu akan bekerja dengan baik untuk sebagian besar kasus penggunaan. Posting blog akan menunjukkan kepada Anda kode yang diperlukan untuk membuatnya bekerja, dan saya sarankan Anda memeriksanya.
Namun, posting blog berlanjut untuk membahas solusi jika Anda memerlukan pengenal perangkat daripada pengenal instalasi aplikasi. Saya berbicara dengan seseorang di Google untuk mendapatkan klarifikasi tambahan tentang beberapa item jika Anda perlu melakukannya. Inilah yang saya temukan tentang pengidentifikasi perangkat yang TIDAK disebutkan dalam posting blog tersebut:
Berdasarkan rekomendasi Google, saya menerapkan kelas yang akan menghasilkan UUID unik untuk setiap perangkat, menggunakan ANDROID_ID sebagai unggulan jika diperlukan, kembali ke TelephonyManager.getDeviceId () sebagaimana diperlukan, dan jika gagal, beralih ke UUID unik yang dibuat secara acak yang bertahan di seluruh aplikasi restart (tetapi tidak menginstal ulang aplikasi).
Perhatikan bahwa untuk perangkat yang harus mundur pada ID perangkat, ID unik AKAN bertahan di seluruh pabrik. Ini adalah sesuatu yang harus diperhatikan. Jika Anda perlu memastikan bahwa pengaturan ulang pabrik akan mengatur ulang ID unik Anda, Anda mungkin ingin mempertimbangkan untuk langsung kembali ke UUID acak daripada ID perangkat.
Sekali lagi, kode ini untuk ID perangkat, bukan ID instalasi aplikasi. Untuk sebagian besar situasi, ID penginstalan aplikasi mungkin adalah yang Anda cari. Tetapi jika Anda benar-benar membutuhkan ID perangkat, maka kode berikut mungkin akan bekerja untuk Anda.
sumber
Berikut adalah kode yang digunakan Reto Meier dalam presentasi Google I / O tahun ini untuk mendapatkan id unik bagi pengguna:
Jika Anda menyandingkan ini dengan strategi cadangan untuk mengirim preferensi ke cloud (juga dijelaskan dalam ceramah Reto , Anda harus memiliki id yang terkait dengan pengguna dan bertahan setelah perangkat dihapus, atau bahkan diganti. Saya berencana untuk menggunakan ini dalam analitik maju (dengan kata lain, saya belum melakukan itu sedikit :).
sumber
Anda juga dapat mempertimbangkan alamat MAC adaptor Wi-Fi. Diperoleh seperti ini:
Membutuhkan izin
android.permission.ACCESS_WIFI_STATE
dalam manifes.Dilaporkan akan tersedia bahkan ketika Wi-Fi tidak terhubung. Jika Joe dari jawaban di atas mencoba ini di banyak perangkatnya, itu akan menyenangkan.
Pada beberapa perangkat, itu tidak tersedia ketika Wi-Fi dimatikan.
CATATAN: Dari Android 6.x, ia mengembalikan alamat mac palsu yang konsisten:
02:00:00:00:00:00
sumber
android.permission.ACCESS_WIFI_STATE
02:00:00:00:00:00
Ada info yang agak berguna di sini .
Ini mencakup lima jenis ID yang berbeda:
android.permission.READ_PHONE_STATE
)android.permission.ACCESS_WIFI_STATE
)android.permission.BLUETOOTH
)sumber
Blog Pengembang Android resmi sekarang memiliki artikel lengkap tentang subjek ini, Mengidentifikasi Instalasi Aplikasi .
sumber
Di Google I / O Reto Meier merilis jawaban yang kuat tentang cara melakukan pendekatan yang harus memenuhi sebagian besar pengembang untuk melacak pengguna di seluruh instalasi. Anthony Nolan menunjukkan arah dalam jawabannya, tetapi saya pikir saya akan menulis pendekatan lengkap sehingga orang lain dapat dengan mudah melihat bagaimana melakukannya (butuh beberapa saat untuk mengetahui detailnya).
Pendekatan ini akan memberi Anda ID pengguna anonim, aman yang akan bertahan untuk pengguna di berbagai perangkat (berdasarkan akun Google utama) dan di seluruh pemasangan. Pendekatan dasarnya adalah membuat ID pengguna acak dan menyimpannya di preferensi bersama aplikasi. Anda kemudian menggunakan agen cadangan Google untuk menyimpan preferensi bersama yang ditautkan ke akun Google di cloud.
Mari kita pergi melalui pendekatan penuh. Pertama, kita perlu membuat cadangan untuk SharedPreferences kita menggunakan Layanan Cadangan Android. Mulailah dengan mendaftarkan aplikasi Anda melalui
http://developer.android.com/google/backup/signup.html
.Google akan memberi Anda kunci layanan cadangan yang perlu Anda tambahkan ke manifes. Anda juga perlu memberi tahu aplikasi untuk menggunakan BackupAgent sebagai berikut:
Maka Anda perlu membuat agen cadangan dan mengatakannya untuk menggunakan agen pembantu untuk preferensi bersama:
Untuk menyelesaikan pencadangan, Anda perlu membuat instance dari BackupManager di Aktivitas utama Anda:
Terakhir buat ID pengguna, jika belum ada, dan simpan di SharedPreferences:
User_ID ini sekarang akan tetap ada di seluruh instalasi, bahkan jika pengguna memindahkan perangkat.
Untuk informasi lebih lanjut tentang pendekatan ini lihat bicara Reto .
Dan untuk detail lengkap tentang cara menerapkan agen cadangan, lihat Cadangan Data . Saya terutama merekomendasikan bagian di bagian bawah pada pengujian karena cadangan tidak terjadi secara instan dan untuk menguji Anda harus memaksa cadangan.
sumber
Saya pikir ini pasti cara api membangun kerangka untuk ID unik ... coba lihat.
Pseudo-Unique ID, yang berfungsi di semua perangkat Android Beberapa perangkat tidak memiliki ponsel (mis. Tablet) atau karena alasan tertentu, Anda tidak ingin menyertakan izin READ_PHONE_STATE. Anda masih dapat membaca detail seperti Versi ROM, nama Pabrikan, tipe CPU, dan detail perangkat keras lainnya, yang cocok jika Anda ingin menggunakan ID untuk pemeriksaan kunci seri, atau tujuan umum lainnya. ID yang dihitung dengan cara ini tidak akan unik: adalah mungkin untuk menemukan dua perangkat dengan ID yang sama (berdasarkan pada perangkat keras dan gambar ROM yang sama) tetapi perubahan dalam aplikasi dunia nyata dapat diabaikan. Untuk tujuan ini, Anda dapat menggunakan kelas Build:
Sebagian besar anggota Build adalah string, yang kami lakukan di sini adalah mengambil langkah panjang dan mengubahnya melalui modulo dalam digit. Kami memiliki 13 digit seperti itu dan kami menambahkan dua lagi di depan (35) untuk memiliki ID ukuran yang sama dengan IMEI (15 digit). Ada kemungkinan lain di sini baik-baik saja, lihat saja string ini. Mengembalikan sesuatu seperti
355715565309247
. Tidak diperlukan izin khusus, membuat pendekatan ini sangat nyaman.(Info tambahan: Teknik yang diberikan di atas disalin dari artikel di Pocket Magic .)
sumber
Kode berikut mengembalikan nomor seri perangkat menggunakan API Android tersembunyi. Tetapi, kode ini tidak berfungsi pada Samsung Galaxy Tab karena "ro.serialno" tidak diset pada perangkat ini.
sumber
ro.serialno
digunakan untuk menghasilkanSettings.Secure.ANDROID_ID
. Jadi mereka pada dasarnya adalah representasi berbeda dari nilai yang sama.ANDROID_ID
yang diturunkan darinya.android.os.Build.SERIAL
android.os.Build.SERIAL
akan ditinggalkan di Android O, lihat android-developers.googleblog.com/2017/04/…Ini pertanyaan sederhana, tanpa jawaban sederhana.
Terlebih lagi, semua jawaban yang ada di sini adalah ketinggalan zaman atau tidak dapat diandalkan.
Jadi, jika Anda mencari solusi pada tahun 2020 .
Berikut adalah beberapa hal yang perlu diingat:
Semua pengidentifikasi berbasis perangkat keras (SSAID, IMEI, MAC, dll) tidak dapat diandalkan untuk perangkat non-google (Semuanya kecuali Pixel dan Nexus), yang merupakan lebih dari 50% perangkat aktif di seluruh dunia. Oleh karena itu praktik terbaik pengidentifikasi Android resmi dengan jelas menyatakan:
Itu membuat sebagian besar jawaban di atas tidak valid. Juga karena pembaruan keamanan android yang berbeda, beberapa dari mereka memerlukan izin runtime yang lebih baru dan lebih ketat, yang dapat dengan mudah ditolak oleh pengguna.
Sebagai contoh
CVE-2018-9489
yang mempengaruhi semua teknik berbasis WIFI yang disebutkan di atas.Itu membuat pengidentifikasi tersebut tidak hanya tidak dapat diandalkan, tetapi juga tidak dapat diakses dalam banyak kasus.
Jadi dengan kata sederhana: jangan gunakan teknik itu .
Banyak jawaban lain di sini menyarankan untuk menggunakan
AdvertisingIdClient
, yang juga tidak kompatibel, karena desainnya harus digunakan hanya untuk pembuatan profil iklan. Itu juga dinyatakan dalam referensi resmiIni tidak hanya tidak dapat diandalkan untuk identifikasi perangkat, tetapi Anda juga harus mengikuti privasi pengguna mengenai kebijakan pelacakan iklan , yang menyatakan dengan jelas bahwa pengguna dapat mengatur ulang atau memblokirnya kapan saja.
Jadi jangan gunakan itu juga .
Karena Anda tidak dapat memiliki pengidentifikasi perangkat statis yang diinginkan secara global unik dan andal. Referensi resmi Android menyarankan:
Ini unik untuk instalasi aplikasi pada perangkat, jadi ketika pengguna menghapus aplikasi - itu terhapus, sehingga tidak 100% dapat diandalkan, tetapi itu adalah hal terbaik berikutnya.
Untuk menggunakan
FirebaseInstanceId
tambahkan dependensi firebase-messaging terbaru ke dalam gradle AndaDan gunakan kode di bawah ini di utas latar:
Jika Anda perlu menyimpan identifikasi perangkat di server jauh Anda, maka jangan menyimpannya seperti (teks biasa), tetapi hash dengan garam .
Hari ini bukan hanya praktik terbaik, Anda benar-benar harus melakukannya oleh hukum sesuai dengan GDPR - pengidentifikasi dan peraturan serupa.
sumber
Menggunakan kode di bawah ini, Anda bisa mendapatkan ID perangkat unik dari perangkat OS Android sebagai string.
sumber
Sebuah Serial lapangan telah ditambahkan ke
Build
kelas dalam API level 9 (Android 2.3 - Gingerbread). Dokumentasi mengatakan itu mewakili nomor seri perangkat keras. Jadi itu harus unik, jika ada di perangkat.Saya tidak tahu apakah itu benar-benar didukung (= bukan nol) oleh semua perangkat dengan level API> = 9.
sumber
Satu hal yang akan saya tambahkan - Saya punya satu dari situasi unik itu.
Menggunakan:
Ternyata meskipun Tablet Viewsonic G saya melaporkan DeviceID yang bukan Null, setiap Tablet G melaporkan nomor yang sama.
Jadikan itu menarik dengan bermain "Pocket Empires" yang memberi Anda akses instan ke akun seseorang berdasarkan pada DeviceID "unik".
Perangkat saya tidak memiliki radio seluler.
sumber
9774d56d682e549c
?Untuk instruksi terperinci tentang cara mendapatkan pengenal unik untuk setiap perangkat Android tempat aplikasi Anda terinstal, lihat posting Blog Pengembang Android resmi Mengidentifikasi Instalasi Aplikasi .
Tampaknya cara terbaik bagi Anda untuk membuat sendiri setelah instalasi dan kemudian membacanya ketika aplikasi diluncurkan kembali.
Saya pribadi menemukan ini dapat diterima tetapi tidak ideal. Tidak ada satu pun pengidentifikasi yang disediakan oleh Android yang berfungsi dalam semua keadaan karena sebagian besar tergantung pada kondisi radio ponsel (Wi-Fi on / off, seluler on / off, Bluetooth on / off). Yang lain, suka
Settings.Secure.ANDROID_ID
harus diterapkan oleh pabrikan dan tidak dijamin unik.Berikut ini adalah contoh penulisan data ke file instalasi yang akan disimpan bersama dengan data lain yang disimpan aplikasi secara lokal.
sumber
Tambahkan kode di bawah ini dalam file kelas:
Tambahkan di AndroidManifest.xml:
sumber
ID perangkat unik dari perangkat Android OS sebagai String, menggunakan
TelephonyManager
danANDROID_ID
, diperoleh oleh:Tetapi saya sangat merekomendasikan metode yang disarankan oleh Google, lihat Mengidentifikasi Instalasi Aplikasi .
sumber
Ada banyak pendekatan berbeda untuk mengatasi
ANDROID_ID
masalah - masalah tersebut (mungkinnull
kadang - kadang atau perangkat model tertentu selalu mengembalikan ID yang sama) dengan pro dan kontra:Saya sendiri lebih suka menggunakan implementasi OpenUDID yang ada (lihat https://github.com/ylechelle/OpenUDID ) untuk Android (lihat https://github.com/vieux/OpenUDID ). Sangat mudah untuk diintegrasikan dan memanfaatkan
ANDROID_ID
fallback untuk masalah yang disebutkan di atas.sumber
Bagaimana dengan IMEI . Itu unik untuk Android atau perangkat seluler lainnya.
sumber
Inilah cara saya menghasilkan id unik:
sumber
Dua sen saya - NB ini untuk perangkat (err) ID unik - bukan instalasi seperti yang dibahas di blog pengembang Android .
Perlu dicatat bahwa solusi yang disediakan oleh @emmby jatuh kembali dalam per aplikasi ID sebagai SharedPreferences tidak disinkronkan di seluruh proses (lihat di sini dan di sini ). Jadi saya menghindari ini sama sekali.
Sebaliknya, saya merangkum berbagai strategi untuk mendapatkan ID (perangkat) dalam enum - mengubah urutan konstanta enum memengaruhi prioritas berbagai cara untuk mendapatkan ID. ID non-null pertama dikembalikan atau pengecualian dilemparkan (sesuai praktik Java yang baik untuk tidak memberikan arti nol). Jadi misalnya saya punya TELEPHONY yang pertama - tetapi pilihan default yang bagus adalah beta ANDROID_ID :
sumber
Ada 30+ jawaban di sini dan ada yang sama dan ada yang unik. Jawaban ini didasarkan pada beberapa jawaban itu. Salah satunya adalah jawaban @Lenn Dolling.
Ini menggabungkan 3 ID dan menciptakan string hex 32-digit. Ini bekerja sangat baik untuk saya.
3 ID adalah:
Pseudo-ID - Ini dibuat berdasarkan spesifikasi perangkat fisik
ANDROID_ID -
Settings.Secure.ANDROID_ID
Alamat Bluetooth - Alamat adaptor Bluetooth
Ini akan mengembalikan sesuatu seperti ini: 551F27C060712A72730B0A0F734064B1
Catatan: Anda selalu dapat menambahkan lebih banyak ID ke
longId
string. Misalnya, Serial #. alamat adaptor wifi. IMEI. Dengan cara ini Anda membuatnya lebih unik per perangkat.sumber
longId
dan menyimpannya dalam file, akan membuatnya menjadi pengidentifikasi yang paling unik:String uuid = UUID.randomUUID().toString();
longId
. Ubah satu baris seperti ini:String longId = pseudoId + androidId + btId + UUID.randomUUID().toString();
Ini menjamin bahwa ID yang dihasilkan akan unik.Cara lain adalah menggunakan
/sys/class/android_usb/android0/iSerial
aplikasi tanpa izin apa pun.Untuk melakukan ini di Java, cukup gunakan FileInputStream untuk membuka file iSerial dan membacakan karakter. Pastikan Anda membungkusnya dengan penangan pengecualian, karena tidak semua perangkat memiliki file ini.
Setidaknya perangkat berikut diketahui memiliki file ini dapat dibaca dunia:
Anda juga dapat melihat posting blog saya Membocorkan nomor seri perangkat keras Android ke aplikasi yang tidak terjangkau di mana saya membahas file apa yang tersedia untuk informasi.
sumber
TelephonyManger.getDeviceId () Mengembalikan ID perangkat unik, misalnya, IMEI untuk GSM dan MEID atau ESN untuk telepon CDMA.
Tetapi saya merekomendasikan untuk menggunakan:
Pengaturan. Aman.ANDROID_ID yang mengembalikan ID Android sebagai string hex 64-bit yang unik.
Terkadang TelephonyManger.getDeviceId () akan mengembalikan nol, jadi untuk memastikan id unik Anda akan menggunakan metode ini:
sumber
Untuk pengenalan perangkat keras dari perangkat Android tertentu, Anda dapat memeriksa Alamat MAC.
Anda bisa melakukannya dengan cara itu:
di AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
sekarang dalam kode Anda:
Di setiap perangkat Android, setidaknya penyihir Antarmuka "wlan0" adalah chip WI-FI. Kode ini berfungsi bahkan ketika WI-FI tidak dihidupkan.
PS Mereka adalah banyak Antarmuka lain yang akan Anda dapatkan dari daftar yang berisi MACS Tetapi ini dapat berubah di antara telepon.
sumber
Saya menggunakan kode berikut untuk mendapatkan
IMEI
atau menggunakan Secure.ANDROID_ID
sebagai alternatif, ketika perangkat tidak memiliki kemampuan telepon:sumber
Lebih khusus lagi
Settings.Secure.ANDROID_ID
,. Ini adalah jumlah 64-bit yang dihasilkan dan disimpan saat perangkat melakukan booting pertama kali. Di-reset ketika perangkat dihapus.ANDROID_ID
tampaknya merupakan pilihan yang baik untuk pengidentifikasi perangkat unik. Ada kelemahan: Pertama, itu tidak 100% dapat diandalkan pada rilis Android sebelum 2.2(“Froyo”).
Juga, telah ada setidaknya satu bug yang diamati secara luas di handset populer dari produsen utama, di mana setiap instance memiliki ANDROID_ID yang sama.sumber
Untuk memahami Id Unik yang tersedia di perangkat Android. Gunakan panduan resmi ini.
Praktik terbaik untuk pengidentifikasi unik:
IMEI, Alamat Mac, ID Instans, GUID, SSAID, Id Iklan, API Jaring Pengaman untuk memverifikasi perangkat.
https://developer.android.com/training/articles/user-data-ids
sumber
ID Google Instance
Dirilis pada I / O 2015; di Android membutuhkan layanan bermain 7.5.
https://developers.google.com/instance-id/
https://developers.google.com/instance-id/guides/android-implementation
Tampaknya Google bermaksud agar ID ini digunakan untuk mengidentifikasi instalasi di Android, Chrome, dan iOS.
Ini mengidentifikasi instalasi daripada perangkat, tetapi sekali lagi, ANDROID_ID (yang merupakan jawaban yang diterima) sekarang tidak lagi mengidentifikasi perangkat. Dengan runtime ARC, ANDROID_ID baru dihasilkan untuk setiap instalasi ( detail di sini ), sama seperti ID instance baru ini. Juga, saya pikir mengidentifikasi instalasi (bukan perangkat) adalah apa yang sebenarnya dicari oleh kebanyakan dari kita.
Keuntungan dari instance ID
Tampaknya bagi saya bahwa Google bermaksud untuk menggunakannya untuk tujuan ini (mengidentifikasi instalasi Anda), ini adalah lintas platform, dan dapat digunakan untuk sejumlah tujuan lain (lihat tautan di atas).
Jika Anda menggunakan GCM, pada akhirnya Anda harus menggunakan ID instance ini karena Anda memerlukannya untuk mendapatkan token GCM (yang menggantikan ID registrasi GCM lama).
Kerugian / masalah
Dalam implementasi saat ini (GPS 7.5) ID instance diambil dari server ketika aplikasi Anda memintanya. Ini berarti bahwa panggilan di atas adalah panggilan pemblokiran - dalam pengujian tidak ilmiah saya perlu 1-3 detik jika perangkat online, dan 0,5 - 1,0 detik jika offline (mungkin ini adalah berapa lama menunggu sebelum menyerah dan menghasilkan ID acak). Ini diuji di Amerika Utara pada Nexus 5 dengan Android 5.1.1 dan GPS 7.5.
Jika Anda menggunakan ID untuk tujuan yang mereka maksud - misalnya. otentikasi aplikasi, identifikasi aplikasi, GCM - Saya pikir ini 1-3 detik bisa menjadi gangguan (tergantung pada aplikasi Anda, tentu saja).
sumber