Por que tantos aplicativos exigem permissão para ler o estado e a identidade do telefone?

88

Por que tantos aplicativos requerem permissão para ler o estado e a identidade do telefone? Especificamente:

Phone calls
   read phone state and identity

Por exemplo, a Quickpedia é um portal da Wikipedia, mas deseja acesso ao telefone. Qual a explicação para isso?

insira a descrição da imagem aqui

Nam G VU
fonte
Não é realmente, para "sim, sim, este aplicativo tem essa permissão para enviar sms e tocar um número premium nas suas costas", que é o que as pessoas assumem . @ A resposta de Christian abaixo atingiu a unha na cabeça! É legítimo em muitos casos e, com frequência, os desenvolvedores tendem a esquecer de reduzir as permissões (talvez um atraso nos primeiros dias de desenvolvimento de um aplicativo).
precisa saber é o seguinte
1
@ t0mm13b Não acho que exista muita demanda por permissões reduzidas fora dos técnicos e geeks de privacidade (incluso). Portanto, se os fabricantes de aplicativos fizerem da norma exigir o conjunto completo de permissões, os consumidores assumirão que muitas permissões são boas para qualquer aplicativo. O governo não está pressionando-os a usar permissões mínimas, e até agora o mercado não está pressionando-as. Ou seja, há pouco ou nenhum custo para aplicativos exigirem muitas permissões.
user29020

Respostas:

59

Ele permite que o aplicativo leia um ID exclusivo (um identificador de telefone chamado IMEI ) associado ao seu telefone.

Portanto, pode ajudar na proteção contra cópia ou na tentativa de rastrear o número de usuários.

Roubar
fonte
3
Veja esta pergunta sobre a obtenção de um ID exclusivo de um telefone, parece que a maneira (atualmente) mais confiável para um desenvolvedor obter um ID exclusivo de um telefone requer a permissão Read Phone State stackoverflow.com/questions/2785485/…
GAThrawn
40

Há outro motivo para isso além do ID exclusivo. Eu acho que metade dos aplicativos não acessa esses valores. O problema é que, para uma versão inferior ao Android 1.5, essa permissão não existe. Todos poderiam acessar esses valores sem solicitar algo.

Portanto, se você criar um aplicativo compatível com a versão 1.5, essa permissão será adicionada automaticamente para simular a menor segurança do Android 1.5, pois você poderá ignorá-la na maioria das vezes, pois tende a ser apenas um problema de compatibilidade.

ce4
fonte
2
O mesmo acontece com o acesso ao cartão SD.
Denis Nikolaenko
1
Isso é verdade - mas não explica por que os aplicativos para a versão 2.x e posterior o desejam com tanta frequência.
Izzy
19

O motivo é que o Android 1.5 e versões anteriores não exigiam que o aplicativo solicitasse especificamente essas permissões e as concediam automaticamente. Desde o Android 1.6, essas permissões devem ser solicitadas especificamente pelo aplicativo. No entanto, se você especificar que seu aplicativo pode ser executado em dispositivos com Android 1.5 ou menos, essa permissão será adicionada ao aplicativo por padrão e o mercado mostrará essa permissão como solicitada pelo aplicativo.

Portanto, em resumo, o aplicativo pode não estar realmente acessando seu "estado e identidade do telefone", mas se o desenvolvedor especificar que seu aplicativo pode ser executado em dispositivos com 1,5 ou menos, essa permissão será mostrada.


fonte
Você tem um link para alguma documentação mostrando isso?
GAThrawn
developer.android.com/reference/android/os/… fornece uma lista completa dos identificadores de versão de destino e as alterações nas permissões (entre outras diferenças) entre eles.
31313 Stewart
Direito. Mas, provavelmente, não mais "interessante", como aplicativos para 1,5 e menor tem :) bastante raro
Izzy
18

Esta questão está me incomodando há algum tempo. Então agora, finalmente, decidi ir ao fundo da questão.

O Playstore tem um aplicativo chamado permission.READ_PHONE_STATE , que solicita READ_PHONE_STATEcomo a única permissão e não faz nada além de imprimir todos os dados que pode acessar com ou sem usá-lo. Instalei isso no meu LG Optimus 4X , enraizado no Android 4.0.3, e revoguei a permissão usando o LBE. Resultados bastante interessantes, como mostram as seguintes capturas de tela:

Captura de tela 1 Captura de tela 2 Captura de tela 3
Informações coletadas pela permissão do aplicativo.READ_PHONE_STATE (clique nas imagens para obter variantes maiores)

Como você pode ver facilmente, mesmo algumas informações do desenvolvedor, embora inacessíveis sem a permissão, eram acessíveis gratuitamente: o número da minha caixa de correio (observação: Sim, é o correto; com o meu provedor esse é o atalho ao discar do seu próprio dispositivo, para que eu possa exibi-lo livremente;) No final da primeira captura de tela, você vê:

  • CALL_STATE_IDLE. Portanto, nenhuma ligação é recebida, efetuada ou em andamento. Nenhum aplicativo precisa dessa permissão para se "background" próprio nas chamadas recebidas.

É até possível ver se os dados móveis estão ativos ( DATA_DISCONNECTED; eu estava no WiFi ao tirar as capturas de tela, como você pode ver na barra de notificação), em qual país você está, seu provedor (incluindo alguns dados técnicos sobre ele), se você está usando um cartão SIM ou em roaming.

As únicas coisas que não estão acessíveis são os dados de identificação: IMEI, SIMID, IMSI e seu próprio número de telefone.

Conclusão: Essa permissão é necessária apenas para fins de identificação, nada mais.

Por que tantos aplicativos precisam?

  • Para os módulos de anúncios, provavelmente 1
  • Porque o desenvolvedor pensou que ele precisava (como indicado por algumas respostas aqui) 2
  • Como o aplicativo em questão foi projetado para (também) ser executado no Android 1.5 e abaixo (fácil de descobrir, conforme listado no Google Play ).

Probabilidades exatamente nessa ordem, IMHO.


1 Nota da postagem de Dan no chat :

A política do Google Play agora proíbe que os aplicativos obtenham seu IMEI para identificá-lo para fins de publicidade. Todas as bibliotecas de anúncios foram atualizadas agora para usar o "ID de publicidade" fornecido pelo Google-Play-Services. Portanto, qualquer um que ainda use o IMEI para essa finalidade deve ser relatado ao Google.

Como é difícil para o usuário saber para que o aplicativo está usando o IMEI, peça ao desenvolvedor que explique primeiro.


2 Outro desenvolvedor acabou de me apontar uma diferença sutil: embora a permissão não seja necessária para ler o status da chamada atual (como eu indiquei), pode ser necessário registrar um ouvinte para ser notificado sobre as alterações da chamada status (consulte: Detectando chamadas telefônicas recebidas e efetuadas no Android ). Embora pareça haver meios de lidar com isso automaticamente quando o sistema ligar onPause, isso nem sempre é adequado: pense no seu despertador. Talvez você não queira que isso seja interrompido automaticamente em uma chamada recebida - especialmente quando o seu perfil estiver definido para o volume da campainha "mudo".


3 Mais uma vez, uma correção de Dan : você obtém a permissão extra padrão se a versão "alvo" do seu aplicativo for 1,5. Se você segmentar uma versão posterior, mas a sua versão mínima for 1,5, você não receberá a permissão automaticamente.


Atualizações

  1. Interessante que haja um problema em aberto (21504) a ser dividido READ_PHONE_STATEno que é necessário para: a) detectar chamadas recebidas e relacionadas (telefonia), e uma segunda permissão para os detalhes de identificação (IMEI, IMSI, etc.). Aberto em 11/2011, ainda não foi trabalhado. Marque se estiver interessado :)
  2. E sim, existe uma maneira de conseguir o mesmo (detectar chamadas recebidas) sem a READ_PHONE_STATEpermissão, como por exemplo, apontado por Arno Welzel . Como uma ligação recebida acionaria a campainha, esse evento poderia ser usado onAudioFocusChange(), o que não requer nenhuma permissão especial: se acionado por isso, o aplicativo poderia verificar o CallState (novamente, sem nenhuma permissão especial necessária) para ver se há um chamada recebida.
Izzy
fonte
Eu acho que você precisa remover a parte em que você diz que nenhum aplicativo precisa dessa permissão para obter informações sobre as chamadas recebidas. Você já fez esse ponto na nota 2, mas é contraditório. Veja também developer.android.com/reference/android/telephony/…
Mikel
@ Mikel Você está parcialmente certo. Usar esta permissão é a maneira "mais fácil" de realizar a tarefa, mas não é a única. Isso pode ser feito sem, como alguns desenvolvedores apontaram (foi no bate-papo? Infelizmente, perdi o link). Como em muitas coisas, o uso das APIs do Google facilita muito algumas coisas (enquanto também vincula seu aplicativo ao sistema ecológico do Google). Como não sou desenvolvedor, não posso dizer quanto mais trabalho significaria.
Izzy
Ainda não sou desenvolvedor de Android e concordo que parece que alguns casos de uso são cobertos por onPause (). Apenas dizer que "Nenhum aplicativo precisa dessa permissão" parece errado para mim. Soa mais como "alguns aplicativos podem precisar dessa permissão", por exemplo, se executados em segundo plano. Observe também que o recebimento da intenção de transmissão certamente deve ser mais eficiente do que pesquisar repetidamente o estado do telefone.
Mikel
@ Mikel Veja minha atualização. E sim, "não há necessidade" pode ser um pouco exagerado. Talvez em 0,5% de todos os pedidos atuais possa ser realmente necessário, sem alternativa disponível #D E sim: novamente: onPause()foi o que discutimos no chat para isso! Mas o uso onAudioFocusChange()pode ser menos caro ainda (a pequena votação então pode ser ignorável).
Izzy
10

Muitos editores de anúncios usam essa permissão para obter o ID do telefone para todos os tipos de fins de rastreamento. Existem outras maneiras de obter um ID exclusivo, mas infelizmente eles são problemáticos nas versões mais antigas do Android (a história é mais complicada, consulte por exemplo, https://stackoverflow.com/questions/2785485/is-there-a-unique-android- ID do dispositivo ou http://android-developers.blogspot.com/2011/03/identifying-app-installations.html para uma história mais completa).

Portanto, se o aplicativo usa anúncios, é bem provável que o aplicativo em si não precise da permissão READ_PHONE_STATE, apenas o provedor do anúncio.

Kasper Peeters
fonte
1
Essa é a IMHO a principal questão por trás de tudo! Bem figurado.
Izzy