2011-01-25 32 views
50

Tôi đang sử dụng cuộc gọi này:Có phải Secure.ANDROID_ID duy nhất cho mỗi thiết bị không?

Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID); 

Để nhận UID cho thiết bị. Tôi nghĩ rằng tôi đang nhận được cùng một ID từ nhiều thiết bị mặc dù. Điều này có khả thi không?

ID trong câu hỏi là: 9774d56d682e549c và dường như có một vấn đề với một số thiết bị trở lại ID này http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403

+0

Bạn nghĩ sao? hoặc bạn có chắc không? –

+0

Sau khi tra cứu ID được đề cập và thấy một chuỗi về ID đó, tôi chắc chắn. Lúc đầu, tôi nghĩ rằng nó có thể có thể là thiết bị đã trở về null và tôi đã đặt nó như là một mặc định ở đâu đó. Nhưng đây không phải là trường hợp. Tôi biết chắc chắn tôi nhận được cùng một giá trị trên nhiều thiết bị. – FoamyGuy

+0

Tôi thấy hoàn hảo: http://stackoverflow.com/a/16929647/1318946 –

Trả lời

25

Kiểm tra trong số thread,. Tuy nhiên, bạn nên cẩn thận vì nó được ghi thành "có thể thay đổi khi khôi phục cài đặt gốc". Sử dụng có nguy cơ của riêng bạn, và nó có thể dễ dàng thay đổi trên một điện thoại bắt nguồn từ. Ngoài ra, có vẻ như một số nhà sản xuất gặp sự cố với điện thoại của họ có số trùng lặp thread. Tùy thuộc vào những gì bạn đang cố gắng làm, tôi có lẽ sẽ không sử dụng điều này như là một UID.

+12

đó là một sự xấu hổ rằng việc thực hiện của ANDROID_ID là quá ... què! Đánh giá từ tài liệu của Google, mục đích là một ID dài hơn: 'Một số 64 bit (như một chuỗi hex) được tạo ngẫu nhiên trên khởi động đầu tiên của thiết bị và phải duy trì liên tục trong suốt thời gian của thiết bị' –

+1

Theo chủ đề này [link] (http://android-developers.blogspot.in/2011/03/identifying-app-installations.html) ** "Ngoài ra, đã có ít nhất một lỗi được quan sát rộng rãi trong một chiếc điện thoại phổ biến từ một nhà sản xuất chính, trong đó mỗi phiên bản đều có cùng ANDROID_ID. "** ** Tốt hơn không nên sử dụng nó ** –

+1

Đó là từ năm 2011 trong Froyo. Bây giờ nó không liên quan. –

5

Tôi đã đọc một vài điều về vấn đề này và tiếc là ANDROID_ID không nên dựa vào để xác định duy nhất một thiết bị cá nhân.

Nó dường như không được áp dụng trong các yêu cầu tuân thủ Android và do đó các nhà sản xuất dường như thực hiện nó theo cách mà họ chọn bao gồm một số sử dụng nó nhiều hơn như một 'mô hình' ID vv

Ngoài ra, lưu ý rằng thậm chí nếu một nhà sản xuất đã viết một máy phát điện để biến nó thành UUID (ví dụ), nó không được đảm bảo để tồn tại một thiết lập lại nhà máy.

+3

Tôi nghĩ rằng nó được đảm bảo KHÔNG tồn tại thiết lập lại nhà máy theo thiết kế, nó được đề cập ở đâu đó trong tài liệu. Và đó là đúng cách để thực hiện nó. –

13

Vì vậy, nếu bạn muốn một cái gì đó độc đáo với chính thiết bị, TM.getDeviceId()nên là đủ.

Đây là mã hiển thị cách nhận ID người quản lý điện thoại. ID thiết bị Android mà bạn đang sử dụng có thể thay đổi về cài đặt gốc và một số nhà sản xuất có vấn đề trong việc cung cấp id duy nhất.

TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 

Log.d("ID", "Android ID: " + Secure.getString(getContentResolver(), Secure.ANDROID_ID)); 
Log.d("ID", "Device ID : " + tm.getDeviceId()); 

Hãy chắc chắn để có quyền cho TelephonyManager bằng cách sử dụng

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+3

Có, sử dụng getDeviceId() cũng hoạt động. Nhưng bạn nên rất cẩn thận vì nó có thể trả về null. (Trên thiết bị không có modem 3G/điện thoại) Giải pháp tôi sử dụng là quay lại địa chỉ mac của Wifi (tất nhiên cũng có thể bị thiếu, nhưng thường không có trên cùng một thiết bị) – vdstw

+11

Yêu cầu quyền «READ_PHONE_STATE' là kinh khủng.Thay vào đó, hãy sử dụng 'ANDROID_ID'. – dolmen

+0

vâng, nó có thể trả về null trên các thiết bị không có 3g (nhiều người trong số họ trên thị trường), sau đó bạn nên sử dụng WiFi - guid của nó cũng có thể là null cho đến khi bạn bật/tắt ít nhất một lần sau khi khởi động lại thiết bị. Và nếu không có wifi ... cơn ác mộng thực sự, trên cửa sổ ce có GUID cho mỗi thiết bị và cuộc sống thật đẹp. – marcinj

1

Chỉ cần liệt kê một giải pháp alternaitve đây, ID Quảng cáo:

https://support.google.com/googleplay/android-developer/answer/6048248?hl=en

sao chép từ liên kết ở trên:

Quảng cáo ID là ID duy nhất, có thể đặt lại cho quảng cáo do các dịch vụ của Google Play cung cấp. Nó cung cấp cho người dùng kiểm soát tốt hơn và cung cấp cho nhà phát triển một hệ thống chuẩn, đơn giản để tiếp tục kiếm tiền từ ứng dụng của họ. Nó cho phép người dùng đặt lại số nhận dạng của họ hoặc chọn không tham gia quảng cáo được cá nhân hóa (trước đây được gọi là quảng cáo dựa trên sở thích) trong các ứng dụng Google Play.

Những hạn chế là:

  1. Google Play thiết bị hỗ trợ mà thôi. Chính sách
  2. Bảo mật: https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
10

Với Android O hành vi của các ANDROID_ID sẽ thay đổi. ANDROID_ID sẽ khác nhau cho mỗi ứng dụng trên mỗi người dùng trên điện thoại.

Trích từ: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

Android ID

Trong O, Android ID (Settings.Secure.ANDROID_ID hoặc SSAID) có một giá trị khác nhau cho mỗi ứng dụng và mỗi người dùng trên thiết bị. Nhà phát triển yêu cầu số nhận dạng phạm vi thiết bị, thay vào đó, hãy sử dụng số nhận dạng có thể đặt lại, chẳng hạn như ID quảng cáo, cho phép người dùng kiểm soát nhiều hơn. ID quảng cáo cũng cung cấp cài đặt hướng đến người dùng để giới hạn theo dõi quảng cáo.

Ngoài ra trong Android O:

  • Giá trị ANDROID_ID sẽ không thay đổi trên bao bì gỡ bỏ cài đặt/cài đặt lại, như miễn là tên gói và ký chủ chốt đều giống nhau. Ứng dụng có thể dựa trên trên giá trị này để duy trì trạng thái trên các lần cài đặt lại.
  • Nếu ứng dụng được cài đặt trên thiết bị đang chạy phiên bản cũ hơn Android, ID Android vẫn giữ nguyên khi thiết bị được cập nhật lên Android O, trừ khi ứng dụng được gỡ cài đặt và cài đặt lại.
  • Giá trị ID Android chỉ thay đổi nếu thiết bị được khôi phục tại nhà máy hoặc nếu phím ký chuyển giữa các lần gỡ cài đặt và
    cài đặt lại.
  • Thay đổi này chỉ bắt buộc đối với nhà sản xuất thiết bị giao hàng bằng dịch vụ Google Play và ID quảng cáo. Các nhà sản xuất thiết bị khác có thể cung cấp ID có thể đặt lại khác hoặc tiếp tục cung cấp ID ANDROID.
Các vấn đề liên quan