Dlaczego tak wiele aplikacji wymaga pozwolenia na odczyt stanu telefonu i tożsamości? Konkretnie:
Phone calls
read phone state and identity
Na przykład Quickpedia to portal Wikipedii, ale chce mieć dostęp do telefonu. Jakie jest tego wytłumaczenie?
permissions
privacy
Nam G VU
źródło
źródło
Odpowiedzi:
Pozwala aplikacji na odczyt unikalnego identyfikatora (identyfikatora telefonu o nazwie IMEI ) powiązanego z telefonem.
Może zatem pomóc w ochronie przed kopiowaniem lub w próbie śledzenia liczby użytkowników.
źródło
Jest inny powód niż unikalny identyfikator. Sądzę, że połowa aplikacji w ogóle nie ma dostępu do tych wartości. Problem polega na tym, że w przypadku wersji niższej niż Android 1.5 to uprawnienie nie istnieje. Każdy mógł uzyskać dostęp do tych wartości bez konieczności żądania czegoś.
Dlatego jeśli utworzysz aplikację zgodną z wersją 1.5, to uprawnienie zostanie automatycznie dodane w celu emulacji niższego poziomu bezpieczeństwa Androida 1.5, dlatego możesz zignorować to zezwolenie w większości przypadków, ponieważ jest to po prostu problem ze zgodnością.
źródło
Powodem jest to, że Android 1.5 i wcześniejsze nie wymagały od aplikacji konkretnego żądania tych uprawnień i automatycznego przyznawania ich. Od wersji Androida 1.6 te uprawnienia muszą być wyraźnie wymagane przez aplikację. Jeśli jednak określisz, że twoja aplikacja może działać na urządzeniach z Androidem 1.5 lub starszym, to uprawnienie jest dodawane do aplikacji domyślnie, a rynek pokazuje to zezwolenie jako wymagane przez aplikację.
Podsumowując, aplikacja może nie uzyskiwać dostępu do Twojego „stanu telefonu i tożsamości”, ale jeśli programista określi, że jego aplikacja może działać na urządzeniach z wersją 1.5 lub niższą, zostanie wyświetlone uprawnienie.
źródło
To pytanie niepokoi mnie od dłuższego czasu. Więc teraz w końcu postanowiłem przejść do sedna problemu.
Playstore ma aplikację o nazwie uprawnienie READ_PHONE_STATE , która żąda
READ_PHONE_STATE
jako jedyne uprawnienie i nie robi nic poza drukowaniem wszystkich danych, do których może uzyskiwać dostęp przy użyciu lub bez niego. Zainstalowałem to na moim LG Optimus 4X , będąc zrootowanym na standardowym Androidzie 4.0.3, i cofnąłem uprawnienia za pomocą LBE. Wyniki są dość interesujące, jak pokazują poniższe zrzuty ekranu:Informacje zebrane za zgodą aplikacji.READ_PHONE_STATE (kliknij zdjęcia, aby wyświetlić większe warianty)
Jak łatwo zauważyć, nawet niektóre informacje, które były niedostępne bez pozwolenia, były ogólnodostępne: mój numer skrzynki pocztowej (uwaga: tak, to jest poprawny; z moim dostawcą jest skrótem podczas wybierania z twojego urządzenia, więc mogę dowolnie go wyświetlaj;) Na końcu pierwszego zrzutu ekranu zobaczysz:
CALL_STATE_IDLE
. Dlatego nie ma połączeń przychodzących, wychodzących ani w toku. Żadna aplikacja nie potrzebuje tego uprawnienia do „tła” podczas połączeń przychodzących.Możliwe jest nawet sprawdzenie, czy dane mobilne są aktywne (
DATA_DISCONNECTED
podczas robienia zrzutów ekranu korzystałem z Wi-Fi, jak widać na pasku powiadomień), w jakim kraju jesteś, dostawcy (w tym niektórych danych technicznych na jego temat), czy masz kartę SIM lub korzystasz z roamingu.Stąd nie są dostępne tylko dane identyfikujące: IMEI, SIMID, IMSI i własny numer telefonu.
Wniosek: Zezwolenie to jest potrzebne tylko do celów identyfikacyjnych, nic więcej.
Dlaczego więc tak wiele aplikacji tego potrzebuje?
Prawdopodobieństwa w dokładnie tej kolejności, IMHO.
1 Uwaga posta Dana na czacie :
Ponieważ użytkownikowi trudno jest powiedzieć, do czego aplikacja używa IMEI, należy najpierw poprosić programistę o wyjaśnienie.
2 Inny programista właśnie wskazał mi subtelną różnicę: chociaż pozwolenie nie jest potrzebne do odczytania aktualnego stanu połączenia (jak już wskazałem), może być konieczne zarejestrowanie słuchacza , aby otrzymywać powiadomienia o zmianach połączenia status (patrz: Wykrywanie przychodzących i wychodzących połączeń telefonicznych na Androidzie ). Chociaż wydaje się, że istnieją sposoby, aby poradzić sobie z tym automatycznie podczas wywoływania systemu
onPause
, może nie zawsze być odpowiednie: pomyśl o swoim budziku. Może nie być konieczne automatyczne zatrzymanie tego połączenia przychodzącego - szczególnie nie wtedy, gdy w profilu ustawiono „wyciszenie” głośności dzwonka.3 Ponownie poprawka od Dana : Domyślne dodatkowe pozwolenie otrzymasz tylko wtedy, gdy „docelowa” wersja aplikacji to 1.5. Jeśli celujesz w późniejszą wersję, ale twoja minimalna wersja to 1.5, nie otrzymasz automatycznie dodanego pozwolenia.
Aktualizacje
READ_PHONE_STATE
na to, co jest potrzebne, aby a) wykryć połączenia przychodzące i powiązane (telefonia), a także drugie pozwolenie na dane identyfikacyjne (IMEI, IMSI itp.). Otwarty 11/2011, wciąż nie pracował. Oznacz to gwiazdką, jeśli jesteś zainteresowanyREAD_PHONE_STATE
zgody, jak np podkreślił Arno Welzel . Jak przychodzące połączenie telefoniczne spowodowałaby dzwonek, że zdarzenie może być stosowany zonAudioFocusChange()
, który nie wymaga żadnego specjalnego pozwolenia: jeśli wywołany przez to, że aplikacja będzie mogła sprawdzić CallState (ponownie, bez specjalnego zezwolenia wymagane), aby zobaczyć, czy jest tam połączenie przychodzące.źródło
onPause()
to było to, o czym rozmawialiśmy na czacie! Ale używanieonAudioFocusChange()
może być nawet mniej kosztowne (wtedy małe sondowanie może być niezauważalne).Wielu wydawców reklam korzysta z tego uprawnienia, aby uzyskać identyfikator telefonu do wszelkiego rodzaju celów śledzenia. Istnieją inne sposoby uzyskania unikalnego identyfikatora, ale niestety są one wadliwe w starszych wersjach Androida (historia jest bardziej skomplikowana, patrz np. Https://stackoverflow.com/questions/2785485/is-there-a-unique-android- identyfikator urządzenia lub http://android-developers.blogspot.com/2011/03/identifying-app-installations.html, aby uzyskać pełniejszą historię).
Jeśli więc aplikacja korzysta z reklam, istnieje spora szansa, że sama aplikacja nie potrzebuje uprawnienia READ_PHONE_STATE, tylko dostawca reklam.
źródło