Perché così tante applicazioni richiedono l'autorizzazione per leggere lo stato e l'identità del telefono?


88

Perché così tante applicazioni richiedono l'autorizzazione per leggere lo stato e l'identità del telefono ?. In particolare:

Phone calls
   read phone state and identity

Ad esempio Quickpedia è un portale di Wikipedia, ma vuole accedere al telefono. Qual è la spiegazione per questo?

inserisci qui la descrizione dell'immagine


Non è proprio, per "sì sì, questa app ha questa autorizzazione per inviare sms e suonare un numero premium dietro la schiena" che è ciò che la gente presume . @ La risposta di Christian qui sotto ha colpito l'unghia sulla testa! È legittimo in molti casi e molto spesso gli sviluppatori tendono a dimenticare di ridurre le autorizzazioni (forse un blocco dai primi giorni di sviluppo di un'app).
t0mm13b,

1
@ t0mm13b Non credo che ci sia molta richiesta di autorizzazioni ridotte al di fuori dei tecnici e dei fanatici della privacy (inclusi). Quindi, se i produttori di app rendono solo la norma richiedere la suite completa di autorizzazioni, i consumatori presumeranno che molte autorizzazioni vadano bene per qualsiasi app. Il governo non li sta facendo pressioni affinché utilizzino le autorizzazioni minime e finora il mercato non li sta facendo pressioni. Vale a dire che le app richiedono costi minimi o praticamente nulli.
user29020

Risposte:


59

Consente all'app di leggere un ID univoco (un identificatore telefonico chiamato IMEI ) associato al telefono.

Può quindi aiutare con la protezione dalla copia o il tentativo di tenere traccia del numero di utenti.


3
Vedere questo SO domanda su come ottenere un ID univoco di un telefono cellulare, si presenta come il (attualmente) modo più affidabile per uno sviluppatore per ottenere un ID univoco da un telefono richiede l'autorizzazione di lettura Telefono Stato stackoverflow.com/questions/2785485/...
GAThrawn

40

C'è un altro motivo per questo rispetto all'ID univoco. Immagino che metà delle app non acceda affatto a questi valori. Il problema è che per una versione precedente fino ad Android 1.5 questa autorizzazione non esiste. Tutti potevano accedere a questi valori senza richiedere qualcosa.

Pertanto, se si crea un'app compatibile con 1.5, questa autorizzazione verrà automaticamente aggiunta per emulare la sicurezza inferiore di Android 1.5 a causa di ciò è possibile ignorare questa autorizzazione nella maggior parte dei casi perché tende a essere solo un problema di compatibilità.


2
Lo stesso accade con l'accesso alla scheda SD.
Denis Nikolaenko,

1
È vero, ma non spiega perché le app per 2.x e successive lo vogliono così spesso.
Izzy

19

Il motivo è che Android 1.5 e versioni precedenti non richiedevano all'applicazione di richiedere specificamente tali autorizzazioni e di concederle automaticamente. Da Android 1.6, tali autorizzazioni devono essere specificamente richieste dall'app. Tuttavia, se si specifica che l'applicazione può essere eseguita su dispositivi con Android 1.5 e versioni precedenti, tale autorizzazione viene aggiunta all'applicazione per impostazione predefinita e il mercato mostra tale autorizzazione come richiesta dall'applicazione.

Quindi, in sintesi, l'applicazione potrebbe non accedere effettivamente allo "stato e identità del telefono", ma se lo sviluppatore specifica che la sua applicazione può essere eseguita su dispositivi con 1,5 o meno, verrà mostrata tale autorizzazione.


Hai un link a qualche documentazione che mostra questo?
GAThrawn


developer.android.com/reference/android/os/… fornisce un elenco completo di identificatori della versione di destinazione e le modifiche alle autorizzazioni (tra le altre differenze) tra di loro.
Stewart,

Giusto. Ma probabilmente non è più "interessante", poiché le app per 1.5 e precedenti sono diventate piuttosto rare :)
Izzy

18

Questa domanda mi ha infastidito da un po 'di tempo. Quindi ora, finalmente, ho deciso di arrivare in fondo al problema.

Playstore ha un'app denominata permesso.READ_PHONE_STATE , che richiede READ_PHONE_STATEcome unica autorizzazione e non fa altro che stampare tutti i dati a cui può accedere con o senza utilizzarla. L'ho installato sul mio LG Optimus 4X , essendo rootato su Android 4.0.3 di serie e revocato l'autorizzazione usando LBE. I risultati sono stati piuttosto interessanti, come mostrano i seguenti screenshot:

Schermata 1 Schermata 2 Schermata 3
Le informazioni raccolte dalle app permission.READ_PHONE_STATE (cliccare sulle immagini per le varianti più grandi)

Come puoi facilmente vedere, anche alcune informazioni lo sviluppatore, sebbene inaccessibili senza l'autorizzazione, erano liberamente accessibili: il mio numero di casella vocale (nota: Sì, è quello corretto; con il mio provider è la scorciatoia quando compongo dal tuo dispositivo, quindi posso visualizzalo liberamente;) Alla fine del primo screenshot vedi:

  • CALL_STATE_IDLE. Quindi nessuna telefonata in arrivo, in uscita o in corso. Nessuna app ha bisogno di questa autorizzazione per "inserirsi" nelle chiamate in arrivo.

È anche possibile vedere se i dati mobili sono attivi ( DATA_DISCONNECTED; ero su WiFi quando prendevo gli screenshot, come puoi vedere nella barra di notifica), in quale paese ti trovi, il tuo provider (inclusi alcuni dati tecnici su di lui), se hai una scheda SIM o se sei in roaming.

Le uniche cose non accessibili quindi sono l'identificazione dei dati: IMEI, SIMID, IMSI e il tuo numero di telefono.

Conclusione: questa autorizzazione è necessaria solo a scopo identificativo, nient'altro.

Perché così tante app ne hanno bisogno?

  • Per i moduli pubblicitari, molto probabilmente 1
  • Perché lo sviluppatore ha pensato di averne bisogno (come sottolineato da alcune risposte qui) 2
  • Perché l'app in questione è progettata per (anche) funzionare su Android 1.5 e versioni precedenti (facile da scoprire, come elencato su Google Play ).

Probabilità esattamente in questo ordine, IMHO.


1 Nota del post di Dan sulla chat :

Le norme di Google Play ora vietano alle app di indurre l'IMEI a identificarti a fini pubblicitari. Tutte le librerie di annunci sono state aggiornate ora per utilizzare l '"ID pubblicità" fornito dai servizi Play di Google, quindi tutti quelli che utilizzano ancora l'IMEI per questo scopo devono essere segnalati a Google.

Poiché è difficile per l'utente dire a cosa sta utilizzando l'app IMEI, dovresti chiedere allo sviluppatore di spiegare prima.


2 Un altro sviluppatore mi ha appena indicato una sottile differenza: mentre l'autorizzazione non è necessaria per leggere lo stato della chiamata corrente (come ho sottolineato), potrebbe essere necessario registrare un ascoltatore per essere informato sulle modifiche della chiamata stato (vedi: Rilevamento di chiamate in entrata e in uscita su Android ). Mentre sembrano esserci mezzi per gestirlo automaticamente quando il sistema chiama onPause, potrebbe non essere sempre adatto: pensa alla tua sveglia. Potresti non volerlo interrompere automaticamente durante una chiamata in arrivo, soprattutto quando il tuo profilo è impostato sul volume della suoneria "disattivato".


3 Ancora una correzione da Dan : otterrai l'autorizzazione extra predefinita solo se la versione "target" della tua app è 1.5. Se scegli come target una versione successiva ma la tua versione minima è 1.5, non ottieni l'autorizzazione aggiunta automaticamente.


aggiornamenti

  1. Interessante che ci sia un problema aperto (21504) da dividere READ_PHONE_STATEin ciò che è necessario per a) rilevare chiamate in arrivo e relative (telefonia) e una seconda autorizzazione per i dettagli di identificazione (IMEI, IMSI, ecc.). Aperto l'11 / 2011, non ha ancora funzionato. Stella se interessati :)
  2. E sì, c'è un modo per ottenere lo stesso (rilevare le chiamate in arrivo) senza l' READ_PHONE_STATEautorizzazione, come ad esempio sottolineato da Arno Welzel . Come una chiamata in arrivo innescherebbe la suoneria, che evento potrebbe essere utilizzato con onAudioFocusChange(), che non richiede alcun permesso speciale: se attivato, con questo, l'applicazione potrebbe verificare il CallState (ancora una volta, senza alcun permesso speciale richiesto) per vedere se c'è un chiamata in arrivo.

Penso che sia necessario rimuovere la parte in cui si dice che nessuna app ha bisogno di questa autorizzazione per lo sfondo delle chiamate in arrivo. Hai già sottolineato questo punto nella nota 2, ma è contraddittorio. Vedi anche developer.android.com/reference/android/telephony/…
Mikel,

@Mikel Hai in parte ragione. L'utilizzo di questa autorizzazione è il modo "più semplice" per eseguire l'attività, ma non è l'unico. Può essere fatto senza, come alcuni sviluppatori hanno sottolineato (era in chat? Sfortunatamente, ho perso il link). Come per molte altre cose, l'utilizzo delle API di Google rende alcune cose molto più facili da realizzare (mentre lega anche la tua app all'ecosistema di Google). Non sono uno sviluppatore, quindi non posso dire quanto più lavoro significherebbe nell'altro modo.
Izzy

Non sono ancora uno sviluppatore Android e sono d'accordo che alcuni casi d'uso siano coperti da onPause (). Dire semplicemente che "Nessuna app ha bisogno di questa autorizzazione" mi sembra sbagliato. Sembra più "alcune app potrebbero aver bisogno di questa autorizzazione", ad esempio se vengono eseguite in background. Si noti inoltre che la ricezione dell'intenzione di trasmissione deve sicuramente essere più efficiente rispetto al polling ripetuto dello stato del telefono.
Mikel,

@Mikel Vedi il mio aggiornamento. E sì, "nessuna necessità" potrebbe essere un po 'esagerato. Forse nello 0,5% di tutte le richieste attuali, potrebbe davvero essere necessario, senza alternative disponibili #D E sì ancora: onPause()era quello di cui abbiamo discusso in chat per questo! Ma l'utilizzo onAudioFocusChange()potrebbe essere anche meno dispendioso (il piccolo sondaggio potrebbe essere ignorabile).
Izzy

10

Molti editori di annunci utilizzano questa autorizzazione per ottenere l'ID telefono per tutti i tipi di scopi di tracciamento. Esistono altri modi per ottenere un ID univoco, ma sfortunatamente sono buggy nelle versioni precedenti di Android (la storia è più complicata, vedi ad esempio https://stackoverflow.com/questions/2785485/is-there-a-unique-android- device-id o http://android-developers.blogspot.com/2011/03/identifying-app-installations.html per una storia più completa).

Pertanto, se l'app utilizza annunci pubblicitari, ci sono buone possibilità che l'app stessa non abbia effettivamente bisogno dell'autorizzazione READ_PHONE_STATE, solo il provider di annunci.


1
Questo è IMHO il problema principale dietro tutto! Ben figurato
Izzy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.