2012-01-29 37 views
8

Tôi muốn cấp ID duy nhất cho từng người dùng ngay sau khi anh cài đặt ứng dụng để bất cứ khi nào ứng dụng liên hệ với máy chủ tôi biết ai đang liên hệ. Vì mục đích này, tôi nghĩ rằng khi cài đặt lần đầu tiên, ứng dụng sẽ liên lạc với máy chủ và nhận ID duy nhất. Nhưng tôi không biết nơi để lưu trữ nó vĩnh viễn để thời gian tiếp theo khi ứng dụng được bắt đầu, nó biết ID của nó là gì hơn là liên hệ với máy chủ.ID duy nhất cho mỗi người dùng trong Android

Xin lỗi nếu đó là một số câu hỏi rõ ràng như tôi là người mới.

+1

Có lý do nào bạn không sử dụng tên người dùng/mật khẩu không? Nếu người dùng có nhiều thiết bị và/hoặc thay thế thiết bị Android của họ, bạn sẽ không thể biết chúng nữa. (không nói rằng nó không phải là điều đúng để làm trong trường hợp này, nhưng những gì _is_ trường hợp này thực sự? :) –

+1

Btw, trong số tất cả các bản sao về ID duy nhất, mà có vẻ là một trong những người có thẩm quyền nhất: http: // stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id, mặc dù điều đó không xem xét các caveats tôi đã đề cập trong câu trả lời của tôi. – EboMike

+0

Tôi muốn theo dõi hoạt động của người dùng và gửi nó đến máy chủ. Vì vậy, bất cứ khi nào khách hàng nhập ID duy nhất đó vào trang web của tôi, anh ấy sẽ có thể xem nhật ký được liên kết với người dùng đó. Đó là lý do tại sao tôi không muốn anh ta có ID đăng nhập vì ứng dụng sẽ luôn chạy trong nền. – Gaurav

Trả lời

6

Câu hỏi này đã được hỏi nhiều lần về Stack Overflow.

Tóm lại: Android luôn hỗ trợ một ID duy nhất. Tuy nhiên, trước Android 2.2, ID không phải lúc nào cũng giống hệt nhau trên một số loại điện thoại nhất định. Kể từ 2.2 là khá phổ biến bởi bây giờ, tôi sẽ sử dụng ID đó.

Blog nhà phát triển Android có a good article về việc này.

Và như Joachim đã nói - bạn có thể muốn xem xét một cách tiếp cận hoàn toàn khác. ID duy nhất của Android tốt và ổn định trên toàn bộ cài đặt gốc của nhà sản xuất, nhưng không phải trên một lần nâng cấp thiết bị. Cũng nên nhớ rằng nhiều người có nhiều thiết bị (như điện thoại và máy tính bảng). Thay vào đó, bạn có thể muốn sử dụng tài khoản Google, AccountManager có thể giúp bạn ở đó.

0

Sử dụng SharedPreferences để lưu trữ id duy nhất.

Dưới đây là một ví dụ:

Android SharedPreferences

Đối với dữ liệu phức tạp hơn, bạn có thể sử dụng SQLite.

+0

Tôi đang nghĩ đến việc tạo ID ngẫu nhiên trên máy chủ bằng ID thiết bị của người dùng hoặc một số ID khác mà tôi sẽ tìm ra sớm. Sự cố là lưu trữ ID ngẫu nhiên trên thiết bị. Vì vậy, vấn đề được giải quyết. Cảm ơn. :) – Gaurav

+0

SharedPreferences sẽ không tồn tại cài đặt lại hoặc khôi phục cài đặt gốc hoặc chỉ hoạt động dữ liệu ứng dụng đơn giản rõ ràng của người dùng. Bạn có thể muốn sao lưu nó trên tài khoản google của người dùng nhưng nó vẫn có thể bị xóa dễ dàng. –

0

Đối với id duy nhất, bạn có thể sử dụng IMEI của thiết bị mà ứng dụng sẽ cài đặt. Tham khảo this link để biết cách nhận số IMEI. Sau đó, lưu trữ số IMEI đó trong tùy chọn được chia sẻ. Tham khảo liên kết của thùy Guillermo cho điều đó. Bạn cần phải kiểm tra xem id duy nhất đó có được ưu tiên khi bạn khởi động ứng dụng hay không. Ở lần đầu tiên, hãy lưu tùy chọn đó. Vì vậy, khi thời gian tiếp theo nó kiểm tra cho rằng id, ứng dụng tìm thấy nó trong sở thích và do đó không cần phải kết nối máy chủ. :)

+0

IMEI trên máy tính bảng? Chúc may mắn... – EboMike

+0

@EboMike Cảm ơn bạn đã xem xét điều đó. –

+0

@Gaurav Trong trường hợp máy tính bảng, chỉ máy tính bảng 3G có IMEI. Nhưng bởi liên kết tôi đã đưa ra trong câu trả lời của tôi, bạn có thể tìm thấy deviceId của máy tính bảng quá và đó là duy nhất. Và đối với ID duy nhất, bạn cũng có thể sử dụng ANDROID_ID. Tham khảo [http://stackoverflow.com/questions/8366013/android-imei-number-for-tablet]. Nhưng nó không phải là đáng tin cậy nhiều theo câu trả lời của liên kết này. –

0

Bạn có thể nhận được IMEI của thiết bị. Kể từ API 26, getDeviceId() không được chấp nhận. Nếu bạn cần nhận được IMEI của thiết bị, hãy sử dụng các mục sau:

String deviceId = ""; 
    if (Build.VERSION.SDK_INT >= 26) { 
     deviceId = getSystemService(TelephonyManager.class).getImei(); 
    }else{ 
     deviceId = getSystemService(TelephonyManager.class).getDeviceId(); 
    } 
+0

Bạn cần quyền READ_PHONE_STATE cho điều đó ... –

Các vấn đề liên quan