Я почти никогда не даю приложению полный доступ к фотогалерее, если программе нужно всего лишь загрузить аватар, отправить снимок в чат или распознать фотографию. Современному iPhone или Android для подобных задач полный доступ вообще не нужен. Пользователь может разрешить конкретные фотографии или передать один файл через системное окно выбора.
Главный ответ простой. Если приложение получило доступ только к выбранным фотографиям, остальные снимки медиатеки оно просматривать не должно. Если фотография передана через системный выбор файлов, граница ещё жёстче. Программа получает выбранный файл, а не возможность листать галерею. Но выбранная фотография сама по себе может рассказать немало, включая дату съёмки, параметры камеры и при определённых условиях координаты.
Полный доступ, выбранные фото и системный выбор файла
На экране телефона все три сценария выглядят похоже. Пользователь нажимает кнопку с фотографией, видит миниатюры и выбирает снимок. Под капотом работают принципиально разные механизмы.
| Режим | Что получает приложение | Когда оправдан |
|---|---|---|
| Полный доступ | Доступ ко всей разрешённой медиатеке и доступным через интерфейсы системы сведениям о ней | Фоторедакторы, менеджеры галереи, резервное копирование и другие функции, которым действительно нужна библиотека целиком |
| Выбранные фотографии | Постоянный или повторно используемый доступ только к отмеченному пользователем набору | Когда приложение должно возвращаться к нескольким разрешённым снимкам |
| Системный выбор фото | Доступ к файлам, которые пользователь выбрал в системном интерфейсе | Аватар, вложение в сообщение, загрузка фотографии на сайт, распознавание изображения |
На iPhone ограниченная медиатека появилась ещё в iOS 14. Apple описывает механизм как limited Photos library. Пользователь сам формирует набор фотографий и видео, доступных конкретной программе. Для приложения такой набор становится своеобразной урезанной медиатекой.
Например, я разрешил приложению три фотографии из нескольких тысяч. Через PhotoKit программа сможет запросить эти три объекта и работать с ними. Остальные фотографии просто не должны появиться в результатах подобных запросов.
Здесь есть тонкость, которая иногда пугает пользователей. Системное окно выбора фотографии может показать мне всю медиатеку. Из этого легко сделать вывод, что приложение уже видит всю галерею. На самом деле интерфейс рисует сама система. Apple прямо указывает, что системный выбор работает отдельно от приложения, а программа получает только то, что выбрал пользователь.
Именно поэтому ситуация «я вижу все фотографии на экране выбора» не означает «Instagram, мессенджер или другое приложение видит все фотографии».
На Android существуют похожие, но не полностью идентичные механизмы. Photo Picker позволяет выбрать один или несколько файлов без выдачи приложению широкого разрешения на медиатеку. Google описывает такой способ как предпочтительный для задач, где программе нужны отдельные фотографии.
Android 14 добавил ещё один режим, Selected Photos Access. Если приложение запрашивает доступ к фотографиям и видео, пользователь может разрешить не всю коллекцию, а только определённые файлы. Для разработчика механизм связан в том числе с разрешением READ_MEDIA_VISUAL_USER_SELECTED.
Получается два похожих сценария. Photo Picker передаёт приложению фотографии, которые я выбрал для конкретной операции. Selected Photos Access ограничивает доступ приложения к медиатеке набором файлов, который я разрешил видеть.
Может ли приложение узнать, какие фотографии лежат рядом
Представим простую ситуацию. В галерее лежат семейные снимки, сканы документов, банковская карта, фотографии квартиры и один кадр, который я хочу отправить в мессенджер.
Если я выбираю единственный снимок через системный Photo Picker, приложение не получает список соседних фотографий только потому, что они находятся рядом по времени. Программа не получает право незаметно пролистать день до и после выбранного кадра, узнать названия остальных файлов или построить каталог всей медиатеки.
На Android Google формулирует границу предельно ясно. При работе системного Photo Picker приложение может обращаться к выбранным пользователем медиафайлам, а не ко всей библиотеке. Система передаёт программе специальный адрес выбранного объекта, URI, с разрешением на чтение.
Доступ не обязательно заканчивается в ту же секунду. Android позволяет приложению сохранить разрешение на выбранный объект через takePersistableUriPermission(). Поэтому выражение «выбрал один раз» не всегда означает «приложение сможет читать файл только один раз». Граница проходит по набору разрешённых файлов, а не обязательно по времени.
На iPhone режим «Выбранные фотографии» тоже рассчитан не только на одно мгновение. Приложение может снова обращаться к разрешённым объектам, пока пользователь не изменит разрешение.
Отсюда мой подход. Для отправки одной фотографии я предпочитаю системный выбор. Если программе действительно нужно регулярно работать с несколькими снимками, выбираю ограниченный доступ. Полную медиатеку разрешаю только сервисам, чья основная функция без неё теряет смысл.
Материал касается приватности и разрешений мобильных операционных систем. Используйте описанные настройки для законной защиты собственных данных и соблюдайте законодательство своей страны, включая требования, действующие в России. Настройки приватности не следует применять для несанкционированного доступа, слежки, взлома или нарушения правил сервисов.
Что приложение узнает из разрешённой фотографии
Ограниченный доступ защищает остальные фотографии, но выбранный файл перестаёт быть неизвестным для приложения. Здесь часто возникает второй миф. Некоторые воспринимают разрешение одного снимка как передачу исключительно видимых пикселей. На практике фотография может содержать метаданные.
Apple PhotoKit представляет фотографию не просто картинкой. Объект PHAsset может содержать дату создания, размеры, тип медиа, длительность видео, статус избранного и географическое положение, если подобные сведения доступны. Apple перечисляет такие свойства в документации PHAsset.
При ограниченном доступе программа получает подобные сведения только для разрешённых объектов. Apple ещё при представлении функции отдельно показывала, что ограниченная медиатека фильтрует доступ к фотографиям, но не превращает выбранные объекты в обезличенные картинки.
Есть и второй слой метаданных, данные внутри самого файла. JPEG, HEIC и другие форматы могут хранить EXIF с моделью камеры, временем съёмки, параметрами экспозиции, ориентацией и иногда координатами.
Но фраза «приложение всегда получает весь EXIF вместе с GPS» слишком грубая. Система может выдать преобразованную версию изображения или удалить часть чувствительных сведений. Поведение зависит от платформы, способа передачи файла и разрешений.
На Android географические данные защищены отдельно. Приложению, которое хочет читать неотредактированные координаты из медиафайлов общей коллекции, требуется разрешение ACCESS_MEDIA_LOCATION. Google прямо предупреждает, что без согласия пользователя доступ к исходным географическим метаданным не гарантируется.
Есть ещё одна граница, которую часто забывают. Системное разрешение контролирует доступ программы к телефону. После того как пользователь сознательно передал фотографию приложению, программа может загрузить разрешённый снимок на свой сервер, если такая функция предусмотрена сервисом. Дальнейшая судьба файла уже зависит от политики сервиса, архитектуры приложения и настроек аккаунта.
Поэтому ограничение фотогалереи решает конкретную задачу. Оно не позволяет приложению получить лишние фотографии через стандартные интерфейсы ОС. Ограничение не превращает отправленный снимок в секрет после загрузки.
Как проверить и поменять разрешение
На iPhone я проверяю доступ через настройки приватности. Открываю «Настройки», затем «Конфиденциальность и безопасность» и раздел «Фото». В списке можно увидеть приложения, которые запрашивали доступ к медиатеке, и изменить режим. Apple описывает управление разрешениями в руководстве iPhone.
Если приложение получило полный доступ год назад, ничто не мешает заменить его ограниченным. После изменения система начнёт применять новую границу доступа.
На Android путь зависит от производителя телефона и версии оболочки. Обычно нужный пункт находится в настройках приложения среди разрешений для фотографий и видео. На современных версиях Android может предлагаться полный доступ, выбранные фотографии либо запрет.
Я бы насторожился, если калькулятор, магазин, банковское приложение или простой сервис распознавания одного изображения отказывается работать без полной галереи. Иногда у разработчика действительно есть техническая причина. Гораздо чаще программа использует старую схему разрешений или разработчикам удобнее запросить всё сразу.
Для самих разработчиков Google уже двигается в противоположную сторону. Полные разрешения READ_MEDIA_IMAGES и READ_MEDIA_VIDEO предназначены для сценариев, где широкий доступ составляет значимую часть основной функции приложения. Для разовой загрузки фотографии Google рекомендует системный Photo Picker.
Проверить ситуацию можно простым экспериментом. Разрешите приложению одну фотографию, затем откройте встроенную галерею приложения. Если система и программа корректно поддерживают ограниченный режим, приложение должно показывать только разрешённый набор либо снова предлагать системный выбор.
В итоге правило у меня простое. Если программа просит фотографию, я даю фотографию. Если просит несколько фотографий, даю несколько. Вся медиатека должна становиться доступной только тогда, когда функция действительно требует работы со всей библиотекой. Разница в один пункт системного окна определяет, сможет ли приложение увидеть один снимок или получить возможность каталогизировать годы личной жизни.
Что значит «Выбранные фотографии» на iPhone?
Режим разрешает приложению работать только с фотографиями и видео, которые пользователь включил в разрешённый набор. Остальная медиатека через PhotoKit приложению недоступна.
Видит ли приложение всю галерею, если разрешена одна фотография?
При корректной работе системных механизмов ограниченного доступа приложение получает разрешённый файл или разрешённый набор, а не возможность просматривать остальные снимки медиатеки.
Почему системное окно показывает всю галерею?
Галерею в таком случае показывает интерфейс операционной системы. Приложение получает только результат выбора пользователя. Видимые на экране миниатюры не означают, что сторонняя программа получила к ним доступ.
Чем Photo Picker отличается от «Выбранных фотографий»?
Photo Picker предназначен для передачи конкретных файлов через системный интерфейс без широкого разрешения на медиатеку. Режим «Выбранные фотографии» создаёт ограниченный набор объектов, к которому приложение может обращаться повторно.
Получает ли приложение EXIF выбранной фотографии?
Часть метаданных может быть доступна вместе с разрешённым изображением, но конкретный набор зависит от операционной системы, способа передачи и дополнительных разрешений. Особенно строго платформы относятся к географическим координатам.
Может ли приложение узнать дату и место съёмки?
Дата и другие свойства разрешённого объекта могут быть доступны приложению. Геолокация зависит от платформы и разрешений. На Android для чтения неотредактированных координат из общей медиатеки предусмотрено отдельное разрешение ACCESS_MEDIA_LOCATION.
Нужно ли мессенджеру давать доступ ко всем фотографиям?
Для обычной отправки одного или нескольких изображений полный доступ технически не обязателен, если приложение поддерживает системный выбор фотографий. Полная медиатека оправдана только функциями, которым действительно нужен широкий постоянный доступ.
Можно ли потом отменить полный доступ к фотографиям?
Да. Разрешение можно изменить в системных настройках приложения. Пользователь может перейти с полного доступа на выбранные фотографии либо полностью запретить доступ.
