Как определить включенное разрешение местоположения для реагирования на родную iOS и запросить разрешение, если оно не выбрано?

Описание проблемы Я работаю над приложением для отслеживания и хочу включить разрешение на определение местоположения "всегда", когда пользователь запускает службу отслеживания. Здесь я строю путь, пройденный пользователем, поэтому я хочу определять широту и долготу, даже если приложение является фоновым. Теперь проблема возникает, когда пользователь выбирает параметр местоположения как «во время использования приложения», при этом я не получаю точную широту и долготу для пользователя, когда приложение находится в фоновом режиме и создает проблемы. В этом случае я не могу построить правильный трек для пользователя.

Для этого я добавил только

"NSLocationAlwaysUsageDescription"

но генерирует ошибку:

Это приложение попыталось получить доступ к конфиденциальным данным без описания использования. Info.plist приложения должен содержать ключи NSLocationAlwaysAndWhenInUseUsageDescription и NSLocationWhenInUseUsageDescription со строковыми значениями, объясняющими пользователю, как приложение использует эти данные.

Чтобы решить эту проблему, мне нужно добавить все разрешения, которые в моем случае работают нормально. Но теперь пользователь получает три варианта при включении location :: «разрешать при использовании приложения», «всегда разрешать» и «не разрешать». Здесь возникает проблема.

Требование Я хочу ограничить пользователя включением только опции определения местоположения «всегда», но теперь во всплывающем окне запроса местоположения отображаются три варианта. Есть ли какой-либо способ определить выбранную пользователем опцию, если пользователь выберет любую опцию, кроме «всегда», я скажу ему, чтобы он выбирал «всегда» при работе с системой отслеживания.

1. Обычно я хочу обнаружить выбранный вариант местоположения пользователя, и если он не «всегда», я хочу снова попросить его выбрать вариант «всегда». Это возможно?

2. Я хочу добавить параметр «всегда» во всплывающее окно службы запросов, в настоящее время я получаю эти три значения: «разрешить при использовании приложения», «разрешить один раз» и «не разрешать». Я добавил разрешения в формате:

<key>NSLocationUsageDescription</key>
<key>NSLocationAlwaysUsageDescription</key>
<key>NSLocationWhenInUseUsageDescription</key>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>

но он показывает только три значения, проверьте этот снимок экрана:

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


person Archana Sharma    schedule 23.01.2020    source источник


Ответы (1)


Вы можете использовать response-native-permissions:

import Permissions, { PERMISSIONS, RESULTS } from 'react-native-permissions'

const permissionStatus = await Permissions.check(PERMISSIONS.IOS.LOCATION_ALWAYS)

permissionsStatus будет одним из RESULTS возможных значений:

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

person Charles Mangwa    schedule 23.01.2020
comment
Привет, я уже использовал это, но получил такой ответ "ios.permission.LOCATION_ALWAYS permission checked: denied". Любое решение ?? - person Archana Sharma; 23.01.2020
comment
А что делать, если статус разрешения заблокирован ?? - person Archana Sharma; 23.01.2020
comment
Затем я предлагаю вам отобразить своим пользователям сообщение, объясняющее, почему вам нужно это конкретное разрешение, например, с помощью кнопки «Предоставить разрешение». Обратный вызов такой кнопки будет Linking.openURL('app-settings:') (Linking от react-native), который будет напрямую открывать настройки вашего приложения в приложении настроек iOS. Оттуда они смогут вручную предоставить разрешение. Обратите внимание, что если разрешение было 'denied', то единственное, что вы можете сделать на iOS, если я не ошибаюсь, - это вручную разрешить пользователю (Apple не позволяет вам программно изменять его самостоятельно). - person Charles Mangwa; 23.01.2020
comment
Я делаю то же самое прямо сейчас, открывая настройку для этого пользователя. Но я думал, что мы можем сделать это программно. - person Archana Sharma; 24.01.2020
comment
react-native-permissions просто скажите нам, предоставляется ли LOCATION_ALWAYS или что-то еще. Здесь нам нужно определить, какая услуга включена пользователем прямо сейчас. Есть ли способ сделать это ?? - person Archana Sharma; 24.01.2020
comment
Я хочу получить значение включенной опции пользователем. Какие-либо предложения?? - person Archana Sharma; 24.01.2020
comment
Что означает предоставленный статус? Он всегда возвращает предоставленный, если пользователь выбирает любой вариант, кроме никогда ?? Я хочу определить, что пользователь выбирает Всегда или нет? - person Archana Sharma; 24.01.2020