Tại sao nhiều ứng dụng yêu cầu quyền đọc trạng thái và danh tính của điện thoại?. Đặc biệt:
Phone calls
read phone state and identity
Ví dụ Quickpedia là một cổng Wikipedia, nhưng muốn truy cập vào điện thoại. Giải thích cho điều này là gì?
Tại sao nhiều ứng dụng yêu cầu quyền đọc trạng thái và danh tính của điện thoại?. Đặc biệt:
Phone calls
read phone state and identity
Ví dụ Quickpedia là một cổng Wikipedia, nhưng muốn truy cập vào điện thoại. Giải thích cho điều này là gì?
Câu trả lời:
Nó cho phép Ứng dụng đọc một ID duy nhất (số nhận dạng điện thoại có tên IMEI ) được liên kết với điện thoại của bạn.
Do đó, nó có thể giúp chống sao chép hoặc cố gắng theo dõi số lượng người dùng.
Có một lý do khác cho điều này hơn ID duy nhất. Tôi đoán rằng một nửa số ứng dụng không truy cập vào các giá trị đó. Vấn đề là đối với phiên bản thấp hơn lên tới Android 1.5 thì quyền này không tồn tại. Mọi người đều có thể truy cập các giá trị này mà không yêu cầu một cái gì đó.
Do đó, nếu bạn tạo một ứng dụng tương thích với 1.5, quyền này sẽ tự động được thêm vào để mô phỏng bảo mật thấp hơn của Android 1.5 vì bạn có thể bỏ qua quyền này trong hầu hết các trường hợp vì nó có xu hướng chỉ là vấn đề tương thích.
Lý do là Android 1.5 trở về trước không yêu cầu ứng dụng yêu cầu cụ thể các quyền đó và tự động cấp chúng. Kể từ Android 1.6, các quyền đó phải được ứng dụng yêu cầu cụ thể. Tuy nhiên, nếu bạn chỉ định rằng ứng dụng của bạn có thể chạy trên các thiết bị có Android 1.5 trở xuống, thì quyền đó được thêm vào ứng dụng theo mặc định và thị trường cho thấy quyền đó được yêu cầu bởi ứng dụng.
Vì vậy, tóm lại, ứng dụng có thể không thực sự truy cập vào "trạng thái và danh tính điện thoại" của bạn nhưng nếu nhà phát triển chỉ định rằng ứng dụng của họ có thể chạy trên các thiết bị có 1,5 hoặc ít hơn thì quyền đó sẽ được hiển thị.
Câu hỏi này đã làm phiền tôi khá lâu. Vì vậy, bây giờ, cuối cùng, tôi quyết định đi đến tận cùng của vấn đề.
Các Playstore có một ứng dụng có tên permission.READ_PHONE_STATE , mà yêu cầu READ_PHONE_STATE
như sự cho phép mà thôi, và không có gì khác hơn là in ra tất cả các dữ liệu mà nó có thể truy cập có hoặc không sử dụng nó. Tôi đã cài đặt nó trên LG Optimus 4X của mình , được root trên stock Android 4.0.3 và bị thu hồi quyền sử dụng LBE. Kết quả khá thú vị, như các ảnh chụp màn hình sau đây cho thấy:
Thông tin được thu thập bởi sự cho phép của ứng dụng.READ_PHONE_STATE (nhấp vào hình ảnh cho các biến thể lớn hơn)
Như bạn có thể dễ dàng nhìn thấy, ngay cả một số thông tin mà nhà phát triển mặc dù không thể truy cập mà không được phép, vẫn có thể truy cập tự do: số hộp thư của tôi (nhận xét: Có, đó là thông tin chính xác; với nhà cung cấp của tôi đó là phím tắt khi quay số từ thiết bị của bạn, vì vậy tôi có thể tự do hiển thị nó;) Ở cuối ảnh chụp màn hình đầu tiên bạn thấy:
CALL_STATE_IDLE
. Vì vậy, không có cuộc gọi điện thoại đến, đi, hoặc trong tiến trình. Không có ứng dụng nào cần sự cho phép này để "làm nền" cho các cuộc gọi đến.Thậm chí có thể xem liệu dữ liệu di động có hoạt động hay không ( DATA_DISCONNECTED
; Tôi đã sử dụng WiFi khi chụp ảnh màn hình, như bạn có thể thấy trên thanh thông báo), quốc gia bạn đang ở, nhà cung cấp của bạn (bao gồm một số dữ liệu kỹ thuật về anh ấy), cho dù bạn đang có thẻ SIM hoặc nếu bạn đang chuyển vùng.
Do đó, những thứ duy nhất không thể truy cập được là xác định dữ liệu: IMEI, SIMID, IMSI và số điện thoại của riêng bạn.
Kết luận: Sự cho phép này chỉ cần thiết cho mục đích nhận dạng, không có gì khác.
Tại sao nhiều ứng dụng cần nó sau đó?
Khả năng theo thứ tự chính xác này, IMHO.
1 Lưu ý bởi bài đăng của Dan trên trò chuyện :
Chính sách Google Play hiện cấm các ứng dụng nhận IMEI của bạn để nhận dạng bạn cho mục đích quảng cáo. Tất cả các thư viện quảng cáo đã được cập nhật ngay bây giờ để sử dụng "ID quảng cáo" do Google cung cấp dịch vụ cung cấp, do đó, bất kỳ thư viện nào vẫn sử dụng IMEI cho mục đích này phải được báo cáo cho Google.
Vì người dùng khó có thể biết ứng dụng đang sử dụng IMEI để làm gì, bạn nên yêu cầu nhà phát triển giải thích trước.
2 Một nhà phát triển khác chỉ cho tôi một sự khác biệt tinh tế: trong khi không cần có quyền để đọc trạng thái cuộc gọi hiện tại (như tôi đã chỉ ra), có thể cần phải đăng ký một người nghe để được thông báo về những thay đổi của cuộc gọi trạng thái (xem: Phát hiện các cuộc gọi điện thoại đến và đi trên Android ). Mặc dù dường như có phương tiện xử lý việc này tự động khi hệ thống gọi onPause
, nhưng điều đó có thể không phải lúc nào cũng phù hợp: nghĩ về đồng hồ báo thức của bạn. Bạn có thể không muốn tự động dừng cuộc gọi đến - đặc biệt là khi hồ sơ của bạn được đặt thành âm lượng chuông "tắt tiếng".
3 Một lần nữa điều chỉnh từ Dan : Bạn chỉ nhận được quyền bổ sung mặc định nếu phiên bản "mục tiêu" của ứng dụng là 1,5. Nếu bạn nhắm mục tiêu phiên bản mới hơn nhưng phiên bản tối thiểu của bạn là 1,5, bạn sẽ không được phép thêm tự động.
READ_PHONE_STATE
những gì cần thiết để phát hiện các cuộc gọi đến và liên quan (điện thoại) và quyền thứ hai cho các chi tiết nhận dạng (IMEI, IMSI, v.v.). Đã mở 11/2011, vẫn chưa hoạt động. Sao nó nếu quan tâm :)READ_PHONE_STATE
cho phép, như ví dụ được chỉ ra bởi Arno Welzel . Vì một cuộc gọi điện thoại đến sẽ kích hoạt chuông, sự kiện đó có thể được sử dụng onAudioFocusChange()
, không yêu cầu bất kỳ sự cho phép đặc biệt nào: nếu được kích hoạt bởi điều đó, ứng dụng có thể kiểm tra CallState (một lần nữa, mà không cần bất kỳ sự cho phép đặc biệt nào) để xem liệu có cuộc gọi đến.onPause()
là những gì chúng tôi đã thảo luận về trò chuyện cho điều đó! Nhưng việc sử dụng onAudioFocusChange()
có thể ít chi phí hơn (bỏ phiếu nhỏ sau đó có thể không thể biết được).
Nhiều nhà xuất bản quảng cáo sử dụng quyền này để lấy ID điện thoại cho tất cả các mục đích theo dõi. Có nhiều cách khác để có được một ID duy nhất, nhưng không may là chúng có lỗi trong các phiên bản Android cũ hơn (câu chuyện phức tạp hơn, xem ví dụ: https://stackoverflow.com/questions/2785485/is-there-a-unique-android- device-id hoặc http://android-developers.blogspot.com/2011/03/identifying-app-installations.html để có một câu chuyện hoàn chỉnh hơn).
Vì vậy, nếu ứng dụng sử dụng quảng cáo, có một cơ hội công bằng rằng bản thân ứng dụng không thực sự cần quyền READ_PHONE_STATE, chỉ có nhà cung cấp quảng cáo mới làm.