Чтобы повысить качество приложения и защитить конфиденциальность пользователей, рекомендуем запрашивать как можно меньше разрешений. Это помогает пользователям находить и использовать качественные приложения, которые обеспечивают безопасную среду.
Запрос разрешений у пользователей прерывает путь пользователя, и они могут отклонить ваш запрос. Кроме того, каждый раз, когда вы запрашиваете новое разрешение, вам необходимо проверять, как приложение запрашивает и передает пользовательские данные. Некоторые разрешения на доступ к конфиденциальной информации и API требуют указать в приложении сведения о доступе к данным, их сборе, использовании и передаче.
Есть несколько способов минимизировать использование разрешений:
- По возможности используйте альтернативные варианты с меньшей точностью, например запрашивайте данные о приблизительном местоположении вместо точного, если в последнем нет необходимости.
- Используйте инструменты выбора и альтернативные разрешения, которые предоставляют доступ к конфиденциальной информации в определенных обстоятельствах, например выбор фотографий, инструмент выбора контактов и кнопку геолокации.
- Вызовите API, которые позволяют приложению выполнять выбранную функцию без объявления разрешений.
- Для выполнения функций вызывайте определенные намерения или обработчики событий, а не объявляйте разрешения.
- В системе есть встроенные контракты для разных операций с файлами, а также поддерживаются пользовательские контракты.
Если вам необходимо объявить разрешение, всегда уважайте решение пользователя и обеспечьте постепенное сокращение возможностей приложения.
На этой странице описаны несколько способов использования, которые ваше приложение может реализовать без запроса разрешений.
Показать места поблизости
Приложению может потребоваться приблизительное местоположение пользователя. Это позволяет показывать информацию с учетом местоположения, например о ресторанах поблизости. Для каждого случая использования местоположения есть свой уникальный набор требований к точности и продолжительности доступа, причем в большинстве случаев требуется лишь приблизительное местоположение пользователя. Если вы хотите добавить в приложение функции, которые зависят от местоположения пользователя, ознакомьтесь с информацией ниже. Она поможет вам выбрать подходящий подход к доступу.
- Если [основные] функции приложения требуют точного местоположения, но только в определенный момент, например для поиска поблизости или автозаполнения адреса в электронной торговле, лучше всего использовать кнопку геолокации. Это позволит вам не запрашивать разрешение на доступ к данным о местоположении и упростит работу с приложением для пользователей.
- Если приложению часто требуется доступ к данным о местоположении, запросите разрешение
ACCESS_COARSE_LOCATION. Разрешение дает приложению доступ к примерному местоположению устройства, как описано в разделе о точности приблизительного местоположения. - Если приложению требуется доступ к местоположению реже или только один раз, попросите пользователя ввести адрес или почтовый индекс.
В других случаях может потребоваться более точная оценка местоположения устройства.
Только в этих случаях можно запрашивать разрешение ACCESS_FINE_LOCATION.
Как создавать файлы и работать с ними
Android позволяет создавать файлы и получать к ним доступ без необходимости объявлять какие-либо разрешения, связанные с хранилищем или датчиками.
Как открывать медиафайлы
В вашем приложении пользователи могут выбирать фотографии и видео, например чтобы прикрепить их к сообщению или установить в качестве фото профиля.
Чтобы поддерживать эту функцию, используйте инструмент выбора фотографий. Для использования инструмента выбора фотографий не требуются динамические разрешения. Когда пользователь выбирает в окне выбора фотографий изображения или видео, которыми хочет поделиться с вашим приложением, система предоставляет временный доступ на чтение к URI, связанному с выбранными медиафайлами.
Если приложению требуется доступ к медиафайлам без использования окна выбора фотографий, вам не нужно объявлять разрешения на доступ к хранилищу.
- Если вы работаете с медиафайлами, созданными вашим приложением, у него уже есть доступ к ним в хранилище медиафайлов.
- Если вы получаете доступ к медиафайлам, созданным другими приложениями, используйте Storage Access Framework.
Открыть документы
В приложении могут показываться документы, созданные пользователем в нем или в другом приложении. Распространенный пример – текстовый файл.
В этом случае объявляйте READ_EXTERNAL_STORAGE только для совместимости со старыми устройствами. Присвойте свойству android:maxSdkVersion значение 28.
В зависимости от того, в каком приложении создан документ, выполните одно из следующих действий:
- Если пользователь создал документ в вашем приложении, получите к нему прямой доступ.
- Если пользователь создал документ в другом приложении, используйте Storage Access Framework.
Сделать снимок
Пользователи могут делать снимки в вашем приложении, используя предустановленное системное приложение камеры.
В этом случае не объявляйте разрешение CAMERA. Вместо этого вызовите действие намерения ACTION_IMAGE_CAPTURE.
Запись видео
Пользователи могут записывать видео в вашем приложении, используя предустановленное системное приложение камеры.
В этом случае не объявляйте разрешение CAMERA. Вместо этого вызовите действие намерения ACTION_VIDEO_CAPTURE.
Определите устройство, на котором запущен экземпляр вашего приложения.
Экземпляру приложения может потребоваться информация о том, на каком устройстве он запущен. Это полезно для приложений, у которых есть настройки или сообщения для определенных устройств, например разные плейлисты для телевизоров и носимых устройств.
В этом случае не получайте доступ к IMEI-коду устройства напрямую. Начиная с Android 10, это невозможно. Вместо этого выполните одно из следующих действий:
- Получите уникальный идентификатор устройства для экземпляра приложения с помощью библиотеки Instance ID.
- Создайте собственный идентификатор, который будет использоваться в хранилище вашего приложения. Используйте базовые системные функции, например
randomUUID().
Как подключить устройство по Bluetooth
Приложение может предлагать расширенные возможности, передавая данные на другое устройство по Bluetooth.
Чтобы поддерживать эту функцию, не объявляйте разрешения ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION или BLUETOOTH_ADMIN. Вместо этого используйте подключение дополнительных устройств.
Автоматически вводить номер платежной карты
В сервисах Google Play есть библиотека, которая позволяет автоматически вводить номер платежной карты. Вместо того чтобы запрашивать разрешение CAMERA, вы можете использовать библиотеку распознавания дебетовых и кредитных карт.
Управление звонками и текстовыми сообщениями
В Android и сервисах Google Play есть библиотеки, которые позволяют управлять телефонными звонками и текстовыми сообщениями без необходимости объявлять какие-либо разрешения, связанные с телефонными звонками или SMS-сообщениями.
Как автоматически вводить одноразовый код доступа
Чтобы упростить двухфакторную аутентификацию, приложение может автоматически вводить одноразовый код доступа, отправленный на устройство пользователя для подтверждения личности.
Чтобы обеспечить поддержку этой функции на устройствах с сервисами Google Play, не объявляйте разрешение READ_SMS. Вместо этого используйте SMS Retriever API.
Если приложение предназначено для Android 8.0 (уровень API 26) или более поздней версии, на других устройствах создайте токен приложения с помощью createAppSpecificSmsToken(). Передайте этот токен другому приложению или сервису, который может отправить SMS для подтверждения.
Как подтвердить номер телефона пользователя
Чтобы приложение могло безопасно подтверждать номера телефонов пользователей, рекомендуется использовать Digital Credentials API. Используя этот API напрямую или через совместимые агрегаторы, вы можете надежно проверять информацию об аккаунтах пользователей, не запрашивая разрешения на доступ к конфиденциальным данным на устройстве. Если вы используете Firebase, ознакомьтесь с подтверждением номера телефона в Firebase.
Вы также можете подтвердить номер телефона пользователя с помощью одноразового кода доступа, используя SMS Retriever API.
Автоматически вводить номер телефона пользователя
Чтобы повысить эффективность продаж или поддержки, ваше приложение может позволить пользователю автоматически вводить номер телефона своего устройства.
Чтобы обеспечить поддержку этой функции на устройствах с сервисами Google Play, не объявляйте разрешение READ_PHONE_STATE. Вместо этого используйте библиотеку Phone Number Hint.
Фильтровать телефонные звонки
Чтобы минимизировать ненужные прерывания для пользователя, ваше приложение может фильтровать телефонные звонки на предмет спама.
Чтобы поддерживать эту функцию, не объявляйте разрешение READ_PHONE_STATE.
Вместо этого используйте CallScreeningService API.
совершать телефонные звонки;
В вашем приложении может быть предусмотрена возможность позвонить по номеру телефона, указанному в контактной информации.
Для поддержки этой функции используйте действие intent ACTION_DIAL вместо действия ACTION_CALL. ACTION_CALL требует разрешения CALL_PHONE, которое запрашивается при установке. Это не позволяет устанавливать приложение на устройства, с которых нельзя совершать исходящие вызовы, например на некоторые планшеты.
Приостановка воспроизведения медиаконтента при прерывании работы приложения
Если пользователь получает телефонный звонок или срабатывает настроенный пользователем будильник, ваше приложение должно приостановить воспроизведение мультимедиа, пока оно не восстановит фокус звука.
Чтобы поддерживать эту функцию, не объявляйте разрешение READ_PHONE_STATE.
Вместо этого реализуйте обработчик событий onAudioFocusChange(), который запускается автоматически, когда система переключает аудиофокус. Подробнее о том, как реализовать фокус на аудио…
Сканируйте штрихкоды
Android поддерживает Google Code Scanner API на базе сервисов Google Play. С помощью этого API можно сканировать штрихкоды, не запрашивая разрешение на доступ к камере. Этот API помогает защитить конфиденциальность пользователей и снижает вероятность того, что вам потребуется создавать собственный интерфейс для сканирования штрихкодов.
API сканирует штрихкод и возвращает результаты в приложение. Изображения обрабатываются на устройстве, и Google не хранит данные или результаты сканирования.
Если вашему приложению требуется поддержка сложных сценариев использования или форматов штрихкодов, а также если вам нужен собственный интерфейс, используйте API сканирования штрихкодов ML Kit.
Сбросить неиспользуемые разрешения
В Android есть несколько способов сбросить неиспользуемые динамические разрешения до состояния по умолчанию (запрещено).
Ознакомьтесь с рекомендациями по дизайну.
Запрос динамических разрешений
Если вы определили, что вашему приложению нужно объявлять и запрашивать динамические разрешения, следуйте приведенным ниже инструкциям.
Ознакомьтесь с рекомендациями по дизайну.
Объясните, зачем приложению нужны разрешения
При использовании requestPermissions() показывается диалоговое окно, в котором указано, какие разрешения запрашивает приложение, но не объясняется, зачем они нужны. Это может запутать пользователя.
Подробные сведения и рекомендации о том, как и когда показывать это диалоговое окно, можно найти в руководстве по дизайну.
Как обрабатывать отказы в разрешении
Приложение должно помогать пользователям понять последствия отказа в разрешении до и после того, как они это сделают.
Ознакомьтесь с рекомендациями по дизайну.