Почему так много приложений требуют разрешения для чтения состояния телефона и личности?

88

Почему так много приложений требуют разрешения для чтения состояния телефона и личности? В частности:

Phone calls
   read phone state and identity

Например, Quickpedia является порталом Википедии, но хочет получить доступ к телефону. Чем это объясняется?

введите описание изображения здесь

Нам Г ВУ
источник
На самом деле это не так, потому что «да, да, у этого приложения есть разрешение отправлять смс и звонить на премиальный номер за вашей спиной», как полагают люди . @ Ответ Кристиана ниже ударил гвоздь по голове! Во многих случаях он является законным, и довольно часто разработчики, как правило, забывают об уменьшении разрешений (возможно, о задержке с первых дней разработки приложения).
t0mm13b
1
@ t0mm13b Я не думаю, что есть большая потребность в ограниченных разрешениях за пределами технарей и фанатов конфиденциальности (включая самих себя). Так что, если приложение производители просто сделать его нормой требовать полного набора разрешений, то потребители будут считать , много разрешений хороши для любого приложения. Правительство не заставляет их использовать минимальные разрешения, и пока рынок не оказывает на них давление. Т.е. приложениям не нужно платить за то, чтобы требовать много разрешений.
user29020

Ответы:

59

Это позволяет приложению считывать уникальный идентификатор (идентификатор телефона с именем IMEI ), связанный с вашим телефоном.

Поэтому он может помочь с защитой от копирования или попыткой отследить количество пользователей.

обкрадывать
источник
3
Посмотрите на этот ТАК вопрос о получении уникального идентификатора телефона. Похоже, что (на данный момент) наиболее надежный способ получения уникального идентификатора с телефона для разработчика требует разрешения Read State State stackoverflow.com/questions/2785485/…
GAThrawn
40

Существует еще одна причина, чем уникальный идентификатор. Я предполагаю, что половина приложений вообще не имеет доступа к этим значениям. Проблема в том, что для более низкой версии до Android 1.5 это разрешение не существует. Каждый может получить доступ к этим значениям без запроса чего-либо.

Поэтому, если вы создаете приложение, совместимое с 1.5, это разрешение будет автоматически добавлено, чтобы эмулировать более низкий уровень безопасности Android 1.5, потому что в большинстве случаев вы можете игнорировать это разрешение, поскольку это, как правило, просто проблема совместимости.

CE4
источник
2
То же самое происходит с доступом к SD-карте.
Денис Николаенко
1
Это правда, но не объясняет, почему приложения для 2.x и выше хотят его так часто.
Иззи
19

Причина в том, что Android 1.5 и более ранние версии не требовали, чтобы приложение специально запрашивало эти разрешения и автоматически предоставляло их. Начиная с Android 1.6, эти разрешения должны быть специально запрошены приложением. Однако если вы укажете, что ваше приложение может работать на устройствах с Android 1.5 и ниже, тогда это разрешение будет добавлено в приложение по умолчанию, и рынок покажет это разрешение в соответствии с запросом приложения.

Итак, в итоге, приложение может не иметь доступа к вашему «состоянию телефона и личности», но если разработчик указал, что его / ее приложение может работать на устройствах с 1,5 или менее, то это разрешение будет показано.


источник
У вас есть ссылка на любую документацию, показывающую это?
GAThrawn
developer.android.com/reference/android/os/… предоставляет полный список идентификаторов целевой версии и изменения в разрешениях (среди прочих различий) между ними.
Стюарт
Правильно. Но, вероятно, больше не «интересно», так как приложения для 1.5 и ниже стали довольно редкими :)
Izzy
18

Этот вопрос беспокоит меня довольно давно. Так что теперь, наконец, я решил докопаться до сути вопроса.

Playstore есть приложение под названием permission.READ_PHONE_STATE , который запрашивает в READ_PHONE_STATEкачестве единственного разрешения, и ничего не делает , чем печать всех данных , которые он может получить доступ с или без его использования. Я установил его на свой LG Optimus 4X , имея рут-версию на Android 4.0.3, и отозвал разрешение с помощью LBE. Результаты довольно интересные, как показывают следующие скриншоты:

Снимок экрана 1 Снимок экрана 2 Скриншот 3
Информация, собранная с разрешения приложения. READ_PHONE_STATE (щелкните изображения, чтобы увеличить варианты)

Как вы можете легко видеть, даже некоторая информация, которую разработчик, хотя и был недоступен без разрешения, была в свободном доступе: мой номер почтового ящика (примечание: да, он правильный; с моим провайдером это ярлык при наборе номера с вашего собственного устройства, поэтому я могу свободно отображать его;) В конце первого скриншота вы видите:

  • CALL_STATE_IDLE, Таким образом, нет телефонных звонков, входящих, исходящих или в процессе. Никакое приложение не нуждается в этом разрешении, чтобы «фонировать» себя на входящих звонках.

Можно даже увидеть, активны ли мобильные данные ( DATA_DISCONNECTEDкогда я делал скриншоты, я был в WiFi, как вы можете видеть в панели уведомлений), в какой стране вы находитесь, ваш провайдер (включая некоторые технические данные о нем), у вас есть SIM-карта или вы находитесь в роуминге.

Единственное , что не доступен , следовательно , идентифицируют данные: IMEI, SIMID, IMSI и свой номер телефона.

Вывод: это разрешение необходимо только для целей идентификации, и ничего больше.

Зачем тогда так много приложений?

  • Для рекламных модулей, скорее всего 1
  • Потому что разработчик подумал, что ему это нужно (на что указывают некоторые ответы здесь) 2
  • Поскольку рассматриваемое приложение предназначено для (также) запуска на Android 1.5 и ниже (это легко узнать, как это указано в Google Play ).

Вероятности именно в этом порядке, ИМХО.


1 примечание к сообщению Дэна в чате :

Политика Google Play теперь запрещает приложениям получать ваш IMEI, чтобы идентифицировать вас в рекламных целях. Все рекламные библиотеки были обновлены для использования «рекламного идентификатора», предоставляемого Google-Play-Services, поэтому обо всех, кто все еще использует IMEI для этой цели, следует сообщать в Google.

Поскольку пользователю трудно сказать, для чего приложение использует IMEI, вам следует сначала попросить разработчика объяснить.


2 Другой разработчик только что указал мне на небольшую разницу: хотя разрешение на чтение текущего состояния вызова не требуется (как я уже указывал), может потребоваться регистрация слушателя , чтобы получать уведомления об изменениях вызова. статус (см .: Обнаружение входящих и исходящих телефонных звонков на Android ). Хотя, кажется, есть способы обрабатывать это автоматически, когда системные вызовы onPause, это может не всегда подходить: подумайте о своем будильнике. Возможно, вы не захотите, чтобы это автоматически прекращалось при входящем звонке, особенно если в вашем профиле отключена громкость звонка.


3 Снова исправление от Дэна : вы получаете дополнительное разрешение по умолчанию, только если «целевая» версия вашего приложения - 1.5. Если вы нацелены на более позднюю версию, но ваша минимальная версия - 1.5, разрешение не будет добавлено автоматически.


Обновления

  1. Интересно, что есть открытая проблема (21504), чтобы разделить READ_PHONE_STATEна то, что необходимо для: а) обнаружения входящих вызовов и связанных с ними (телефонии), а также второго разрешения для идентификационных данных (IMEI, IMSI и т. Д.). Открыт 11/2011, до сих пор не работал. Звезда это если интересно :)
  2. И да, есть способ достичь того же (обнаруживая входящие звонки) без с READ_PHONE_STATEразрешения, как , например , отметил Арно Welzel . Поскольку входящий телефонный звонок вызовет звонок, это событие может быть использовано с onAudioFocusChange(), что не требует какого-либо специального разрешения: если это вызвано этим, приложение может проверить CallState (опять же, без какого-либо специального разрешения), чтобы увидеть, есть ли входящий звонок.
Иззи
источник
Я думаю, что вам нужно удалить часть, где вы говорите, что ни одно приложение не нуждается в этом разрешении для фона на входящие звонки. Вы уже отметили это в сноске 2, но это противоречиво. См. Также developer.android.com/reference/android/telephony/…
Микель
@Mikel Ты частично прав. Использование этого разрешения является «самым простым» способом выполнения задачи, но не единственным. Это можно сделать без, как указал один из разработчиков (это было в чате? К сожалению, я потерял ссылку). Как и во многих других случаях, использование API Google значительно облегчает выполнение некоторых задач (в то же время оно привязывает ваше приложение к эко-системе Google). Я не разработчик, поэтому я не могу сказать, сколько еще работы будет означать другой путь.
Иззи
Я еще не разработчик Android, и я согласен, что некоторые случаи использования покрываются onPause (). Просто сказать, что «ни одному приложению не нужно это разрешение», звучит неправильно для меня. Это больше похоже на то, что «некоторым приложениям может понадобиться это разрешение», например, если они работают в фоновом режиме. Также обратите внимание, что получение широковещательного намерения, безусловно, должно быть более эффективным, чем повторный опрос состояния телефона.
Микель
@Mikel Смотрите мое обновление. И да, «вообще не нужно» может быть немного преувеличено. Может быть, в 0,5% всех текущих запросов это действительно может быть необходимо, без альтернативы #D И еще раз: это onPause()было то, что мы обсуждали в чате для этого! Но использование onAudioFocusChange()может быть даже менее затратным (тогда небольшой опрос может быть проигнорирован).
Иззи
10

Многие издатели рекламы используют это разрешение для получения идентификатора телефона для всех видов отслеживания. Существуют и другие способы получения уникального идентификатора, но, к сожалению, в старых версиях Android они содержат ошибки (история более сложная, см., Например, https://stackoverflow.com/questions/2785485/is-there-a-unique-android- идентификатор устройства или http://android-developers.blogspot.com/2011/03/identifying-app-installations.html для более полной истории).

Таким образом, если приложение использует рекламные объявления, есть большая вероятность, что само приложение на самом деле не нуждается в разрешении READ_PHONE_STATE, только в поставщике рекламы.

Каспер Питерс
источник
1
Это ИМХО главная проблема за всем этим! Хорошо понял.
Иззи