Tại sao nhiều ứng dụng yêu cầu quyền đọc trạng thái và nhận dạng điện thoại?


88

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ì?

nhập mô tả hình ảnh ở đây


Nó không thực sự, đối với "yeah yeah, ứng dụng này có quyền gửi sms và gọi một số cao cấp sau lưng bạn", đó là những gì mọi người giả định . Câu trả lời của Christian dưới đây đã đánh vào đầu đinh! Nó là hợp pháp trong rất nhiều trường hợp, và khá thường xuyên, các nhà phát triển có xu hướng quên đi việc giảm bớt các quyền (có lẽ là sự nắm giữ từ những ngày đầu phát triển ứng dụng).
t0mm13b

1
@ t0mm13b Tôi không nghĩ rằng có nhiều nhu cầu về việc giảm quyền ngoài công nghệ và chuyên viên máy tính riêng tư (bao gồm cả). Vì vậy, nếu các nhà sản xuất ứng dụng chỉ làm cho nó trở thành tiêu chuẩn để yêu cầu bộ quyền đầy đủ, thì người tiêu dùng sẽ cho rằng rất nhiều quyền là tốt cho bất kỳ ứng dụng nào. Chính phủ không gây áp lực cho họ sử dụng các quyền tối thiểu và cho đến nay thị trường không gây áp lực cho họ. Tức là có rất ít chi phí cho các ứng dụng để yêu cầu nhiều quyền.
user29020

Câu trả lời:


59

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.


3
Xem này SO câu hỏi về nhận được một ID duy nhất của một chiếc điện thoại, trông giống như (hiện tại) cách đáng tin cậy nhất đối với một nhà phát triển để có được một ID duy nhất từ một điện thoại yêu cầu sự cho phép đọc Điện thoại Nhà nước stackoverflow.com/questions/2785485/...
GAThrawn

40

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.


2
Điều tương tự cũng xảy ra với truy cập thẻ SD.
Denis Nikolaenko

1
Điều đó đúng - nhưng không giải thích được tại sao các ứng dụng cho 2.x trở lên lại muốn nó thường xuyên như vậy.
Izzy

19

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ị.


Bạn đã có một liên kết đến bất kỳ tài liệu cho thấy điều này?
GAThrawn


developer.android.com/reference/android/os/, cung cấp danh sách đầy đủ các mã định danh phiên bản đích và các thay đổi về quyền (trong số các khác biệt khác) giữa chúng.
Stewart

Đúng. Nhưng có lẽ không còn "thú vị" nữa, vì các ứng dụng cho 1,5 và thấp hơn trở nên khá hiếm :)
Izzy

18

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_STATEnhư 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:

Ảnh chụp màn hình 1 Ảnh chụp màn hình 2 Ảnh chụp màn hình 3
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 đó?

  • Đối với các mô-đun quảng cáo, rất có thể là 1
  • Bởi vì nhà phát triển nghĩ rằng anh ta cần nó (như được chỉ ra bởi một số câu trả lời ở đây) 2
  • Bởi vì ứng dụng được đề cập được thiết kế để (cũng) chạy trên Android 1.5 trở xuống (dễ tìm hiểu, như được liệt kê trên Google Play ).

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.


Cập nhật

  1. Điều thú vị là có một vấn đề mở (21504) để phân chia READ_PHONE_STATEnhữ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 :)
  2. Và vâng, có một cách để đạt được điều tương tự (phát hiện các cuộc gọi đến) mà không cần sự READ_PHONE_STATEcho 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.

Tôi nghĩ bạn cần xóa phần mà bạn nói 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. Bạn đã đưa ra quan điểm này trong chú thích 2, nhưng nó mâu thuẫn. Xem thêm developer.android.com/reference/android/telephony/
mài

@Mikel Bạn đúng một phần. Sử dụng quyền này là cách "dễ nhất" để hoàn thành nhiệm vụ, nhưng đó không phải là cách duy nhất. Nó có thể được thực hiện mà không có, như một số nhà phát triển đã chỉ ra (có phải trên trò chuyện không? Thật không may, tôi đã mất liên kết). Cũng như nhiều thứ khác, sử dụng API của Google giúp thực hiện một số điều dễ dàng hơn nhiều (trong khi nó cũng liên kết ứng dụng của bạn với hệ sinh thái Google). Tôi không phải là nhà phát triển, vì vậy tôi không thể nói được bao nhiêu công việc theo cách khác có nghĩa.
Izzy

Tôi cũng chưa phải là nhà phát triển Android và tôi đồng ý rằng có vẻ như một số trường hợp sử dụng được bảo vệ bởi onPause (). Chỉ cần nói rằng "Không có ứng dụng nào cần sự cho phép này" nghe có vẻ sai đối với tôi. Nghe có vẻ giống như "một số ứng dụng có thể cần sự cho phép này", ví dụ nếu chúng chạy trong nền. Cũng lưu ý rằng việc nhận ý định phát sóng chắc chắn phải hiệu quả hơn nhiều lần bỏ phiếu trạng thái điện thoại.
Mikel

@Mikel Xem cập nhật của tôi. Và vâng, "không cần gì cả" có thể hơi cường điệu. Có thể trong 0,5% của tất cả các yêu cầu hiện tại, nó thực sự có thể cần thiết, không có sẵn thay thế #D Và có một lần nữa: 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).
Izzy

10

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.


1
Đó là IMHO vấn đề chính đằng sau tất cả! Cũng hình.
Izzy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.