Исследуем разрешения в Android 11.

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

One-time permissions

Когда мы даем приложениям разрешение на доступ к данным или выполнение определенных задач в операционной системе, у нас есть несколько вариантов, как именно предоставить этот доступ.

Например, если приложение хочет в момент использования получить доступ к местоположению, я могу предоставить его или запретить. Я всегда относился скептически к этой возможности. Так как приложение может использовать данные о местоположении всегда, когда ему это угодно (В то время пока приложение открыто на смартфоне). Я конечно же могу зайти в раздел настроек приложения и отозвать у него необходимое разрешение на доступ к критическим данным. Но некоторые пользователи могут не знать о такой возможности. В Android 11 появилась возможность выбирать на какое время будет предоставлено разрешение. Будет ли оно предоставлено один раз или же многократно запрашиваться вновь и вновь.

Dialog overlays the app content

Но по каким критериям это определяется? Будет ли доступно текущее разрешение для приложения пока оно находится в работе и если видимость меняется, то оно будет запрошено вновь. Было бы полезно знать когда именно вы запрашиваете разрешение. Когда вы уходите и возвращаетесь к функции для доступа к которой необходимо разрешение, вам может потребоваться проверка на то, доступна ли до сих пор эта функция.

Есть одно условие, при котором все вышесказанное не соответствует действительности. Когда вы запускаете foreground сервис, покинув приложение и вернувшись вновь пользователю не нужно будет предоставлять разрешение заново. Так как оно останется доступным. На диаграмме ниже показано как это работает

С учетом вышеуказанных изменений это не только помогает гарантировать, что приложение получает доступ к этому разрешению только для того, для чего оно требуется, но также значительно сокращает количество решений, принимаемых пользователем, и устраняет ощущение того, что они взяли на себя все эти обязательства за время доступа.

Отказ в разрешениях

В данный момент для предоставления разрешений пользователю мы отображаем диалоги. Например для доступа к местоположению, медиа ресурсам и т.д. Эти диалоги являются отличным способом защиты пользователя от нежелательных действий на его устройстве. К сожалению пользователь может нажать «Не спрашивать снова». Может быть исходя из психологических предпосылок лично я никогда не выбираю подобный вариант. Хотя я нахожу это неприятным, когда приложение каждый раз показывает мне диалог с запросом разрешения на доступ к функциям системы.

Одна из приятных фич Android 11 заключается в том, что когда пользователь многократно выбирает запретить в диалоге запроса разрешений, это рассматривается системой как нажатие «Не спрашивайте снова» в более ранних версиях ОС Android. Это означает что приложения, которые часто запрашивают разрешения не принимаемые пользователем, не будут иметь возможности запрашивать эти разрешения снова и снова. Что является огромным выигрышем в конфиденциальности.

Вот несколько случаев, когда эти правила могут вести себя по разному в зависимости от ситуации. Когда пользователь нажимает кнопку «Назад» это не будет рассматриваться как будто бы пользователь нажал кнопку «Отклонить». Однако, если функция requestPermissions() используется для вывода пользователя на экран системных настроек, это будет расценено как нажатие «Отклонить», если после этого вывода пользователь нажал кнопку «Назад».

Эти изменения помогут уменьшить злоупотребления при запросе разрешений. А также помогут принять более взвешенные решения почему запрашивается разрешение и запрашивать разрешения только по мере необходимости, чтобы уменьшить вероятность получения доступа. тогда когда это не является действительно необходимым.

Разрешение на запрос местоположения в фоновом режиме

По моему мнению, доступ к местоположению всегда был важной точкой конфиденциальности — я никогда не хотел, чтобы приложения постоянно имели доступ к моему местоположению. Тем не менее, это было предоставлено в качестве опции в запросах на разрешение для определения местоположения. При разработке приложений под Android 11 разработчики больше не будут иметь возможность постоянно запрашивать доступ к данным о местоположении из вашего приложения — этот параметр был удален из диалогового окна разрешений в приложении. Если приложению требуется разрешение на доступ к местоположению пользователя все время в фоновом режиме, разрешение должно быть предоставлено на экране настроек системы для вашего приложения. Путем добавления в файл манифеста таких разрешений как

  • ACCESS_BACKGROUND_LOCATION
  • ACCESS_FINE_LOCATION
  • ACCESS_COARSE_LOCATION

После запроса этих разрешений необходимо использовать

requestPermissions(arrayOf(ACCESS_COARSE_LOCATION), REQUEST_CODE_COARSE_LOCATION)

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

  • Использовать requestPermissions() для запроса разрешения ACCESS_BACKGROUND_LOCATION
  • Открыть страницу приложения в настройках

При предоставлении этого вышеупомянутого контекста пользователю важно прояснить, почему вам нужно это разрешение. Если пользователь не предоставит разрешение после того, как оно было запрошено два раза, последующие запросы на разрешение будут игнорироваться. Именно в этот момент вам придется прибегнуть к ручному запуску страницы информации о приложении. Это не очень удобно, поскольку вы не можете перенаправить пользователя непосредственно на экран настроек местоположения, поэтому некоторый контекст будет потерян. Однако, если ваше приложение не достигло предела диалогового окна разрешений, то первым вариантом из вышеприведенного должен быть желаемый маршрут.

requestPermissions(arrayOf(ACCESS_BACKGROUND_LOCATION), REQUEST_BACKGROUND_LOCATION)

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

На приведенном ниже рисунке показана схема последовательности запроса разрешений для фонового запроса местоположения устройства:

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

Помните, запрашивайте разрешения только по мере необходимости и предоставляйте пользователю достаточно контекста относительно того, зачем это разрешение необходимо.

Оригинал статьи

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: